Back to home page

darwin3

 
 

    


File indexing completed on 2025-11-15 13:23:47 UTC

view on githubraw file Latest commit b7411f1a on 2025-11-06 19:05:26 UTC
6d54cf9ca1 Ed H*0001 #include "PACKAGES_CONFIG.h"
2846da876f Alis*0002 #include "CPP_OPTIONS.h"
30c7aa4d63 Gael*0003 #ifdef ALLOW_AUTODIFF
                0004 # include "AUTODIFF_OPTIONS.h"
                0005 #endif
b24e764352 Patr*0006 #ifdef ALLOW_CTRL
                0007 # include "CTRL_OPTIONS.h"
                0008 #endif
b4daa24319 Shre*0009 #ifdef ALLOW_TAPENADE
                0010 # ifdef ALLOW_SHELFICE
                0011 #  include "SHELFICE_OPTIONS.h"
                0012 # endif
                0013 # ifdef ALLOW_GMREDI
                0014 #  include "GMREDI_OPTIONS.h"
                0015 # endif
                0016 # ifdef ALLOW_EXF
                0017 #  include "EXF_OPTIONS.h"
                0018 # endif
                0019 # ifdef ALLOW_SEAICE
                0020 #  include "SEAICE_OPTIONS.h"
                0021 # endif
                0022 # ifdef ALLOW_ECCO
                0023 #  include "ECCO_OPTIONS.h"
                0024 # endif
                0025 c# ifdef ALLOW_THSICE
                0026 c# include "THSICE_OPTIONS.h"
                0027 c# endif
                0028 # ifdef ALLOW_BLING
                0029 #  include "BLING_OPTIONS.h"
                0030 # endif
                0031 #endif /* ALLOW_TAPENADE */
2846da876f Alis*0032 
9366854e02 Chri*0033 CBOP
                0034 C     !ROUTINE: INITIALISE_VARIA
                0035 C     !INTERFACE:
94875ed477 Jean*0036       SUBROUTINE INITIALISE_VARIA( myThid )
9366854e02 Chri*0037 C     !DESCRIPTION: \bv
                0038 C     *==========================================================*
94875ed477 Jean*0039 C     | SUBROUTINE INITIALISE_VARIA
                0040 C     | o Set the initial conditions for dynamics variables
                0041 C     |   and time dependent arrays
9366854e02 Chri*0042 C     *==========================================================*
94875ed477 Jean*0043 C     | This routine reads/writes  data from an input file and
                0044 C     | from various binary files.
                0045 C     | Each thread invokes an instance of this routine as does
                0046 C     | each process in a multi-process parallel environment like
                0047 C     | MPI.
9366854e02 Chri*0048 C     *==========================================================*
                0049 C     \ev
                0050 
                0051 C     !CALLING SEQUENCE:
                0052 C     INITIALISE_VARIA
                0053 C       |
02d90fb24c Jean*0054 C #ifdef ALLOW_AUTODIFF
49de6e3d98 Jean*0055 C       |-- INI_DEPTHS         \
05883b6cd5 Jean*0056 C       |-- CTRL_DEPTH_INI      \
                0057 C       |-- UPDATE_MASKS_ETC     } ALLOW_DEPTH_CONTROL case
                0058 C       |-- UPDATE_CG2D         /
fa00cf7ea4 Jean*0059 C #endif
49de6e3d98 Jean*0060 C       |-- INI_NLFS_VARS
9366854e02 Chri*0061 C       |-- INI_DYNVARS
fa00cf7ea4 Jean*0062 C       |-- INI_NH_VARS
d067a44b7e Jean*0063 C       |-- INI_FFIELDS
9366854e02 Chri*0064 C       |
                0065 C       |-- INI_FIELDS
                0066 C       |
94875ed477 Jean*0067 C       |-- INI_MIXING
                0068 C       |
                0069 C       |-- TAUEDDY_INIT_VARIA
                0070 C       |
417449666e Jean*0071 C       |-- INI_FORCING
                0072 C       |
