Back to home page

MITgcm

 
 

    


File indexing completed on 2024-03-02 06:10:17 UTC

view on githubraw file Latest commit 5cf43646 on 2024-03-01 18:50:49 UTC
4d72283393 Mart*0001 CBOP
                0002 C     !ROUTINE: CTRL.h
                0003 C     !INTERFACE:
                0004 C     #include "CTRL.h"
                0005 
                0006 C     !DESCRIPTION:
                0007 C     *================================================================*
                0008 C     | CTRL.h
                0009 C     | o Header file defining control variables of the ECCO state
                0010 C     |   estimation tool.
5cf4364659 Mart*0011 C     | o Depending on the specific problem to be studied users may
4d72283393 Mart*0012 C     |   have to modify this header file.
                0013 C     | o started: Christian Eckert eckert@mit.edu  30-Jun-1999
                0014 C     *================================================================*
                0015 CEOP
                0016 
5cf4364659 Mart*0017 C--   set maximum number of control variables:
4d72283393 Mart*0018       INTEGER     maxcvars
5cf4364659 Mart*0019 #ifdef ALLOW_OBCS_CONTROL
                0020       PARAMETER( maxcvars = 4
784bc8f884 Patr*0021 #else
5cf4364659 Mart*0022       PARAMETER( maxcvars = 0
                0023 #endif
                0024      &         + maxCtrlArr2D + maxCtrlArr3D + maxCtrlTim2D )
                0025 
                0026 #ifdef READ_OLD_CTRL_PACK_FILE
                0027 C--   Just to enable to read-in old packed-ctrl file (specially the header):
                0028 C     set "old_maxcvars" to previous maxcvars value that was used to write
                0029 C     this specific old (prior to PR #796) packed-ctrl file
                0030       INTEGER old_maxcvars
                0031       PARAMETER( old_maxcvars = 400 )
2b083959fe Patr*0032 #endif
5d5c0b0d52 Patr*0033 
5cf4364659 Mart*0034 C-  ctrlprec will be set to 32 for ECCO to reduce I/O but this jeopardizes
                0035 C   gradient checks accuracy, so should be set to 64 by default.
4d72283393 Mart*0036       INTEGER     ctrlprec
                0037       COMMON /controlparams_i/ ctrlprec
5d5c0b0d52 Patr*0038 
8f0b59c61c Patr*0039 #ifdef ALLOW_ADMTLM
4d72283393 Mart*0040       INTEGER admtlmrec
                0041       PARAMETER( admtlmrec = Nx*Ny*(4*Nr+1) )
                0042       COMMON /controlvars_admtlm_r/
8f0b59c61c Patr*0043      &                       cbuffGlobal
a5276edbc9 Patr*0044       _RL cbuffGlobal( admtlmrec )
8f0b59c61c Patr*0045 #endif
cc7fa87b6d Gael*0046 
4d72283393 Mart*0047       COMMON /controlparams_r/
3a2820aa92 Gael*0048      &                       delZexp,
                0049      &                       forcingPrecond
                0050 
ca0df8acbf Patr*0051       _RL delZexp
3a2820aa92 Gael*0052       _RL forcingPrecond
ca0df8acbf Patr*0053 
4d72283393 Mart*0054       COMMON /controlparams_c/
f9d7cbfb72 Ou W*0055      &                       ctrlDir
                0056 
                0057       CHARACTER*(MAX_LEN_FNAM) ctrlDir
                0058 
cf705a6c8e Mart*0059 C     doInitXX            :: at iter 0 only, set ctrls to 0 and write
                0060 C                            to xx*000.data
                0061 C     doMainPack          :: pack adxx*data files into ecco_cost_* file
                0062 C                            (usually for optim.x)
                0063 C     doMainUnpack        :: unpack ecco_ctrl_* file (usually from optim.x)
                0064 C                            into xx_*data files
                0065 C     doPackDiag          :: output diag_pack*/diag_unpack* files during
                0066 C                            ctrl_pack/ctrl_unpack
                0067 C     doSinglePrecTapelev :: reduce precision of ad tape files to float32
                0068 C                            (only used in pkg/autodiff ...)
5e5938b829 Gael*0069 
5cf4364659 Mart*0070       COMMON /controlparams_l/
8f0b59c61c Patr*0071      &                       doInitXX,
0ba65c94ff Patr*0072      &                       doAdmTlm,
b052f6c8f1 Patr*0073      &                       doPackDiag,
                0074      &                       doZscaleUnpack,
f8659cb5d2 Patr*0075      &                       doZscalePack,
                0076      &                       doMainUnpack,
                0077      &                       doMainPack,
516917913e Patr*0078      &                       doSinglePrecTapelev,
8a10dfc8f1 Patr*0079      &                       doAdmtlmBypassAD
f8659cb5d2 Patr*0080 
4d72283393 Mart*0081       LOGICAL doInitXX
                0082       LOGICAL doAdmTlm
                0083       LOGICAL doPackDiag
                0084       LOGICAL doZscaleUnpack
                0085       LOGICAL doZscalePack
                0086       LOGICAL doMainUnpack
                0087       LOGICAL doMainPack
                0088       LOGICAL doSinglePrecTapelev
                0089       LOGICAL doAdmtlmBypassAD
                0090 
5cf4364659 Mart*0091 C--   parameters vectors, set in S/R CTRL_INIT_CTRLVAR, that describe
                0092 C     the contorl variables, also used for identification across
                0093 C     different parts of the code:
                0094 C     ncvarfname    :: unique (and predefined) name of control variable
                0095 C     ncvarindex    :: number to identify variable, depends specified ctrl-vars
                0096 C     ncvarrecs     :: number of records for time dependent ctrl-variables;
                0097 C     ncvarrecstart :: first and last record of time dependent ctrl-variables;
                0098 C     ncvarrecsend  :: for constant-in-time variables all three are 1
                0099 C     ncvargrd      :: type or/and position on the grid, possible values:
                0100 C                      'c' (cell Center), 'w' (West face) ,'s' (South face),
                0101 C                      'i' (shelfice), 'm' (obcs)
                0102 C     ncvartype     :: shape of the grid: Arr3D, Arr2D, Tim2D, SecXZ, SecYZ
                0103 C     ncvarx/y/nrmax:: i,j,k-dimensions of ctrl-variable (on tile)
                0104 
                0105 C--   holds control-variable setting and params as maxcvars long vector
                0106 C     in following "controlvar_*" common blocks:
4d72283393 Mart*0107       COMMON /controlvars_i/
2dcaa8b9a5 Patr*0108      &                       nvartype,
                0109      &                       nvarlength,
                0110      &                       ncvarindex,
                0111      &                       ncvarrecs,
                0112      &                       ncvarrecstart,
                0113      &                       ncvarrecsend,
                0114      &                       ncvarxmax,
                0115      &                       ncvarymax,
                0116      &                       ncvarnrmax,
                0117      &                       nwetctile,
                0118      &                       nwetstile,
5d5c0b0d52 Patr*0119      &                       nwetwtile,
                0120      &                       nwetvtile,
                0121      &                       nwetcglobal,
                0122      &                       nwetsglobal,
                0123      &                       nwetwglobal,
8f0b59c61c Patr*0124      &                       nwetvglobal,
                0125      &                       nbuffglobal
4d72283393 Mart*0126       INTEGER nvartype
                0127       INTEGER nvarlength
                0128       INTEGER ncvarindex    ( maxcvars )
                0129       INTEGER ncvarrecs     ( maxcvars )
                0130       INTEGER ncvarrecstart ( maxcvars )
                0131       INTEGER ncvarrecsend  ( maxcvars )
                0132       INTEGER ncvarxmax     ( maxcvars )
                0133       INTEGER ncvarymax     ( maxcvars )
                0134       INTEGER ncvarnrmax    ( maxcvars )
                0135       INTEGER nwetctile     ( nSx,nSy,Nr )
                0136       INTEGER nwetstile     ( nSx,nSy,Nr )
                0137       INTEGER nwetwtile     ( nSx,nSy,Nr )
                0138       INTEGER nwetvtile     ( nSx,nSy,Nr )
                0139       INTEGER nwetcglobal     ( Nr )
                0140       INTEGER nwetsglobal     ( Nr )
                0141       INTEGER nwetwglobal     ( Nr )
                0142       INTEGER nwetvglobal     ( Nr )
                0143       INTEGER nbuffglobal
5d5c0b0d52 Patr*0144 
6b47d550f4 Mart*0145 #ifdef ALLOW_SHELFICE
4d72283393 Mart*0146       COMMON /controlvars_i_shifwflx/
5cf4364659 Mart*0147      &     nwetitile, nwetiglobal
4d72283393 Mart*0148       INTEGER nwetitile     ( nSx,nSy,Nr )
                0149       INTEGER nwetiglobal     ( Nr )
6b47d550f4 Mart*0150 #endif /* ALLOW_SHELFICE */
1d82288286 Mart*0151 
4d72283393 Mart*0152       COMMON /controlvars_c/
5cf4364659 Mart*0153      &                       ncvargrd,
                0154      &                       ncvartype,
                0155      &                       ncvarfname,
                0156      &                       yadprefix
                0157       CHARACTER*(1)            ncvargrd  ( maxcvars )
                0158       CHARACTER*(5)            ncvartype ( maxcvars )
                0159       CHARACTER*(MAX_LEN_FNAM) ncvarfname( maxcvars )
                0160       CHARACTER*(2)            yadprefix
                0161 
                0162 C     Define unit weight as a placeholder
4d72283393 Mart*0163       COMMON /ctrl_weights_unit_r/
cf705a6c8e Mart*0164      &                        wunit
f9d7cbfb72 Ou W*0165       _RL wunit     (Nr,nSx,nSy)
908f0be696 Patr*0166 
4d72283393 Mart*0167       COMMON /packnames_c/
39a73d0492 Gael*0168      &                      yadmark,
                0169      &                      ctrlname,
                0170      &                      costname,
                0171      &                      scalname,
                0172      &                      maskname,
                0173      &                      metaname,
                0174      &                      yctrlid,
                0175      &                      yctrlposunpack,
                0176      &                      yctrlpospack
4d72283393 Mart*0177       CHARACTER*2 yadmark
                0178       CHARACTER*9 ctrlname
                0179       CHARACTER*9 costname
                0180       CHARACTER*9 scalname
                0181       CHARACTER*9 maskname
                0182       CHARACTER*9 metaname
                0183       CHARACTER*10 yctrlid
                0184       CHARACTER*4 yctrlposunpack
                0185       CHARACTER*4 yctrlpospack
39a73d0492 Gael*0186 
                0187 #ifdef ALLOW_ADMTLM
4d72283393 Mart*0188       INTEGER          maxm, maxn
                0189       PARAMETER       ( maxm = Nx*Ny*(4*Nr+1), maxn=Nx*Ny*(4*Nr+1) )
39a73d0492 Gael*0190 
4d72283393 Mart*0191       COMMON /admtlm_i/ nveccount
                0192       INTEGER nveccount
39a73d0492 Gael*0193 
4d72283393 Mart*0194       COMMON /admtlm_r/ phtmpadmtlm
                0195       DOUBLE PRECISION phtmpadmtlm(maxn)
39a73d0492 Gael*0196 #endif
                0197 
5cf4364659 Mart*0198 C     Control variables:
                0199 C     ==================
                0200 
9b05094d7f Jean*0201 #ifdef ALLOW_OPENAD
5cf4364659 Mart*0202 
4d72283393 Mart*0203       COMMON /controlvars_r_openad/
61a813cf9a Gael*0204      &        xx_place_holder
707ab205a2 Patr*0205 # ifdef ALLOW_GENARR2D_CONTROL
5a3db3393c Patr*0206      &      , xx_genarr2d
707ab205a2 Patr*0207 # endif
                0208 # ifdef ALLOW_GENARR3D_CONTROL
                0209      &      , xx_genarr3d
                0210 # endif
61a813cf9a Gael*0211 
5cf4364659 Mart*0212       _RL xx_place_holder
707ab205a2 Patr*0213 # ifdef ALLOW_GENARR2D_CONTROL
f9d7cbfb72 Ou W*0214       _RL xx_genarr2d(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,
5a3db3393c Patr*0215      &                maxCtrlArr2D)
707ab205a2 Patr*0216 # endif
                0217 # ifdef ALLOW_GENARR3D_CONTROL
f9d7cbfb72 Ou W*0218       _RL xx_genarr3d(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy,
31a8529a5c Oliv*0219      &                maxCtrlArr3D)
707ab205a2 Patr*0220 # endif
61a813cf9a Gael*0221 
5cf4364659 Mart*0222 #endif /* ALLOW_OPENAD */
4d72283393 Mart*0223 
                0224 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|