Back to home page

MITgcm

 
 

    


File indexing completed on 2026-03-19 05:08:48 UTC

view on githubraw file Latest commit 69361556 on 2026-03-18 21:20:20 UTC
69361556c2 Mart*0001 #include "OBCS_OPTIONS.h"
                0002 #ifdef ALLOW_CTRL
                0003 # include "CTRL_OPTIONS.h"
                0004 #endif
                0005 
                0006 CBOP
                0007 C !ROUTINE: OBCS_COST_DRIVER
                0008 
                0009 C !INTERFACE: ==========================================================
                0010       SUBROUTINE OBCS_COST_DRIVER(
                0011      I                             myTime, myIter, myThid )
                0012 
                0013 C !DESCRIPTION:
                0014 C     - Calculate cost function contributions (Tikhonov regularisation)
                0015 C       for obcs
                0016 C     - modified from pkg/ecco/cost_obcs.F
                0017 
                0018 C !USES: ===============================================================
                0019       IMPLICIT NONE
                0020 C     == Global variables ==
                0021 #include "SIZE.h"
                0022 #include "EEPARAMS.h"
                0023 #ifdef ALLOW_CTRL
                0024 # include "CTRL_SIZE.h"
                0025 # include "CTRL.h"
                0026 #endif
                0027 #ifdef ALLOW_OBCS_CONTROL
                0028 # include "CTRL_OBCS.h"
                0029 #endif
                0030 
                0031 C !INPUT PARAMETERS: ===================================================
                0032       _RL     myTime
                0033       INTEGER myIter
                0034       INTEGER myThid
                0035 
                0036 #if defined ALLOW_CTRL && defined ALLOW_COST
                0037 C !LOCAL VARIABLES: ====================================================
                0038       INTEGER startrec
                0039       INTEGER endrec
                0040       INTEGER ivar
                0041       INTEGER iobcsN, iobcsS, iobcsE, iobcsW
                0042 CEOP
                0043 
                0044       IF ( useObcsCostContribution ) THEN
                0045 
                0046 C     Find ctrl-indices
                0047        iobcsN = 0
                0048        iobcsS = 0
                0049        iobcsE = 0
                0050        iobcsW = 0
                0051        DO ivar = 1, maxcvars
                0052         IF ( ncvargrd(ivar) .EQ. 'm' ) THEN
                0053          IF ( ncvarindex(ivar) .EQ. 1 ) iobcsN = ivar
                0054          IF ( ncvarindex(ivar) .EQ. 2 ) iobcsS = ivar
                0055          IF ( ncvarindex(ivar) .EQ. 3 ) iobcsE = ivar
                0056          IF ( ncvarindex(ivar) .EQ. 4 ) iobcsW = ivar
                0057         ENDIF
                0058        ENDDO
                0059 
                0060 #ifdef ALLOW_OBCSN_CONTROL
                0061        IF ( iobcsN.GT.0 ) THEN
                0062 cgg   North boundary contribution to cost function.
                0063         startrec = ncvarrecstart(iobcsN)
                0064         endrec   = ncvarrecsend(iobcsN)
                0065         CALL OBCS_COST_OB_N( startrec, endrec,
                0066      I                       myTime, myIter, myThid )
                0067        ENDIF
                0068 #endif
                0069 #ifdef ALLOW_OBCSS_CONTROL
                0070        IF ( iobcsS.GT.0 ) THEN
                0071 cgg   South boundary contribution to cost function.
                0072         startrec = ncvarrecstart(iobcsS)
                0073         endrec   = ncvarrecsend(iobcsS)
                0074         CALL OBCS_COST_OB_S( startrec, endrec,
                0075      I                       myTime, myIter, myThid )
                0076        ENDIF
                0077 #endif
                0078 #ifdef ALLOW_OBCSE_CONTROL
                0079        IF ( iobcsE.GT.0 ) THEN
                0080 cgg   East boundary contribution to cost function.
                0081         startrec = ncvarrecstart(iobcsE)
                0082         endrec   = ncvarrecsend(iobcsE)
                0083         CALL OBCS_COST_OB_E( startrec, endrec,
                0084      I                       myTime, myIter, myThid )
                0085        ENDIF
                0086 #endif
                0087 #ifdef ALLOW_OBCSW_CONTROL
                0088        IF ( iobcsW.GT.0 ) THEN
                0089 cgg   West boundary contribution to cost function.
                0090         startrec = ncvarrecstart(iobcsW)
                0091         endrec   = ncvarrecsend(iobcsW)
                0092         CALL OBCS_COST_OB_W( startrec, endrec,
                0093      I                       myTime, myIter, myThid )
                0094        ENDIF
                0095 #endif
                0096 
                0097 #ifdef OBCS_VOLFLUX_COST_CONTRIBUTION
                0098        STOP 'CPP-flag OBCS_VOLFLUX_COST_CONTRIBUTION defined: '//
                0099      &      'S/R OBCS_COST_VOL needs to be fixed!'
                0100 c       IF ( ( iobcsN+iobcsS+iobcsE+iobcsW ) .GT.0 ) THEN
                0101 c        CALL OBCS_COST_VOL( startrec, endrec,
                0102 c     I                      myTime, myIter, myThid )
                0103 c       ENDIF
                0104 #endif
                0105 
                0106 C     useObcsCostContribution
                0107       ENDIF
                0108 
                0109 #endif /* ALLOW_CTRL and ALLOW_COST */
                0110 
                0111       RETURN
                0112       END