9c7e8fe0f0 Jean*0073 C       |-- AUTODIFF_INIT_VARIA
cee16b76ae Dimi*0074 C       |
5c43c390b6 Alis*0075 C       |-- PACKAGES_INIT_VARIABLES
                0076 C       |
4be839313c Jean*0077 C       |-- COST_INIT_VARIA
                0078 C       |
94875ed477 Jean*0079 C       |-- CONVECTIVE_ADJUSTMENT_INI
9366854e02 Chri*0080 C       |
94875ed477 Jean*0081 C       |-- CALC_R_STAR
                0082 C       |-- UPDATE_R_STAR
a2a20dcddc Jean*0083 C       |-- UPDATE_SIGMA
9366854e02 Chri*0084 C       |-- CALC_SURF_DR
                0085 C       |-- UPDATE_SURF_DR
                0086 C       |
                0087 C       |-- UPDATE_CG2D
                0088 C       |
f9ff59e0c6 Jean*0089 C       |-- INTEGR_CONTINUITY
9366854e02 Chri*0090 C       |
94875ed477 Jean*0091 C       |-- CALC_R_STAR
                0092 C       |-- CALC_SURF_DR
                0093 C       |
f9ff59e0c6 Jean*0094 C       |-- STATE_SUMMARY
81d6a02def Jean*0095 C       |
                0096 C       |-- MONITOR
                0097 C       |
                0098 C       |-- DO_THE_MODEL_IO
2846da876f Alis*0099 
9366854e02 Chri*0100 C     !USES:
                0101       IMPLICIT NONE
2846da876f Alis*0102 C     == Global variables ==
                0103 #include "SIZE.h"
                0104 #include "EEPARAMS.h"
                0105 #include "PARAMS.h"
fb481a83c2 Alis*0106 #include "DYNVARS.h"
615c650f5e Jean*0107 #include "SURFACE.h"
b24e764352 Patr*0108 #ifdef ALLOW_AUTODIFF
                0109 # include "GRID.h"
                0110 # include "FFIELDS.h"
1f78d47f59 Jean*0111 # if ( defined ALLOW_CTRL && defined ALLOW_GENTIM2D_CONTROL && !defined ALLOW_TAPENADE )
af61e5eb16 Mart*0112 #  include "CTRL_SIZE.h"
                0113 #  include "CTRL_DUMMY.h"
1f78d47f59 Jean*0114 # endif
                0115 #endif /* ALLOW_AUTODIFF */
2846da876f Alis*0116 
b4daa24319 Shre*0117 #ifdef ALLOW_TAPENADE
                0118 # ifdef ALLOW_GMREDI
                0119 #  include "GMREDI.h"
                0120 # endif
                0121 # ifdef ALLOW_CTRL
                0122 #  include "CTRL_SIZE.h"
4d72283393 Mart*0123 #  include "CTRL.h"
b4daa24319 Shre*0124 #  include "CTRL_GENARR.h"
edcd27be69 Mart*0125 #  include "CTRL_DUMMY.h"
b4daa24319 Shre*0126 # endif
                0127 # ifdef ALLOW_CD_CODE
                0128 #  include "CD_CODE_VARS.h"
                0129 # endif
                0130 # ifdef ALLOW_DIC
                0131 #  include "DIC_VARS.h"
                0132 #  include "DIC_ATMOS.h"
                0133 #  include "DIC_LOAD.h"
                0134 # endif
                0135 # ifdef ALLOW_PTRACERS
                0136 #  include "PTRACERS_SIZE.h"
                0137 #  include "PTRACERS_FIELDS.h"
                0138 #  include "PTRACERS_PARAMS.h"
                0139 # endif
                0140 # ifdef ALLOW_GENERIC_ADVDIFF
                0141 #  include "GAD_SOM_VARS.h"
                0142 # endif
                0143 # ifdef ALLOW_EXF
                0144 #  include "EXF_PARAM.h"
                0145 #  include "EXF_INTERP_SIZE.h"
                0146 #  include "EXF_INTERP_PARAM.h"
                0147 #  include "EXF_FIELDS.h"
                0148 # endif
                0149 # ifdef ALLOW_STREAMICE
                0150 #  include "STREAMICE.h"
                0151 #  include "STREAMICE_CG.h"
                0152 # endif
                0153 # ifdef ALLOW_THSICE
                0154 #  include "THSICE_VARS.h"
                0155 # endif
                0156 # ifdef ALLOW_SEAICE
                0157 #  include "SEAICE_SIZE.h"
                0158 #  include "SEAICE.h"
                0159 # endif
                0160 # ifdef ALLOW_ECCO
                0161 #  include "ECCO_SIZE.h"
                0162 #  include "ECCO.h"
                0163 # endif
                0164 # ifdef ALLOW_BLING
                0165 #  include "BLING_VARS.h"
                0166 #  include "BLING_LOAD.h"
                0167 # endif
                0168 #endif /* ALLOW_TAPENADE */
                0169 
