File indexing completed on 2024-05-11 05:10:13 UTC
view on githubraw file Latest commit 41c4545f on 2024-05-10 15:00:41 UTC
6d54cf9ca1 Ed H*0001 #include "AUTODIFF_OPTIONS.h"
7fd2fa3bc2 Patr*0002 #ifdef ALLOW_OPENAD
0003 # include "OPENAD_OPTIONS.h"
0004 #endif
bead363026 Jean*0005 #ifdef ALLOW_CTRL
0006 # include "CTRL_OPTIONS.h"
0007 #endif
94a8024bbe Jean*0008 #ifdef ALLOW_GMREDI
0009 # include "GMREDI_OPTIONS.h"
0010 #endif
a10c595eb6 Timo*0011 #ifdef ALLOW_GGL90
0012 # include "GGL90_OPTIONS.h"
0013 #endif
7b8b86ab99 Timo*0014 #ifdef ALLOW_SHELFICE
0015 # include "SHELFICE_OPTIONS.h"
0016 #endif
735a3220ac Jean*0017 #include "AD_CONFIG.h"
2dcaa8b9a5 Patr*0018
d151781088 Patr*0019
898ddfe4b1 Jean*0020
d151781088 Patr*0021
898ddfe4b1 Jean*0022 SUBROUTINE ADDUMMY_IN_STEPPING( myTime, myIter, myThid )
d151781088 Patr*0023
0024
0025
898ddfe4b1 Jean*0026
d151781088 Patr*0027
0028
0029
0030
0031
0032
0033
898ddfe4b1 Jean*0034
d151781088 Patr*0035
0036
0037
0038
0039 IMPLICIT NONE
2dcaa8b9a5 Patr*0040
d151781088 Patr*0041
7fd2fa3bc2 Patr*0042 #ifdef ALLOW_OPENAD
0043 use OAD_active
0044 use OAD_rev
0045 use OAD_tape
0046 use OAD_cp
0047 #endif
2dcaa8b9a5 Patr*0048 #include "SIZE.h"
0049 #include "EEPARAMS.h"
0050 #include "PARAMS.h"
d2b824a660 Patr*0051 #ifdef ALLOW_AUTODIFF_MONITOR
a10c595eb6 Timo*0052 # ifdef ALLOW_OPENAD
0053
0054 # include "DYNVARS.h"
0055 # include "FFIELDS.h"
94a8024bbe Jean*0056 # ifdef ALLOW_GMREDI
0057 # include "GMREDI.h"
0058 # endif
a10c595eb6 Timo*0059 # ifdef ALLOW_GGL90
0060 # include "GGL90.h"
0061 # endif
0062 # endif /* ALLOW_OPENAD */
0063 # include "AUTODIFF_PARAMS.h"
816e6857b6 Gael*0064 # include "AUTODIFF.h"
7fd2fa3bc2 Patr*0065 # ifndef ALLOW_OPENAD
0066 # include "adcommon.h"
0067 # endif /* ALLOW_OPENAD */
a5ec81ed49 Timo*0068 # ifdef ALLOW_MNC
0069 # include "MNC_PARAMS.h"
0070 # endif
0071 # ifdef ALLOW_DIAGNOSTICS
41c4545f8f Jean*0072 # include "DIAGNOSTICS_P2SHARE.h"
a5ec81ed49 Timo*0073 # endif
7fd2fa3bc2 Patr*0074 #endif /* ALLOW_AUTODIFF_MONITOR */
2dcaa8b9a5 Patr*0075
d151781088 Patr*0076
2dcaa8b9a5 Patr*0077
898ddfe4b1 Jean*0078
0079
0080
0081 _RL myTime
0082 INTEGER myIter
0083 INTEGER myThid
d151781088 Patr*0084
698b67672f Patr*0085 #if (defined (ALLOW_ADJOINT_RUN) || defined (ALLOW_ADMTLM))
d2b824a660 Patr*0086 #ifdef ALLOW_AUTODIFF_MONITOR
0087
898ddfe4b1 Jean*0088
0089 LOGICAL DIFFERENT_MULTIPLE
0090 EXTERNAL DIFFERENT_MULTIPLE
0091
d151781088 Patr*0092
a10c595eb6 Timo*0093
898ddfe4b1 Jean*0094
0095
a10c595eb6 Timo*0096
a5ec81ed49 Timo*0097
a10c595eb6 Timo*0098 #ifdef ALLOW_MNC
898ddfe4b1 Jean*0099 _RL var2Du(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0100 _RL var2Dv(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0101 _RL var3Du(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
0102 _RL var3Dv(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
a10c595eb6 Timo*0103 #endif
898ddfe4b1 Jean*0104 _RS dumRS(1)
0105 _RL dumRL(1)
a5ec81ed49 Timo*0106 LOGICAL doExch
a10c595eb6 Timo*0107 LOGICAL doDump
d151781088 Patr*0108
0109
a10c595eb6 Timo*0110
0111 doDump = DIFFERENT_MULTIPLE( adjDumpFreq, myTime, deltaTClock )
0112
a5ec81ed49 Timo*0113
a10c595eb6 Timo*0114 doExch = doDump
a5ec81ed49 Timo*0115 #ifdef ALLOW_DIAGNOSTICS
a10c595eb6 Timo*0116 doExch = doDump .OR. useDiag4AdjOutp
a5ec81ed49 Timo*0117 #endif
0118 doExch = doExch .AND. ( dumpAdVarExch.EQ.1 )
816e6857b6 Gael*0119
a5ec81ed49 Timo*0120
0121 IF ( doExch ) THEN
bead363026 Jean*0122 #ifdef ALLOW_OPENAD
0123
0124 #else /* ALLOW_OPENAD */
0125
0a92c8c20d Patr*0126 #ifdef AUTODIFF_TAMC_COMPATIBILITY
a5ec81ed49 Timo*0127 call adexch_xyz_rl( myThid,adTheta)
0128 call adexch_xyz_rl( myThid,adSalt)
0129 call adexch_xyz_rl( myThid,adwVel )
0130 call adexch_uv_xyz_rl( .true. ,myThid,aduVel,advVel )
0131
0132 call adexch_uv_xy_rs( .true., myThid, adfu, adfv )
0133 call adexch_xy_rs( myThid,adqnet )
0134 call adexch_xy_rs( myThid,adempmr )
0a92c8c20d Patr*0135 # ifdef ALLOW_EDDYPSI_CONTROL
a5ec81ed49 Timo*0136 call adexch_uv_xyz_rs( .true. ,myThid,adeddypsix,adeddypsiy )
0a92c8c20d Patr*0137 # endif
0138 # ifdef ALLOW_DIFFKR_CONTROL
a5ec81ed49 Timo*0139 call adexch_xyz_rl( myThid,addiffkr )
0a92c8c20d Patr*0140 # endif
0141 # ifdef ALLOW_KAPGM_CONTROL
94a8024bbe Jean*0142 call adexch_xyz_rl( myThid, adKapGM )
0a92c8c20d Patr*0143 # endif
0144 # ifdef ALLOW_KAPREDI_CONTROL
94a8024bbe Jean*0145 call adexch_xyz_rl( myThid, adKapRedi )
0a92c8c20d Patr*0146 # endif
85fd6a387e An T*0147 # ifdef ALLOW_BOTTOMDRAG_CONTROL
a5ec81ed49 Timo*0148 call adexch_xy_rl( myThid,adbottomdragfld)
0a92c8c20d Patr*0149 # endif
0150 # else /* ndfef AUTODIFF_TAMC_COMPATIBILITY */
898ddfe4b1 Jean*0151
d31dc5d323 Jean*0152 # ifndef ALLOW_BULK_OFFLINE
a5ec81ed49 Timo*0153 CALL ADEXCH_3D_RL( adTheta,Nr, myThid )
0154 CALL ADEXCH_3D_RL( adSalt, Nr, myThid )
0155 CALL ADEXCH_3D_RL( adwVel, Nr, myThid )
0156 CALL ADEXCH_UV_3D_RL( aduVel,advVel, .TRUE., Nr, myThid )
898ddfe4b1 Jean*0157 # endif
3c775cbf98 Mart*0158
0159
0160
0161
0162
0163
0164
0165 #ifndef AUTODIFF_EXCLUDE_ADEXCH_RS
a5ec81ed49 Timo*0166 CALL ADEXCH_UV_XY_RS( adFu, adFv, .TRUE., myThid )
0167 CALL ADEXCH_XY_RS( adQnet, myThid )
0168 CALL ADEXCH_XY_RS( adEmPmR, myThid )
3c775cbf98 Mart*0169 #endif
0a92c8c20d Patr*0170 # ifdef ALLOW_EDDYPSI_CONTROL
a5ec81ed49 Timo*0171 CALL ADEXCH_UV_XYZ_RS( adEddyPsiX, adEddyPsiY, .TRUE., myThid )
0a92c8c20d Patr*0172 # endif
0173 # ifdef ALLOW_DIFFKR_CONTROL
a5ec81ed49 Timo*0174 CALL ADEXCH_3D_RL( adDiffKr, Nr, myThid )
0a92c8c20d Patr*0175 # endif
0176 # ifdef ALLOW_KAPGM_CONTROL
a5ec81ed49 Timo*0177 CALL ADEXCH_3D_RL( adKapGM, Nr, myThid )
0a92c8c20d Patr*0178 # endif
0179 # ifdef ALLOW_KAPREDI_CONTROL
a5ec81ed49 Timo*0180 CALL ADEXCH_3D_RL( adKapRedi, Nr, myThid )
0a92c8c20d Patr*0181 # endif
85fd6a387e An T*0182 # ifdef ALLOW_BOTTOMDRAG_CONTROL
a5ec81ed49 Timo*0183 CALL ADEXCH_3D_RL( adBottomDragFld, 1 , myThid )
0a92c8c20d Patr*0184 # endif
7b8b86ab99 Timo*0185 # ifdef ALLOW_SHELFICE
0186 # ifndef SHI_ALLOW_GAMMAFRICT
0187 CALL ADEXCH_XY_RL( adshiTransCoeffT, myThid )
0188 CALL ADEXCH_XY_RL( adshiTransCoeffS, myThid )
0189 # else
0190 CALL ADEXCH_XY_RL( adshiCDragFld, myThid )
0191 # endif
0192 # endif
898ddfe4b1 Jean*0193
0a92c8c20d Patr*0194 #endif /* AUTODIFF_TAMC_COMPATIBILITY */
bead363026 Jean*0195 #endif /* ALLOW_OPENAD */
a5ec81ed49 Timo*0196 ENDIF
0197
a10c595eb6 Timo*0198
0199
0200
0201 IF ( doDump ) THEN
0202
0203 dumpAdRecMn = dumpAdRecMn + 1
0204 CALL TIMER_START('I/O (WRITE) [ADJOINT LOOP]', myThid )
0205 ENDIF
0206
0207 #ifndef ALLOW_OPENAD
0208
0209
0210
a5ec81ed49 Timo*0211
a10c595eb6 Timo*0212
a5ec81ed49 Timo*0213
a10c595eb6 Timo*0214 CALL DUMP_ADJ_XYZ(dumRS, adTheta, 'ADJtheta', 'ADJtheta.',
0215 & 12, doDump, dumpAdRecMn, myTime, myIter,myThid)
a5ec81ed49 Timo*0216
a10c595eb6 Timo*0217 CALL DUMP_ADJ_XYZ(dumRS, adSalt, 'ADJsalt ', 'ADJsalt.',
0218 & 12, doDump, dumpAdRecMn, myTime, myIter,myThid)
a5ec81ed49 Timo*0219
a10c595eb6 Timo*0220 CALL DUMP_ADJ_XYZ(dumRS, adWvel, 'ADJwvel ', 'ADJwvel.',
0221 & 12, doDump, dumpAdRecMn, myTime, myIter,myThid)
a5ec81ed49 Timo*0222
a10c595eb6 Timo*0223 CALL DUMP_ADJ_XYZ_UV(
0224 & dumRS, adUvel, 'ADJuvel ', 'ADJuvel.',
0225 & dumRS, adVvel, 'ADJvvel ', 'ADJvvel.',
0226 & 34, doDump, dumpAdRecMn, myTime, myIter,myThid)
a5ec81ed49 Timo*0227
a10c595eb6 Timo*0228
0229
0230
0231 IF ( .NOT. useSEAICE .AND. .NOT. useEXF ) THEN
0232 CALL DUMP_ADJ_XY_UV(
0233 & adFu, dumRL, 'ADJtaux ', 'ADJtaux.',
0234 & adFv, dumRL, 'ADJtauy ', 'ADJtauy.',
0235 & 33, doDump, dumpAdRecMn, myTime, myIter,myThid)
0236 CALL DUMP_ADJ_XY(adQnet, dumRL, 'ADJqnet ', 'ADJqnet.',
0237 & 11, doDump, dumpAdRecMn, myTime, myIter,myThid)
0238 CALL DUMP_ADJ_XY(adEmPmR, dumRL, 'ADJempmr', 'ADJempr.',
0239 & 11, doDump, dumpAdRecMn, myTime, myIter,myThid)
0240
0241 # ifdef SHORTWAVE_HEATING
0242 CALL DUMP_ADJ_XY(adQsw, dumRL, 'ADJqsw ', 'ADJqsw.',
0243 & 11, doDump, dumpAdRecMn, myTime, myIter,myThid)
a5ec81ed49 Timo*0244 # endif
0245 ENDIF
0246
0247
a10c595eb6 Timo*0248
0249
0250 # ifdef ALLOW_BOTTOMDRAG_CONTROL
0251 CALL DUMP_ADJ_XY(dumRS, adBottomDragFld,
0252 & 'ADJbtdrg','ADJbottomdrag.',
0253 & 12, doDump, dumpAdRecMn, myTime, myIter,myThid)
0254 # endif
0255 # ifdef ALLOW_GGL90
0256 CALL DUMP_ADJ_XYZ(dumRS, adGGL90TKE, 'ADJtke90', 'ADJggl90tke.',
0257 & 12, doDump, dumpAdRecMn, myTime, myIter,myThid)
0258 # endif
0259 # ifdef ALLOW_DIFFKR_CONTROL
0260 CALL DUMP_ADJ_XYZ(dumRS, adDiffKr, 'ADJdifkr', 'ADJdiffkr.',
0261 & 12, doDump, dumpAdRecMn, myTime, myIter,myThid)
0262 # endif
0263 # ifdef ALLOW_KAPGM_CONTROL
0264 CALL DUMP_ADJ_XYZ(dumRS, adKapGM, 'ADJkapgm', 'ADJkapgm.',
0265 & 12, doDump, dumpAdRecMn, myTime, myIter,myThid)
0266 # endif
0267 # ifdef ALLOW_KAPREDI_CONTROL
0268 CALL DUMP_ADJ_XYZ(dumRS, adKapRedi, 'ADJkapre', 'ADJkapredi.',
0269 & 12, doDump, dumpAdRecMn, myTime, myIter,myThid)
0270 # endif
a5ec81ed49 Timo*0271
a10c595eb6 Timo*0272 # ifdef ALLOW_EDDYPSI_CONTROL
0273 CALL DUMP_ADJ_XYZ_UV(
0274 & adEddyPsiX,dumRL,'ADJepsix','ADJeddipsix.',
0275 & adEddyPsiY,dumRL,'ADJepsiy','ADJeddipsiy.',
aecc8b0f47 Mart*0276 & 33, doDump, dumpAdRecMn, myTime, myIter, myThid)
a10c595eb6 Timo*0277 # endif
7b8b86ab99 Timo*0278 # ifdef ALLOW_SHELFICE
0279 # ifndef SHI_ALLOW_GAMMAFRICT
0280 CALL DUMP_ADJ_XY(dumRS, adshiTransCoeffT,
0281 & 'ADJshict','ADJshict.',
0282 & 12, doDump, dumpAdRecMn, myTime, myIter,myThid)
0283 CALL DUMP_ADJ_XY(dumRS, adshiTransCoeffS,
85c224e862 Ou W*0284 & 'ADJshics','ADJshics.',
7b8b86ab99 Timo*0285 & 12, doDump, dumpAdRecMn, myTime, myIter,myThid)
0286 # else
0287 CALL DUMP_ADJ_XY(dumRS, adshiCDragFld,
0288 & 'ADJshicd','ADJshicd.',
0289 & 12, doDump, dumpAdRecMn, myTime, myIter,myThid)
0290 # endif
0291 # endif
2dcaa8b9a5 Patr*0292
aecc8b0f47 Mart*0293 # ifdef ALLOW_DEPTH_CONTROL
0294 CALL DUMP_ADJ_XYZ(
0295 & adhfacc,dumRL,'ADJhFacC','ADJhFacC.',
0296 & 11, doDump, dumpAdRecMn, myTime, myIter, myThid)
0297 CALL DUMP_ADJ_XYZ_UV(
0298 & adhfacw,dumRL,'ADJhFacW','ADJhFacW.',
0299 & adhfacs,dumRL,'ADJhFacS','ADJhFacS.',
0300 & 33, doDump, dumpAdRecMn, myTime, myIter, myThid)
0301 CALL DUMP_ADJ_XYZ(
0302 & adrecip_hfacc,dumRL,'ADJrhFcC','ADJrecip_hFacC.',
0303 & 11, doDump, dumpAdRecMn, myTime, myIter, myThid)
0304 CALL DUMP_ADJ_XYZ_UV(
0305 & adrecip_hfacw,dumRL,'ADJrhFcW','ADJrecip_hFacW.',
0306 & adrecip_hfacs,dumRL,'ADJrhFcS','ADJrecip_hFacS.',
0307 & 33, doDump, dumpAdRecMn, myTime, myIter, myThid)
0308 # endif /* ALLOW_DEPTH_CONTROL */
0309
a10c595eb6 Timo*0310 #else /* ALLOW_OPENAD */
0311
0312
0313
7fd2fa3bc2 Patr*0314
a10c595eb6 Timo*0315
7fd2fa3bc2 Patr*0316
a10c595eb6 Timo*0317 CALL DUMP_ADJ_XYZ(dumRS, theta%d, 'ADJtheta', 'ADJtheta.',
0318 & 12, doDump, dumpAdRecMn, myTime, myIter,myThid)
7fd2fa3bc2 Patr*0319
a10c595eb6 Timo*0320 CALL DUMP_ADJ_XYZ(dumRS, salt%d, 'ADJsalt ', 'ADJsalt.',
0321 & 12, doDump, dumpAdRecMn, myTime, myIter,myThid)
2dcaa8b9a5 Patr*0322
a10c595eb6 Timo*0323 CALL DUMP_ADJ_XYZ(dumRS, wvel%d, 'ADJwvel ', 'ADJwvel.',
0324 & 12, doDump, dumpAdRecMn, myTime, myIter,myThid)
816e6857b6 Gael*0325
a10c595eb6 Timo*0326 CALL DUMP_ADJ_XYZ_UV(
0327 & dumRS, uvel%d, 'ADJuvel ', 'ADJuvel.',
0328 & dumRS, vvel%d, 'ADJvvel ', 'ADJvvel.',
0329 & 34, doDump, dumpAdRecMn, myTime, myIter,myThid)
497a20ca68 Patr*0330
7fd2fa3bc2 Patr*0331
a10c595eb6 Timo*0332
7fd2fa3bc2 Patr*0333
a10c595eb6 Timo*0334 IF ( .NOT. useSEAICE .AND. .NOT. useEXF ) THEN
0335 CALL DUMP_ADJ_XY_UV(
0336 & Fu%d, dumRL, 'ADJtaux ', 'ADJtaux.',
0337 & Fv%d, dumRL, 'ADJtauy ', 'ADJtauy.',
0338 & 33, doDump, dumpAdRecMn, myTime, myIter,myThid)
0339 CALL DUMP_ADJ_XY(Qnet%d, dumRL, 'ADJqnet ', 'ADJqnet.',
0340 & 11, doDump, dumpAdRecMn, myTime, myIter,myThid)
0341 CALL DUMP_ADJ_XY(EmPmR%d, dumRL, 'ADJempmr', 'ADJempr.',
0342 & 11, doDump, dumpAdRecMn, myTime, myIter,myThid)
0343
0344 # ifdef SHORTWAVE_HEATING
0345
0346
0347
0348 # endif
0349 ENDIF
7fd2fa3bc2 Patr*0350
0351
a10c595eb6 Timo*0352
7fd2fa3bc2 Patr*0353
a10c595eb6 Timo*0354 # ifdef ALLOW_BOTTOMDRAG_CONTROL
0355 CALL DUMP_ADJ_XY(dumRS, BottomDragFld%d,
0356 & 'ADJbtdrg','ADJbottomdrag.',
0357 & 11, doDump, dumpAdRecMn, myTime, myIter,myThid)
0358 # endif
0359 # ifdef ALLOW_GGL90
0360 CALL DUMP_ADJ_XYZ(dumRS, GGL90TKE%d, 'ADJtke90', 'ADJggl90tke.',
0361 & 12, doDump, dumpAdRecMn, myTime, myIter,myThid)
0362 # endif
0363 # ifdef ALLOW_DIFFKR_CONTROL
0364 CALL DUMP_ADJ_XYZ(dumRS, DiffKr%d, 'ADJdifkr', 'ADJdiffkr.',
0365 & 12, doDump, dumpAdRecMn, myTime, myIter,myThid)
0366 # endif
94a8024bbe Jean*0367 # if ( defined ALLOW_KAPGM_CONTROL && defined GM_READ_K3D_GM )
0368 CALL DUMP_ADJ_XYZ(dumRS, GM_inpK3dGM%d, 'ADJkapgm', 'ADJkapgm.',
a10c595eb6 Timo*0369 & 12, doDump, dumpAdRecMn, myTime, myIter,myThid)
0370 # endif
94a8024bbe Jean*0371 # if ( defined ALLOW_KAPREDI_CONTROL && defined GM_READ_K3D_REDI )
0372 CALL DUMP_ADJ_XYZ(dumRS, GM_inpK3dRedi%d, 'ADJkapre',
0373 & 'ADJkapredi.',
a10c595eb6 Timo*0374 & 12, doDump, dumpAdRecMn, myTime, myIter,myThid)
0375 # endif
7fd2fa3bc2 Patr*0376
a10c595eb6 Timo*0377 # ifdef ALLOW_EDDYPSI_CONTROL
0378 CALL DUMP_ADJ_XYZ_UV(
0379 & EddyPsiX%d,dumRL,'ADJepsix','ADJeddipsix.',
0380 & EddyPsiY%d,dumRL,'ADJepsiy','ADJeddipsiy.',
0381 & 33, doDump, dumpAdRecMn, myTime, myIter,myThid)
0382 # endif
7b8b86ab99 Timo*0383 # ifdef ALLOW_SHELFICE
0384 # ifndef SHI_ALLOW_GAMMAFRICT
0385 CALL DUMP_ADJ_XY(dumRS, shiTransCoeffT%d,
0386 & 'ADJshict','ADJshict.',
0387 & 12, doDump, dumpAdRecMn, myTime, myIter,myThid)
0388 CALL DUMP_ADJ_XY(dumRS, shiTransCoeffS%d,
85c224e862 Ou W*0389 & 'ADJshics','ADJshics.',
7b8b86ab99 Timo*0390 & 12, doDump, dumpAdRecMn, myTime, myIter,myThid)
0391 # else
0392 CALL DUMP_ADJ_XY(dumRS, shiCDragFld%d,
0393 & 'ADJshicd','ADJshicd.',
0394 & 12, doDump, dumpAdRecMn, myTime, myIter,myThid)
0395 # endif
0396 # endif
aecc8b0f47 Mart*0397
0398 # ifdef ALLOW_DEPTH_CONTROL
0399 CALL DUMP_ADJ_XYZ(
0400 & hFacC%d,dumRL,'ADJhFacC','ADJhFacC.',
0401 & 11, doDump, dumpAdRecMn, myTime, myIter, myThid)
0402 CALL DUMP_ADJ_XYZ_UV(
0403 & hFacW%d,dumRL,'ADJhFacW','ADJhFacW.',
0404 & hFacS%d,dumRL,'ADJhFacS','ADJhFacS.',
0405 & 33, doDump, dumpAdRecMn, myTime, myIter, myThid)
0406 CALL DUMP_ADJ_XYZ(
0407 & recip_hFacC%d,dumRL,'ADJrhFcC','ADJrecip_hFacC.',
0408 & 11, doDump, dumpAdRecMn, myTime, myIter, myThid)
0409 CALL DUMP_ADJ_XYZ_UV(
0410 & recip_hFacW%d,dumRL,'ADJrhFcW','ADJrecip_hFacW.',
0411 & recip_hFacS%d,dumRL,'ADJrhFcS','ADJrecip_hFacS.',
0412 & 33, doDump, dumpAdRecMn, myTime, myIter, myThid)
0413 # endif /* ALLOW_DEPTH_CONTROL */
0414
a10c595eb6 Timo*0415 #endif /* ALLOW_OPENAD */
7fd2fa3bc2 Patr*0416
a10c595eb6 Timo*0417
0418
0419
0420 IF ( doDump ) THEN
7fd2fa3bc2 Patr*0421 #ifndef ALLOW_OPENAD
6bd3b6b067 Patr*0422 #ifdef ALLOW_MNC
0423 IF (useMNC .AND. autodiff_mnc) THEN
aa753c2639 Mart*0424 CALL MNC_CW_SET_UDIM('adstate', -1, myThid)
0425 CALL MNC_CW_RL_W_S('D','adstate',0,0,'T',myTime,myThid)
0426 CALL MNC_CW_SET_UDIM('adstate', 0, myThid)
0427 CALL MNC_CW_I_W_S('I','adstate',0,0,'iter',myIter,myThid)
0428 CALL MNC_CW_RL_W_S('D','adstate',0,0,'model_time',myTime,
0429 & myThid)
0430
0431 IF ( dumpAdVarExch.EQ.2 ) THEN
0432 CALL COPY_AD_UV_OUTP( dumRS, dumRS, aduVel, advVel,
0433 & var3Du, var3Dv, Nr, 34, myThid )
0434 CALL MNC_CW_RL_W('D','adstate',0,0,'adU', var3Du, myThid)
0435 CALL MNC_CW_RL_W('D','adstate',0,0,'adV', var3Dv, myThid)
0436 CALL COPY_ADVAR_OUTP( dumRS, adTheta,var3Du, Nr, 12, myThid )
0437 CALL MNC_CW_RL_W('D','adstate',0,0,'adT', var3Du, myThid)
0438 CALL COPY_ADVAR_OUTP( dumRS, adSalt,var3Du, Nr, 12, myThid )
0439 CALL MNC_CW_RL_W('D','adstate',0,0,'adS', var3Du, myThid)
0440 CALL COPY_ADVAR_OUTP( dumRS, adwVel, var3Du, Nr, 12, myThid )
0441 CALL MNC_CW_RL_W('D','adstate',0,0,'adW', var3Du, myThid)
898ddfe4b1 Jean*0442
aa753c2639 Mart*0443 CALL COPY_ADVAR_OUTP( adQnet, dumRL, var2Du, 1, 11, myThid )
5b0f0973d0 Jean*0444 CALL MNC_CW_RL_W('D','adstate',0,0,'adQnet', var2Du, myThid)
aa753c2639 Mart*0445 CALL COPY_ADVAR_OUTP( adEmPmR,dumRL, var2Du, 1, 11, myThid )
5b0f0973d0 Jean*0446 CALL MNC_CW_RL_W('D','adstate',0,0,'adEmpmr', var2Du, myThid)
aa753c2639 Mart*0447 CALL COPY_AD_UV_OUTP( adFu, adFv, dumRL, dumRL,
0448 & var2Du, var2Dv, 1, 33, myThid )
5b0f0973d0 Jean*0449 CALL MNC_CW_RL_W('D','adstate',0,0,'adFu', var2Du, myThid)
0450 CALL MNC_CW_RL_W('D','adstate',0,0,'adFv', var2Dv, myThid)
aa753c2639 Mart*0451
85fd6a387e An T*0452 #ifdef ALLOW_BOTTOMDRAG_CONTROL
aa753c2639 Mart*0453 CALL COPY_ADVAR_OUTP( dumRS, adBottomDragFld,
0454 & var2Du, 1, 12, myThid )
0455 CALL MNC_CW_RL_W('D','adstate',0,0,
0456 & 'adBottomDrag', var2Du, myThid)
0457 #endif
0458 #ifdef ALLOW_DIFFKR_CONTROL
0459 CALL COPY_ADVAR_OUTP( dumRS, adDiffKr,var3Du, Nr, 12,myThid )
0460 CALL MNC_CW_RL_W('D','adstate',0,0,
0461 & 'adDiffkr', var3Du, myThid)
0462 #endif
0463 #ifdef ALLOW_KAPGM_CONTROL
0464 CALL COPY_ADVAR_OUTP( dumRS, adKapGM, var3Du, Nr, 12,myThid )
0465 CALL MNC_CW_RL_W('D','adstate',0,0,
0466 & 'adkapgm', var3Du, myThid)
0467 #endif
0468 #ifdef ALLOW_KAPREDI_CONTROL
0469 CALL COPY_ADVAR_OUTP( dumRS,adKapRedi,var3Du, Nr, 12,myThid )
0470 CALL MNC_CW_RL_W('D','adstate',0,0,
0471 & 'adkapredi', var3Du, myThid)
0472 #endif
0473 ELSE
0474
6bd3b6b067 Patr*0475 CALL MNC_CW_RL_W('D','adstate',0,0,'adU', aduVel, myThid)
0476 CALL MNC_CW_RL_W('D','adstate',0,0,'adV', advVel, myThid)
a5ec81ed49 Timo*0477 CALL MNC_CW_RL_W('D','adstate',0,0,'adT', adTheta, myThid)
0478 CALL MNC_CW_RL_W('D','adstate',0,0,'adS', adSalt, myThid)
6bd3b6b067 Patr*0479 CALL MNC_CW_RL_W('D','adstate',0,0,'adW', adwVel, myThid)
8f0b59c61c Patr*0480
954561c446 Jean*0481 CALL MNC_CW_RS_W('D','adstate',0,0,'adQnet', adQnet, myThid)
f4b7d73d77 Jean*0482 CALL MNC_CW_RS_W('D','adstate',0,0,'adEmpmr',adEmpmr, myThid)
954561c446 Jean*0483 CALL MNC_CW_RS_W('D','adstate',0,0,'adFu', adfu, myThid)
0484 CALL MNC_CW_RS_W('D','adstate',0,0,'adFv', adfv, myThid)
77c6107d5a Patr*0485
85fd6a387e An T*0486 #ifdef ALLOW_BOTTOMDRAG_CONTROL
954561c446 Jean*0487 CALL MNC_CW_RL_W('D','adstate',0,0,
0488 & 'adBottomDrag', adbottomdragfld, myThid)
98e4a16c0b Mart*0489 #endif
dd9d2cc2bf Patr*0490 #ifdef ALLOW_DIFFKR_CONTROL
0491 CALL MNC_CW_RL_W('D','adstate',0,0,
954561c446 Jean*0492 & 'adDiffkr', addiffkr, myThid)
dd9d2cc2bf Patr*0493 #endif
5116830959 Patr*0494 #ifdef ALLOW_KAPGM_CONTROL
0495 CALL MNC_CW_RL_W('D','adstate',0,0,
94a8024bbe Jean*0496 & 'adkapgm', adKapGM, myThid)
5116830959 Patr*0497 #endif
7e2482cabc Gael*0498 #ifdef ALLOW_KAPREDI_CONTROL
0499 CALL MNC_CW_RL_W('D','adstate',0,0,
94a8024bbe Jean*0500 & 'adkapredi', adKapRedi, myThid)
7e2482cabc Gael*0501 #endif
7b8b86ab99 Timo*0502 #ifdef ALLOW_SHELFICE
0503 # ifndef SHI_ALLOW_GAMMAFRICT
0504 CALL MNC_CW_RL_W('D','adstate',0,0,
0505 & 'adshict', adshiTransCoeffT, myThid)
0506 CALL MNC_CW_RL_W('D','adstate',0,0,
0507 & 'adshics', adshiTransCoeffS, myThid)
0508 # else
0509 CALL MNC_CW_RL_W('D','adstate',0,0,
0510 & 'adshicd', adshiCDragFld, myThid)
0511 # endif
0512 #endif
aa753c2639 Mart*0513 ENDIF
0514
6bd3b6b067 Patr*0515 ENDIF
0516 #endif /* ALLOW_MNC */
7fd2fa3bc2 Patr*0517 #endif /* ALLOW_OPENAD */
6bd3b6b067 Patr*0518
a10c595eb6 Timo*0519 CALL TIMER_STOP( 'I/O (WRITE) [ADJOINT LOOP]', myThid )
898ddfe4b1 Jean*0520
a10c595eb6 Timo*0521 ENDIF
0522
0523
0524
0525
898ddfe4b1 Jean*0526 #ifdef ALLOW_SEAICE
0527 IF ( useSEAICE )
0528 & CALL SEAICE_AD_DUMP( myTime, myIter, myThid )
0529 #endif
ec48404f58 Patr*0530
898ddfe4b1 Jean*0531 #ifdef ALLOW_PTRACERS
0532 IF ( usePTRACERS )
0533 & CALL PTRACERS_AD_DUMP( myTime, myIter, myThid )
0534 #endif
0535
d2b824a660 Patr*0536 #endif /* ALLOW_AUTODIFF_MONITOR */
ea0f79f160 Patr*0537 #endif /* ALLOW_ADJOINT_RUN */
d2b824a660 Patr*0538
d31dc5d323 Jean*0539 RETURN
0540 END