C $Header: /u/gcmpack/MITgcm/pkg/ctrl/ctrl_bound.F,v 1.3 2008/02/09 23:28:59 gforget Exp $
C $Name:  $

#include "CPP_OPTIONS.h"

C     !ROUTINE: CTRL_BOUND_3D
C     !INTERFACE:
      SUBROUTINE CTRL_BOUND_3D(
     I             fieldCur,maskFld3d,
     I             boundsVec,myThid)
C     !DESCRIPTION: \bv
C     *==========================================================*
C     | started: Gael Forget gforget@mit.edu 20-Aug-2007
C     |
C     | o in forward mode: impose bounds on ctrl vector values
C     | o in adjoint mode: do nothing ... or emulate local minimum
C     *==========================================================*

#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"

      integer myThid,bi,bj,i,j,k
      integer itlo,ithi,jtlo,jthi
      _RL fieldCur(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr,nsx,nsy)
      _RL maskFld3d(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr,nsx,nsy)
      _RL boundsVec(5)

      jtlo = mybylo(mythid)
      jthi = mybyhi(mythid)
      itlo = mybxlo(mythid)
      ithi = mybxhi(mythid)

      if (boundsVec(1).LT.boundsVec(4)) then
 
      do bj = jtlo,jthi
        do bi = itlo,ithi
          do k = 1,nr
            do j = 1,sny
              do i = 1,snx
          IF (maskFld3d(i,j,k,bi,bj).NE.0.) then
            IF (fieldCur(i,j,k,bi,bj).gt.boundsVec(4)) then
             fieldCur(i,j,k,bi,bj)=boundsVec(4)
            ENDIF
            IF (fieldCur(i,j,k,bi,bj).lt.boundsVec(1)) then
             fieldCur(i,j,k,bi,bj)=boundsVec(1)
            ENDIF
          ENDIF
              enddo
            enddo
          enddo
        enddo
      enddo

      endif

      end


C !ROUTINE: CTRL_BOUND_2D C !INTERFACE: SUBROUTINE CTRL_BOUND_2D( I fieldCur,maskFld3d, I boundsVec,myThid) C !DESCRIPTION: \bv C *==========================================================* C | started: Gael Forget gforget@mit.edu 20-Aug-2007 C | C | o in forward mode: impose bounds on ctrl vector values C | o in adjoint mode: do nothing ... or emulate local minimum C *==========================================================* #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" integer myThid,bi,bj,i,j,k integer itlo,ithi,jtlo,jthi _RL fieldCur(1-Olx:sNx+Olx,1-Oly:sNy+Oly,nsx,nsy) _RL maskFld3d(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr,nsx,nsy) _RL boundsVec(5) jtlo = mybylo(mythid) jthi = mybyhi(mythid) itlo = mybxlo(mythid) ithi = mybxhi(mythid) if (boundsVec(1).LT.boundsVec(4)) then do bj = jtlo,jthi do bi = itlo,ithi do j = 1-oly,sny+oly do i = 1-olx,snx+olx IF (maskFld3d(i,j,1,bi,bj).NE.0.) then IF (fieldCur(i,j,bi,bj).gt.boundsVec(4)) then fieldCur(i,j,bi,bj)=boundsVec(4) ENDIF IF (fieldCur(i,j,bi,bj).lt.boundsVec(1)) then fieldCur(i,j,bi,bj)=boundsVec(1) ENDIF ENDIF enddo enddo enddo enddo endif end