9366854e02 Chri*0170 C     !INPUT/OUTPUT PARAMETERS:
2846da876f Alis*0171       INTEGER myThid
                0172 
9366854e02 Chri*0173 C     !LOCAL VARIABLES:
51575f66de Mart*0174 #ifdef INCLUDE_CONVECT_INI_CALL
81d6a02def Jean*0175       INTEGER bi,bj
9f5240b52a Jean*0176 #endif
9366854e02 Chri*0177 CEOP
2846da876f Alis*0178 
abb214f17f Alis*0179 #ifdef ALLOW_DEBUG
                0180       IF (debugMode) CALL DEBUG_ENTER('INITIALISE_VARIA',myThid)
                0181 #endif
                0182 
02d90fb24c Jean*0183 #ifdef ALLOW_AUTODIFF
51d88069bf Jean*0184       nIter0 = NINT( (startTime-baseTime)/deltaTClock )
a424c359ed Gael*0185 #endif /* ALLOW_AUTODIFF */
e32070726e Patr*0186 
11c3150c71 Mart*0187 #ifdef ALLOW_DEPTH_CONTROL
b7b61e618a Mart*0188 C--   Intialize the depth for TAF
2e37b0b25f Patr*0189       CALL INI_DEPTHS( myThid )
49de6e3d98 Jean*0190 C--   Get control parameter depth
616600b8d2 Patr*0191       CALL CTRL_DEPTH_INI( myThid )
                0192 C--   Re-calculate hFacS/W and some other parameters from hFacC
                0193       CALL UPDATE_MASKS_ETC( myThid )
                0194 C--   Update laplace operators for use in 2D conjugate gradient solver.
                0195       CALL UPDATE_CG2D( startTime, nIter0, myThid )
11c3150c71 Mart*0196 #endif /* ALLOW_DEPTH_CONTROL */
05883b6cd5 Jean*0197 
                0198 C--   Initialise Non-Lin FreeSurf variables:
                0199       CALL INI_NLFS_VARS( myThid )
                0200 
aea29c8517 Alis*0201 C--   Initialize DYNVARS arrays (state fields + G terms: Gu,Gv,...) to zero [always]
abb214f17f Alis*0202 #ifdef ALLOW_DEBUG
                0203       IF (debugMode) CALL DEBUG_CALL('INI_DYNVARS',myThid)
                0204 #endif
aea29c8517 Alis*0205       CALL INI_DYNVARS( myThid )
                0206 
fa00cf7ea4 Jean*0207 C--   Initialize NH_VARS arrays to zero [always]
                0208 #ifdef ALLOW_NONHYDROSTATIC
                0209       CALL INI_NH_VARS( myThid )
                0210 #endif
                0211 
d067a44b7e Jean*0212 C--   Initialize FFIELDS arrays to zero [always]
                0213       CALL INI_FFIELDS( myThid )
                0214 
2846da876f Alis*0215 C--   Initialise model fields.
                0216 C     Starting values of U, V, W, temp., salt. and tendency terms
                0217 C     are set here. Fields are either set to default or read from
                0218 C     stored files.
abb214f17f Alis*0219 #ifdef ALLOW_DEBUG
                0220       IF (debugMode) CALL DEBUG_CALL('INI_FIELDS',myThid)
0320e25227 Mart*0221 #endif
                0222 #ifdef ALLOW_AUTODIFF_TAMC
                0223 CADJ STORE phi0surf = tapelev_init, key = 1
