Back to home page

darwin3

 
 

    


File indexing completed on 2026-05-21 20:04:51 UTC

view on githubraw file Latest commit ea437dae on 2026-04-07 22:15:22 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 # include "CTRL_OBCS.h"
                0027 #endif
                0028 
                0029 C !INPUT PARAMETERS: ===================================================
                0030       _RL     myTime
                0031       INTEGER myIter
                0032       INTEGER myThid
                0033 
                0034 #if defined ALLOW_CTRL && defined ALLOW_COST
                0035 C !LOCAL VARIABLES: ====================================================
                0036       INTEGER ivar
                0037       INTEGER iobcsN, iobcsS, iobcsE, iobcsW
ea437dae83 Hugo 0038 # ifdef ALLOW_OBCS_CONTROL
                0039       INTEGER startrec, endrec
                0040 # endif
69361556c2 Mart*0041 CEOP
                0042 
                0043       IF ( useObcsCostContribution ) THEN
                0044 
                0045 C     Find ctrl-indices
                0046        iobcsN = 0
                0047        iobcsS = 0
                0048        iobcsE = 0
                0049        iobcsW = 0
                0050        DO ivar = 1, maxcvars
                0051         IF ( ncvargrd(ivar) .EQ. 'm' ) THEN
                0052          IF ( ncvarindex(ivar) .EQ. 1 ) iobcsN = ivar
                0053          IF ( ncvarindex(ivar) .EQ. 2 ) iobcsS = ivar
                0054          IF ( ncvarindex(ivar) .EQ. 3 ) iobcsE = ivar
                0055          IF ( ncvarindex(ivar) .EQ. 4 ) iobcsW = ivar
                0056         ENDIF
                0057        ENDDO
                0058 
                0059 #ifdef ALLOW_OBCSN_CONTROL
                0060        IF ( iobcsN.GT.0 ) THEN
                0061 cgg   North boundary contribution to cost function.
                0062         startrec = ncvarrecstart(iobcsN)
                0063         endrec   = ncvarrecsend(iobcsN)
                0064         CALL OBCS_COST_OB_N( startrec, endrec,
                0065      I                       myTime, myIter, myThid )
                0066        ENDIF
                0067 #endif
                0068 #ifdef ALLOW_OBCSS_CONTROL
                0069        IF ( iobcsS.GT.0 ) THEN
                0070 cgg   South boundary contribution to cost function.
                0071         startrec = ncvarrecstart(iobcsS)
                0072         endrec   = ncvarrecsend(iobcsS)
                0073         CALL OBCS_COST_OB_S( startrec, endrec,
                0074      I                       myTime, myIter, myThid )
                0075        ENDIF
                0076 #endif
                0077 #ifdef ALLOW_OBCSE_CONTROL
                0078        IF ( iobcsE.GT.0 ) THEN
                0079 cgg   East boundary contribution to cost function.
                0080         startrec = ncvarrecstart(iobcsE)
                0081         endrec   = ncvarrecsend(iobcsE)
                0082         CALL OBCS_COST_OB_E( startrec, endrec,
                0083      I                       myTime, myIter, myThid )
                0084        ENDIF
                0085 #endif
                0086 #ifdef ALLOW_OBCSW_CONTROL
                0087        IF ( iobcsW.GT.0 ) THEN
                0088 cgg   West boundary contribution to cost function.
                0089         startrec = ncvarrecstart(iobcsW)
                0090         endrec   = ncvarrecsend(iobcsW)
                0091         CALL OBCS_COST_OB_W( startrec, endrec,
                0092      I                       myTime, myIter, myThid )
                0093        ENDIF
                0094 #endif
                0095 
                0096 #ifdef OBCS_VOLFLUX_COST_CONTRIBUTION
                0097        STOP 'CPP-flag OBCS_VOLFLUX_COST_CONTRIBUTION defined: '//
                0098      &      'S/R OBCS_COST_VOL needs to be fixed!'
                0099 c       IF ( ( iobcsN+iobcsS+iobcsE+iobcsW ) .GT.0 ) THEN
                0100 c        CALL OBCS_COST_VOL( startrec, endrec,
                0101 c     I                      myTime, myIter, myThid )
                0102 c       ENDIF
                0103 #endif
                0104 
                0105 C     useObcsCostContribution
                0106       ENDIF
                0107 
                0108 #endif /* ALLOW_CTRL and ALLOW_COST */
                0109 
                0110       RETURN
                0111       END