C $Header: /u/gcmpack/MITgcm/pkg/ctrl/ctrl_depth_ini.F,v 1.7 2015/02/23 23:22:45 jmc Exp $
C $Name:  $

#include "CTRL_OPTIONS.h"

CBOP
C     !ROUTINE: ctrl_depth_ini
C     !INTERFACE:
      subroutine CTRL_DEPTH_INI( mythid )

C     !DESCRIPTION: \bv
c     *=================================================================
c     | SUBROUTINE ctrl_depth_ini
c     | Add the depth part of the control vector to the model state
c     | and update the tile halos.
c     | The control vector is defined in the header file "ctrl.h".
c     *=================================================================
C     \ev

C     !USES:
      implicit none

c     == global variables ==
#include "EEPARAMS.h"
#include "SIZE.h"
#include "GRID.h"
#include "CTRL_SIZE.h"
#include "ctrl.h"
#include "ctrl_dummy.h"
#include "optim.h"

C     !INPUT/OUTPUT PARAMETERS:
c     == routine arguments ==
      integer mythid

#ifdef ALLOW_DEPTH_CONTROL
C     !LOCAL VARIABLES:
c     == local variables ==

      integer bi,bj
      integer i,j,k
      integer itlo,ithi
      integer jtlo,jthi
      integer jmin,jmax
      integer imin,imax
      integer il

      logical equal
      logical doglobalread
      logical ladinit

      character*( 80)   fnamedepth
      character*(max_len_mbuf) msgbuf

      _RL     fac

c     == external ==
      integer  ilnblnk
      external 

c     == end of interface ==
CEOP

      jtlo = mybylo(mythid)
      jthi = mybyhi(mythid)
      itlo = mybxlo(mythid)
      ithi = mybxhi(mythid)
      jmin = 1
      jmax = sny
      imin = 1
      imax = snx

      doglobalread = .false.
      ladinit      = .false.

      equal = .true.

      if ( equal ) then
        fac = 1. _d 0
      else
        fac = 0. _d 0
      endif

      write(standardmessageunit,'(21x,a)')
     &     'ctrl_depth_ini: ctrl update R_low,'
      write(standardmessageunit,'(21x,a)')
     &     '                adding the control vector.'

C     Re-initialize hFacC, so that TAMC/TAF can see it
C     Once hFacC is the control variable, and not its anomaly
C     this will be no longer necessary
      do bj = jtlo,jthi
       do bi = itlo,ithi
        do j = 1-oly,sny+oly
         do i = 1-olx,snx+olx
          tmpfld2d(i,j,bi,bj) = 0. _d 0
         enddo
        enddo
       enddo
      enddo

C--
      do bj = jtlo,jthi
        do bi = itlo,ithi
          do j = 1-oly,sny+oly
            do i = 1-olx,snx+olx
              xx_r_low(i,j,bi,bj) = 0. _d 0
            enddo
          enddo
        enddo
      enddo

      il=ilnblnk( xx_depth_file )
      write(fnamedepth(1:80),'(2a,i10.10)')
     &     xx_depth_file(1:il),'.',optimcycle
      call ACTIVE_READ_XY( fnamedepth, tmpfld2d, 1,
     &                     doglobalread, ladinit, optimcycle,
     &                     mythid, xx_depth_dummy )
      do bj = jtlo,jthi
       do bi = itlo,ithi
        do j = jmin,jmax
         do i = imin,imax
          xx_r_low(i,j,bi,bj) = r_low(i,j,bi,bj)
     &                        + fac*tmpfld2d(i,j,bi,bj)
         enddo
        enddo
       enddo
      enddo

c--   Update the tile edges.

      _EXCH_XY_RL( xx_r_low, myThid )

#endif /* ALLOW_DEPTH_CONTROL */

      return
      end