abb214f17f Alis*0224 #endif
2846da876f Alis*0225       CALL INI_FIELDS( myThid )
417449666e Jean*0226 
94875ed477 Jean*0227 C--   Initialise 3-dim. diffusivities
                0228 #ifdef ALLOW_DEBUG
                0229       IF (debugMode) CALL DEBUG_CALL('INI_MIXING',myThid)
                0230 #endif
                0231       CALL INI_MIXING( myThid )
                0232 
                0233 #ifdef ALLOW_EDDYPSI
                0234 C--  Initialise eddy diffusivities
                0235       CALL TAUEDDY_INIT_VARIA( myThid )
                0236 #endif
                0237 
417449666e Jean*0238 C--   Initialise model forcing fields.
                0239 #ifdef ALLOW_DEBUG
                0240       IF (debugMode) CALL DEBUG_CALL('INI_FORCING',myThid)
                0241 #endif
                0242       CALL INI_FORCING( myThid )
2846da876f Alis*0243 
9c7e8fe0f0 Jean*0244 #ifdef ALLOW_AUTODIFF
b7b61e618a Mart*0245 C--   Initialise active fields to help TAF
ea7d076e20 Gael*0246       if (useAUTODIFF) CALL AUTODIFF_INIT_VARIA( myThid )
09d2417e9e Patr*0247 #endif
                0248 
703793559c Patr*0249 C--   Initialize variable data for packages
abb214f17f Alis*0250 #ifdef ALLOW_DEBUG
                0251       IF (debugMode) CALL DEBUG_CALL('PACKAGES_INIT_VARIABLES',myThid)
b24e764352 Patr*0252 #endif
                0253 #ifdef ALLOW_AUTODIFF_TAMC
                0254 # ifdef NONLIN_FRSURF
                0255 CADJ STORE recip_hFacC = tapelev_init, key = 1
                0256 # endif
af61e5eb16 Mart*0257 # ifdef ALLOW_GENTIM2D_CONTROL
                0258 C     It not clear, why this is needed and hopefully we will find a
                0259 C     better way to avoid the recomputation warning.
                0260 CADJ STORE xx_gentim2d_dummy = dummytape, key = 1
                0261 # endif
abb214f17f Alis*0262 #endif
703793559c Patr*0263       CALL PACKAGES_INIT_VARIABLES( myThid )
                0264 
4be839313c Jean*0265 #ifdef ALLOW_COST
                0266 C--   Initialise the cost function (moved out of packages_init_variables to
                0267 C     here to prevent resetting cost-funct in adinitialise_varia recomput.)
                0268       CALL COST_INIT_VARIA( myThid )
                0269 #endif /* ALLOW_COST */
                0270 
02d90fb24c Jean*0271 c#ifndef ALLOW_AUTODIFF
6d61b52b09 Jean*0272 c     IF ( usePickupBeforeC35 .AND. startTime .NE. baseTime ) THEN
                0273 C-- IMPORTANT : Need to activate the following call to restart from a pickup
                0274 C     file written by MITgcmUV_checkpoint34 (Feb-08, 2001) or earlier.
                0275 C-  Disable this option on Jan-09, 2007.
                0276 c      CALL THE_CORRECTION_STEP(startTime, nIter0, myThid)
                0277 c     ENDIF
                0278 c#endif
afe84fa4aa Jean*0279 
51575f66de Mart*0280 #ifdef INCLUDE_CONVECT_INI_CALL
fb481a83c2 Alis*0281 C--   Initial conditions are convectively adjusted (for historical reasons)
51d88069bf Jean*0282       IF ( startTime .EQ. baseTime .AND. cAdjFreq .NE. 0. ) THEN
abb214f17f Alis*0283 #ifdef ALLOW_DEBUG
                0284       IF (debugMode) CALL DEBUG_CALL('CONVECTIVE_ADJUSTMENT_INI',myThid)
                0285 #endif
