File indexing completed on 2021-10-19 05:17:36 UTC
view on githubraw file Latest commit 11c3150c on 2021-10-18 18:00:35 UTC
b4d5e534c1 Step*0001 #include "OFFLINE_OPTIONS.h"
11c3150c71 Mart*0002 #ifdef ALLOW_AUTODIFF
0003 # include "AUTODIFF_OPTIONS.h"
0004 #endif
24eceaed01 Jean*0005
72a8e44ea5 Jean*0006
b4d5e534c1 Step*0007
0008
0009 SUBROUTINE OFFLINE_FIELDS_LOAD( myTime, myIter, myThid )
72a8e44ea5 Jean*0010
0011
b4d5e534c1 Step*0012
24eceaed01 Jean*0013
0014
b4d5e534c1 Step*0015
33465d2b39 Jean*0016
24eceaed01 Jean*0017
0018
0019
0020
0021
0022
0023
76fc45bcd6 Step*0024
0025
b4d5e534c1 Step*0026
72a8e44ea5 Jean*0027
b4d5e534c1 Step*0028
0029
0030 IMPLICIT NONE
72a8e44ea5 Jean*0031
b4d5e534c1 Step*0032
0033 #include "SIZE.h"
0034 #include "EEPARAMS.h"
0035 #include "PARAMS.h"
f90ac18778 Jean*0036
a623cc0987 Jean*0037 #include "SURFACE.h"
b4d5e534c1 Step*0038 #include "DYNVARS.h"
a623cc0987 Jean*0039 #include "FFIELDS.h"
b4d5e534c1 Step*0040 #ifdef ALLOW_GMREDI
0041 #include "GMREDI.h"
0042 #endif
dec8e4f41a Step*0043 #ifdef ALLOW_KPP
0044 #include "KPP.h"
0045 #endif
b4d5e534c1 Step*0046 #ifdef ALLOW_OFFLINE
0047 #include "OFFLINE.h"
0048 #endif
0049
0050
0051
8647ba073d Jean*0052
0053
0054
b4d5e534c1 Step*0055 _RL myTime
0056 INTEGER myIter
8647ba073d Jean*0057 INTEGER myThid
72a8e44ea5 Jean*0058
b4d5e534c1 Step*0059
b5faedaf88 Jean*0060 #ifdef ALLOW_OFFLINE
24eceaed01 Jean*0061
0062 INTEGER IFNBLNK, ILNBLNK
0063 EXTERNAL IFNBLNK, ILNBLNK
0064
b5faedaf88 Jean*0065
24eceaed01 Jean*0066
72a8e44ea5 Jean*0067
b4d5e534c1 Step*0068 CHARACTER*(MAX_LEN_FNAM) fn
72a8e44ea5 Jean*0069 CHARACTER*(MAX_LEN_MBUF) msgBuf
b4d5e534c1 Step*0070 INTEGER prec
0071
72a8e44ea5 Jean*0072 INTEGER bi,bj,i,j,k
0073 INTEGER intimeP, intime0, intime1
0074 _RL aWght, bWght, locTime
0075 INTEGER Ifprd
72ad6254d2 Step*0076 INTEGER I1, I2
b4d5e534c1 Step*0077
72a8e44ea5 Jean*0078
0079
e625ce6084 Davi*0080 prec = offlineLoadPrec
b4d5e534c1 Step*0081
e625ce6084 Davi*0082
0083 IF ( .TRUE. ) THEN
b4d5e534c1 Step*0084
f90ac18778 Jean*0085
0086
b4d5e534c1 Step*0087
72a8e44ea5 Jean*0088
bdc15dcb10 Jean*0089 locTime = myTime - offlineTimeOffset
72a8e44ea5 Jean*0090 CALL GET_PERIODIC_INTERVAL(
0091 O intimeP, intime0, intime1, bWght, aWght,
0092 I offlineForcingCycle, offlineForcingPeriod,
0093 I deltaToffline, locTime, myThid )
0094
0095 bi = myBxLo(myThid)
0096 bj = myByLo(myThid)
0097 #ifdef ALLOW_DEBUG
8830b8f970 Jean*0098 IF ( debugLevel.GE.debLevB ) THEN
72a8e44ea5 Jean*0099 _BEGIN_MASTER(myThid)
0100 WRITE(standardMessageUnit,'(A,I10,A,4I5,A,2F14.10)')
0101 & ' OFFLINE_FIELDS_LOAD,', myIter,
0102 & ' : iP,iLd,i0,i1=', intimeP, offlineLdRec(bi,bj),
0103 & intime0,intime1, ' ; Wght=', bWght, aWght
0104 _END_MASTER(myThid)
0105 ENDIF
0106 #endif /* ALLOW_DEBUG */
0107
0108 #ifdef ALLOW_AUTODIFF_TAMC
0109
0110
0111
0112
0113 IF ( intime0.NE.intimeP .OR. myIter.EQ.nIter0 ) THEN
0114 #else /* ALLOW_AUTODIFF_TAMC */
0115
0116
0117
0118 IF ( intime1.NE.offlineLdRec(bi,bj) ) THEN
0119 #endif /* ALLOW_AUTODIFF_TAMC */
0120
0121 Ifprd = NINT(offlineForcingPeriod/deltaToffline)
0122 IF ( Ifprd*deltaToffline .NE. offlineForcingPeriod ) THEN
0123 WRITE(msgBuf,'(2A,I5,A)') 'OFFLINE_FIELDS_LOAD: ',
0124 & 'offlineForcingPeriod not multiple of deltaToffline'
0125 CALL PRINT_ERROR( msgBuf, myThid )
0126 STOP 'ABNORMAL END: S/R OFFLINE_FIELDS_LOAD'
0127 ENDIF
b4d5e534c1 Step*0128
72a8e44ea5 Jean*0129
0130
8830b8f970 Jean*0131 IF ( debugLevel.GE.debLevZero ) THEN
72a8e44ea5 Jean*0132 _BEGIN_MASTER(myThid)
0133 WRITE(standardMessageUnit,'(A,I10,A,2(2I5,A))')
0134 & ' OFFLINE_FIELDS_LOAD, it=', myIter,
0135 & ' : Reading new data, i0,i1=', intime0, intime1,
0136 & ' (prev=', intimeP, offlineLdRec(bi,bj), ' )'
0137 _END_MASTER(myThid)
8830b8f970 Jean*0138 ENDIF
b4d5e534c1 Step*0139
72a8e44ea5 Jean*0140 _BARRIER
b4d5e534c1 Step*0141
0142 #ifdef NOT_MODEL_FILES
24eceaed01 Jean*0143
b4d5e534c1 Step*0144 #else
24eceaed01 Jean*0145
a35ff864fe Jean*0146
0147
0148 IF ( Uvelfile .NE. ' ' ) THEN
24eceaed01 Jean*0149 I1=IFNBLNK(Uvelfile)
0150 I2=ILNBLNK(Uvelfile)
0151 WRITE(fn,'(A,A,I10.10)') Uvelfile(I1:I2),'.',
9aee6cf1bd Step*0152 & intime0*Ifprd +offlineIter0
0153
24eceaed01 Jean*0154 CALL READ_REC_3D_RS( fn, prec, Nr, uvel0, 1, myIter, myThid )
0155 WRITE(fn,'(A,A,I10.10)') Uvelfile(I1:I2),'.',
9aee6cf1bd Step*0156 & intime1*Ifprd +offlineIter0
0157
24eceaed01 Jean*0158 CALL READ_REC_3D_RS( fn, prec, Nr, uvel1, 1, myIter, myThid )
b4d5e534c1 Step*0159 ENDIF
a35ff864fe Jean*0160 IF ( Vvelfile .NE. ' ' ) THEN
24eceaed01 Jean*0161 I1=IFNBLNK(Vvelfile)
0162 I2=ILNBLNK(Vvelfile)
0163 WRITE(fn,'(A,A,I10.10)') Vvelfile(I1:I2),'.',
9aee6cf1bd Step*0164 & intime0*Ifprd +offlineIter0
24eceaed01 Jean*0165 CALL READ_REC_3D_RS( fn, prec, Nr, vvel0, 1, myIter, myThid )
0166 WRITE(fn,'(A,A,I10.10)') Vvelfile(I1:I2),'.',
9aee6cf1bd Step*0167 & intime1*Ifprd +offlineIter0
24eceaed01 Jean*0168 CALL READ_REC_3D_RS( fn, prec, Nr, vvel1, 1, myIter, myThid )
b4d5e534c1 Step*0169 ENDIF
a35ff864fe Jean*0170 IF ( Uvelfile .NE. ' ' .OR. Vvelfile .NE. ' ' ) THEN
0171 CALL EXCH_UV_XYZ_RS( uvel0, vvel0, .TRUE., myThid )
0172 CALL EXCH_UV_XYZ_RS( uvel1, vvel1, .TRUE., myThid )
0173 ENDIF
24eceaed01 Jean*0174
a35ff864fe Jean*0175 IF ( Wvelfile .NE. ' ' ) THEN
24eceaed01 Jean*0176 I1=IFNBLNK(Wvelfile)
0177 I2=ILNBLNK(Wvelfile)
0178 WRITE(fn,'(A,A,I10.10)') Wvelfile(I1:I2),'.',
9aee6cf1bd Step*0179 & intime0*Ifprd +offlineIter0
24eceaed01 Jean*0180 CALL READ_REC_3D_RS( fn, prec, Nr, wvel0, 1, myIter, myThid )
0181 WRITE(fn,'(A,A,I10.10)') Wvelfile(I1:I2),'.',
9aee6cf1bd Step*0182 & intime1*Ifprd +offlineIter0
24eceaed01 Jean*0183 CALL READ_REC_3D_RS( fn, prec, Nr, wvel1, 1, myIter, myThid )
a35ff864fe Jean*0184 _EXCH_XYZ_RS(wvel0, myThid )
0185 _EXCH_XYZ_RS(wvel1, myThid )
b4d5e534c1 Step*0186 ENDIF
0187
a35ff864fe Jean*0188 IF ( Thetfile .NE. ' ' ) THEN
24eceaed01 Jean*0189 I1=IFNBLNK(Thetfile)
0190 I2=ILNBLNK(Thetfile)
0191 WRITE(fn,'(A,A,I10.10)') Thetfile(I1:I2),'.',
9aee6cf1bd Step*0192 & intime0*Ifprd +offlineIter0
24eceaed01 Jean*0193 CALL READ_REC_3D_RS( fn, prec, Nr, tave0, 1, myIter, myThid )
0194 WRITE(fn,'(A,A,I10.10)') Thetfile(I1:I2),'.',
9aee6cf1bd Step*0195 & intime1*Ifprd +offlineIter0
24eceaed01 Jean*0196 CALL READ_REC_3D_RS( fn, prec, Nr, tave1, 1, myIter, myThid )
a35ff864fe Jean*0197 _EXCH_XYZ_RS(tave0 , myThid )
0198 _EXCH_XYZ_RS(tave1 , myThid )
b4d5e534c1 Step*0199 ENDIF
0200
a35ff864fe Jean*0201 IF ( Saltfile .NE. ' ' ) THEN
24eceaed01 Jean*0202 I1=IFNBLNK(Saltfile)
0203 I2=ILNBLNK(Saltfile)
0204 WRITE(fn,'(A,A,I10.10)') Saltfile(I1:I2),'.',
9aee6cf1bd Step*0205 & intime0*Ifprd +offlineIter0
24eceaed01 Jean*0206 CALL READ_REC_3D_RS( fn, prec, Nr, save0, 1, myIter, myThid )
0207 WRITE(fn,'(A,A,I10.10)') Saltfile(I1:I2),'.',
9aee6cf1bd Step*0208 & intime1*Ifprd +offlineIter0
24eceaed01 Jean*0209 CALL READ_REC_3D_RS( fn, prec, Nr, save1, 1, myIter, myThid )
a35ff864fe Jean*0210 _EXCH_XYZ_RS(save0, myThid )
0211 _EXCH_XYZ_RS(save1, myThid )
b4d5e534c1 Step*0212 ENDIF
0213
dec8e4f41a Step*0214 #ifdef ALLOW_GMREDI
a35ff864fe Jean*0215 IF ( GMwxFile .NE. ' ' ) THEN
24eceaed01 Jean*0216 I1=IFNBLNK(GMwxFile)
0217 I2=ILNBLNK(GMwxFile)
0218 WRITE(fn,'(A,A,I10.10)') GMwxFile(I1:I2),'.',
9aee6cf1bd Step*0219 & intime0*Ifprd +offlineIter0
24eceaed01 Jean*0220 CALL READ_REC_3D_RS( fn, prec, Nr, gmkx0, 1, myIter, myThid )
0221 WRITE(fn,'(A,A,I10.10)') GMwxFile(I1:I2),'.',
9aee6cf1bd Step*0222 & intime1*Ifprd +offlineIter0
24eceaed01 Jean*0223 CALL READ_REC_3D_RS( fn, prec, Nr, gmkx1, 1, myIter, myThid )
b4d5e534c1 Step*0224 ENDIF
a35ff864fe Jean*0225 IF ( GMwyFile .NE. ' ' ) THEN
24eceaed01 Jean*0226 I1=IFNBLNK(GMwyFile)
0227 I2=ILNBLNK(GMwyFile)
0228 WRITE(fn,'(A,A,I10.10)') GMwyFile(I1:I2),'.',
9aee6cf1bd Step*0229 & intime0*Ifprd +offlineIter0
24eceaed01 Jean*0230 CALL READ_REC_3D_RS( fn, prec, Nr, gmky0, 1, myIter, myThid )
0231 WRITE(fn,'(A,A,I10.10)') GMwyFile(I1:I2),'.',
9aee6cf1bd Step*0232 & intime1*Ifprd +offlineIter0
24eceaed01 Jean*0233 CALL READ_REC_3D_RS( fn, prec, Nr, gmky1, 1, myIter, myThid )
b4d5e534c1 Step*0234 ENDIF
a35ff864fe Jean*0235 IF ( GMwxFile .NE. ' ' .OR. GMwyFile .NE. ' ' ) THEN
0236 CALL EXCH_UV_AGRID_3D_RS( gmkx0, gmky0, .FALSE., Nr, myThid )
0237 CALL EXCH_UV_AGRID_3D_RS( gmkx1, gmky1, .FALSE., Nr, myThid )
0238 ENDIF
24eceaed01 Jean*0239
a35ff864fe Jean*0240 IF ( GMwzFile .NE. ' ') THEN
24eceaed01 Jean*0241 I1=IFNBLNK(GMwzFile)
0242 I2=ILNBLNK(GMwzFile)
0243 WRITE(fn,'(A,A,I10.10)') GMwzFile(I1:I2),'.',
9aee6cf1bd Step*0244 & intime0*Ifprd +offlineIter0
24eceaed01 Jean*0245 CALL READ_REC_3D_RS( fn, prec, Nr, gmkz0, 1, myIter, myThid )
0246 WRITE(fn,'(A,A,I10.10)') GMwzFile(I1:I2),'.',
9aee6cf1bd Step*0247 & intime1*Ifprd +offlineIter0
24eceaed01 Jean*0248 CALL READ_REC_3D_RS( fn, prec, Nr, gmkz1, 1, myIter, myThid )
a35ff864fe Jean*0249 _EXCH_XYZ_RS(gmkz0, myThid )
0250 _EXCH_XYZ_RS(gmkz1, myThid )
b4d5e534c1 Step*0251 ENDIF
97ee0aee53 Jean*0252 #endif /* ALLOW_GMREDI */
24eceaed01 Jean*0253
a35ff864fe Jean*0254 IF ( ConvFile .NE. ' ' ) THEN
0255 I1=IFNBLNK(ConvFile)
0256 I2=ILNBLNK(ConvFile)
0257 WRITE(fn,'(A,A,I10.10)') ConvFile(I1:I2),'.',
36fc25cbe5 Step*0258 & intime0*Ifprd +offlineIter0
a35ff864fe Jean*0259 CALL READ_REC_3D_RS( fn, prec, Nr, conv0, 1, myIter, myThid )
0260 WRITE(fn,'(A,A,I10.10)') ConvFile(I1:I2),'.',
36fc25cbe5 Step*0261 & intime1*Ifprd +offlineIter0
a35ff864fe Jean*0262 CALL READ_REC_3D_RS( fn, prec, Nr, conv1, 1, myIter, myThid )
0263 _EXCH_XYZ_RS(conv0, myThid )
0264 _EXCH_XYZ_RS(conv1, myThid )
36fc25cbe5 Step*0265 ENDIF
0266
dec8e4f41a Step*0267 #ifdef ALLOW_KPP
a35ff864fe Jean*0268 IF ( KPP_DiffSFile .NE. ' ' ) THEN
24eceaed01 Jean*0269 I1=IFNBLNK(KPP_DiffSFile)
0270 I2=ILNBLNK(KPP_DiffSFile)
0271 WRITE(fn,'(A,A,I10.10)') KPP_DiffSFile(I1:I2),'.',
9aee6cf1bd Step*0272 & intime0*Ifprd +offlineIter0
24eceaed01 Jean*0273 CALL READ_REC_3D_RS( fn, prec, Nr, kdfs0, 1, myIter, myThid )
0274 WRITE(fn,'(A,A,I10.10)') KPP_DiffSFile(I1:I2),'.',
9aee6cf1bd Step*0275 & intime1*Ifprd +offlineIter0
24eceaed01 Jean*0276 CALL READ_REC_3D_RS( fn, prec, Nr, kdfs1, 1, myIter, myThid )
a35ff864fe Jean*0277 _EXCH_XYZ_RS(kdfs0 , myThid )
0278 _EXCH_XYZ_RS(kdfs1 , myThid )
dec8e4f41a Step*0279 ENDIF
24eceaed01 Jean*0280
a35ff864fe Jean*0281 IF ( KPP_ghatKFile .NE. ' ' ) THEN
ce5b6f2183 Jean*0282
0283
0284 I1=IFNBLNK(KPP_ghatKFile)
0285 I2=ILNBLNK(KPP_ghatKFile)
0286 WRITE(fn,'(A,A,I10.10)') KPP_ghatKFile(I1:I2),'.',
9aee6cf1bd Step*0287 & intime0*Ifprd +offlineIter0
24eceaed01 Jean*0288 CALL READ_REC_3D_RS( fn, prec, Nr, kght0, 1, myIter, myThid )
ce5b6f2183 Jean*0289 WRITE(fn,'(A,A,I10.10)') KPP_ghatKFile(I1:I2),'.',
9aee6cf1bd Step*0290 & intime1*Ifprd +offlineIter0
24eceaed01 Jean*0291 CALL READ_REC_3D_RS( fn, prec, Nr, kght1, 1, myIter, myThid )
a35ff864fe Jean*0292 _EXCH_XYZ_RS(kght0, myThid )
0293 _EXCH_XYZ_RS(kght1, myThid )
dec8e4f41a Step*0294 ENDIF
97ee0aee53 Jean*0295 #endif /* ALLOW_KPP */
24eceaed01 Jean*0296
a35ff864fe Jean*0297
0298
0299
0300
0301
0302
0303
0304
0305
0306
0307
0308
0309
0310
0311
0312 IF ( SFluxFile .NE. ' ' ) THEN
0313 I1=IFNBLNK(SFluxFile)
0314 I2=ILNBLNK(SFluxFile)
0315 WRITE(fn,'(A,A,I10.10)') SFluxFile(I1:I2),'.',
0316 & intime0*Ifprd +offlineIter0
0317 CALL READ_REC_3D_RS( fn, prec, 1, sflx0, 1, myIter, myThid )
0318 WRITE(fn,'(A,A,I10.10)') SFluxFile(I1:I2),'.',
0319 & intime1*Ifprd +offlineIter0
0320 CALL READ_REC_3D_RS( fn, prec, 1, sflx1, 1, myIter, myThid )
0321 _EXCH_XY_RS(sflx0, myThid )
0322 _EXCH_XY_RS(sflx1, myThid )
0323 ENDIF
b4d5e534c1 Step*0324
a35ff864fe Jean*0325
0326
0327
0328
0329
0330
0331
0332
0333
0334
0335
0336
0337
0338 #endif /* else NOT_MODEL_FILES */
dec8e4f41a Step*0339
72a8e44ea5 Jean*0340
0341 DO bj = myByLo(myThid), myByHi(myThid)
0342 DO bi = myBxLo(myThid), myBxHi(myThid)
0343 offlineLdRec(bi,bj) = intime1
0344 ENDDO
0345 ENDDO
0346
0347
b4d5e534c1 Step*0348 ENDIF
24eceaed01 Jean*0349
3565540185 Jean*0350
b4d5e534c1 Step*0351 DO bj = myByLo(myThid), myByHi(myThid)
a35ff864fe Jean*0352 DO bi = myBxLo(myThid), myBxHi(myThid)
3565540185 Jean*0353 offline_Wght(1,bi,bj) = bWght
0354 offline_Wght(2,bi,bj) = aWght
0355 ENDDO
0356 ENDDO
0357
0358
0359 IF ( myIter.NE.nIter0 .OR. nonlinFreeSurf.LE.0 ) THEN
0360
0361
0362 DO bj = myByLo(myThid), myByHi(myThid)
0363 DO bi = myBxLo(myThid), myBxHi(myThid)
0364
a623cc0987 Jean*0365 DO k=1,Nr
0366 DO j=1-OLy,sNy+OLy
0367 DO i=1-OLx,sNx+OLx
3565540185 Jean*0368 uVel(i,j,k,bi,bj) = bWght*uvel0(i,j,k,bi,bj)
0369 & + aWght*uvel1(i,j,k,bi,bj)
0370 vVel(i,j,k,bi,bj) = bWght*vvel0(i,j,k,bi,bj)
0371 & + aWght*vvel1(i,j,k,bi,bj)
0372 wVel(i,j,k,bi,bj) = bWght*wvel0(i,j,k,bi,bj)
0373 & + aWght*wvel1(i,j,k,bi,bj)
0374 theta(i,j,k,bi,bj)= bWght*tave0(i,j,k,bi,bj)
0375 & + aWght*tave1(i,j,k,bi,bj)
0376 salt(i,j,k,bi,bj) = bWght*save0(i,j,k,bi,bj)
0377 & + aWght*save1(i,j,k,bi,bj)
a623cc0987 Jean*0378 ENDDO
0379 ENDDO
0380 ENDDO
3565540185 Jean*0381 #ifdef NONLIN_FRSURF
0382 IF ( select_rStar.GT.0 ) THEN
0383 DO k=1,Nr
0384 DO j=1-OLy,sNy+OLy
0385 DO i=1-OLx,sNx+OLx
0386 uVel(i,j,k,bi,bj) = uVel(i,j,k,bi,bj)
0387 & / rStarFacW(i,j,bi,bj)
0388 vVel(i,j,k,bi,bj) = vVel(i,j,k,bi,bj)
0389 & / rStarFacS(i,j,bi,bj)
0390 ENDDO
a623cc0987 Jean*0391 ENDDO
0392 ENDDO
3565540185 Jean*0393 ELSEIF ( nonlinFreeSurf.GT.0 ) THEN
a623cc0987 Jean*0394 STOP 'OFFLINE_FIELDS_LOAD: r-Coord NLFS code missing'
3565540185 Jean*0395 ENDIF
a623cc0987 Jean*0396 #endif /* NONLIN_FRSURF */
3565540185 Jean*0397
8647ba073d Jean*0398
3565540185 Jean*0399 ENDDO
a35ff864fe Jean*0400 ENDDO
3565540185 Jean*0401 ENDIF
b4d5e534c1 Step*0402
a35ff864fe Jean*0403
b4d5e534c1 Step*0404
0405
0406
0407
0408
0409
0410
0411
0412
0413
0414
0415
0416
0417
0418
0419 ENDIF
0420
24eceaed01 Jean*0421 #endif /* ALLOW_OFFLINE */
b4d5e534c1 Step*0422
0423 RETURN
0424 END