81d6a02def Jean*0286 CADJ loop = parallel
2846da876f Alis*0287         DO bj = myByLo(myThid), myByHi(myThid)
ad9b3080a0 Patr*0288 CADJ loop = parallel
2846da876f Alis*0289          DO bi = myBxLo(myThid), myBxHi(myThid)
2cfc9d59a2 Patr*0290            CALL CONVECTIVE_ADJUSTMENT_INI(
81d6a02def Jean*0291      I                     bi, bj, startTime, nIter0, myThid )
2846da876f Alis*0292          ENDDO
                0293         ENDDO
a27159adf7 Jean*0294       ENDIF
51575f66de Mart*0295 #endif /* INCLUDE_CONVECT_INI_CALL */
fb481a83c2 Alis*0296 
8de3419279 Jean*0297 #ifdef NONLIN_FRSURF
9fdcce8056 Jean*0298 C--   Compute the surface level thickness <-- function of etaH(n)
8de3419279 Jean*0299 C     and modify hFac(C,W,S) accordingly :
cdc9f269ae Patr*0300 # ifndef DISABLE_RSTAR_CODE
615c650f5e Jean*0301       IF ( select_rStar.NE.0 )
                0302      &  CALL CALC_R_STAR(etaH, startTime, -1 , myThid )
cdc9f269ae Patr*0303 # endif /* DISABLE_RSTAR_CODE */
490a5c43c7 Jean*0304       IF ( nonlinFreeSurf.GT.0 ) THEN
b3d1ebfd19 Jean*0305        IF ( select_rStar.GT.0 ) THEN
cdc9f269ae Patr*0306 # ifndef DISABLE_RSTAR_CODE
72a058b866 Gael*0307         CALL UPDATE_R_STAR( .TRUE., startTime, nIter0, myThid )
a2a20dcddc Jean*0308 # endif /* DISABLE_RSTAR_CODE */
                0309        ELSEIF ( selectSigmaCoord.NE.0 ) THEN
                0310 # ifndef DISABLE_SIGMA_CODE
                0311         CALL UPDATE_SIGMA( etaH, startTime, nIter0, myThid )
bfdbc242ac Jean*0312 # endif /* DISABLE_SIGMA_CODE */
b3d1ebfd19 Jean*0313        ELSE
ad3a31a87b Jean*0314         CALL CALC_SURF_DR(etaH, startTime, -1 , myThid )
aecc8b0f47 Mart*0315 #ifdef ALLOW_AUTODIFF_TAMC
                0316 C     These fields are only updated in the surface layer and TAF gets
                0317 C     confused about it so that their contribution is not always added
                0318 C     to the hfac*_ad lateron. This directive fixes that.
                0319 CADJ INCOMPLETE recip_hFacC, recip_hFacW, recip_hFacS
                0320 #endif /* ALLOW_AUTODIFF_TAMC */
72a058b866 Gael*0321         CALL UPDATE_SURF_DR( .TRUE., startTime, nIter0, myThid )
b3d1ebfd19 Jean*0322        ENDIF
8de3419279 Jean*0323       ENDIF
                0324 C-    update also CG2D matrix (and preconditioner)
490a5c43c7 Jean*0325       IF ( nonlinFreeSurf.GT.2 ) THEN
8de3419279 Jean*0326         CALL UPDATE_CG2D( startTime, nIter0, myThid )
                0327       ENDIF
b3d1ebfd19 Jean*0328 #endif /* NONLIN_FRSURF */
8de3419279 Jean*0329 
abb214f17f Alis*0330 #ifdef ALLOW_DEBUG
                0331       IF (debugMode) CALL DEBUG_CALL('INTEGR_CONTINUITY',myThid)
                0332 #endif
f9ff59e0c6 Jean*0333 C--   Integrate continuity vertically for vertical velocity
bfdbc242ac Jean*0334       CALL INTEGR_CONTINUITY( uVel, vVel,
                0335      I                        startTime, nIter0, myThid )
615c650f5e Jean*0336 
                0337 #ifdef NONLIN_FRSURF
                0338       IF ( select_rStar.NE.0 ) THEN
7f82819bd8 Patr*0339 #ifndef DISABLE_RSTAR_CODE
615c650f5e Jean*0340 C--   r* : compute the future level thickness according to etaH(n+1)
                0341           CALL CALC_R_STAR(etaH, startTime, nIter0, myThid )
cdc9f269ae Patr*0342 #endif
490a5c43c7 Jean*0343       ELSEIF ( nonlinFreeSurf.GT.0 .AND. selectSigmaCoord.EQ.0 ) THEN
615c650f5e Jean*0344 C--   compute the future surface level thickness according to etaH(n+1)
                0345           CALL CALC_SURF_DR(etaH, startTime, nIter0, myThid )
                0346       ENDIF
                0347 #endif /* NONLIN_FRSURF */
                0348 
f75a8916e3 Jean*0349 c     IF ( nIter0.EQ.0 .AND. staggerTimeStep ) THEN
94875ed477 Jean*0350 C--    Filter initial T & S fields if staggerTimeStep
615c650f5e Jean*0351 C       (only for backward compatibility ; to be removed later)
                0352 #ifdef ALLOW_SHAP_FILT
f75a8916e3 Jean*0353 c      IF ( useSHAP_FILT .AND. shap_filt_TrStagg ) THEN
                0354 c       CALL SHAP_FILT_APPLY_TS(theta,salt,startTime,nIter0,myThid)
                0355 c      ENDIF
615c650f5e Jean*0356 #endif
                0357 #ifdef ALLOW_ZONAL_FILT
f75a8916e3 Jean*0358 c      IF ( useZONAL_FILT .AND. zonal_filt_TrStagg ) THEN
                0359 c       CALL ZONAL_FILT_APPLY_TS( theta, salt, myThid )
                0360 c      ENDIF
615c650f5e Jean*0361 #endif
f75a8916e3 Jean*0362 c     ENDIF
615c650f5e Jean*0363 
1c9567fc8e Andr*0364 #ifdef ALLOW_GRIDALT
3365bdc872 Jean*0365       IF (useGRIDALT) THEN
417449666e Jean*0366          CALL TIMER_START('GRIDALT_UPDATE  [INITIALISE_VARIA]',myThid)
d0d808a690 Andr*0367          CALL GRIDALT_UPDATE(myThid)
417449666e Jean*0368          CALL TIMER_STOP ('GRIDALT_UPDATE  [INITIALISE_VARIA]',myThid)
3365bdc872 Jean*0369       ENDIF
1c9567fc8e Andr*0370 #endif
                0371 
f9ff59e0c6 Jean*0372 C--   Finally summarise the model state
abb214f17f Alis*0373 #ifdef ALLOW_DEBUG
                0374       IF (debugMode) CALL DEBUG_CALL('STATE_SUMMARY',myThid)
                0375 #endif
f9ff59e0c6 Jean*0376       CALL STATE_SUMMARY( myThid )
                0377 
81d6a02def Jean*0378 #ifdef ALLOW_MONITOR
                0379 #ifdef ALLOW_DEBUG
                0380       IF (debugMode) CALL DEBUG_CALL('MONITOR',myThid)
                0381 #endif
                0382 C--   Check status of initial state (statistics, cfl, etc...)
4f8feb8bdf Jean*0383       CALL MONITOR( startTime, nIter0, myThid )
81d6a02def Jean*0384 #endif /* ALLOW_MONITOR */
                0385 
                0386 C--   Dump initial state to files
                0387 #ifdef ALLOW_DEBUG
                0388       IF (debugMode) CALL DEBUG_CALL('DO_THE_MODEL_IO',myThid)
                0389 #endif
94884059ae Jean*0390       CALL DO_THE_MODEL_IO( .FALSE., startTime, nIter0, myThid )
81d6a02def Jean*0391 
abb214f17f Alis*0392 #ifdef ALLOW_DEBUG
                0393       IF (debugMode) CALL DEBUG_LEAVE('INITIALISE_VARIA',myThid)
                0394 #endif
36d9303bf2 Jean*0395 
                0396 C--   Check barrier synchronization:
                0397       CALL BAR_CHECK( 4, myThid )
                0398 
b91a70728d Jean*0399       RETURN
2846da876f Alis*0400       END