File indexing completed on 2018-03-02 18:38:12 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
6d54cf9ca1 Ed H*0001 #include "BULK_FORCE_OPTIONS.h"
679d149d01 Jean*0002
7753507405 Curt*0003
0004
0005 SUBROUTINE BULKF_FIELDS_LOAD( myTime, myIter, myThid )
a96726d526 Jean*0006
0007
7753507405 Curt*0008
679d149d01 Jean*0009
a96726d526 Jean*0010
7753507405 Curt*0011
679d149d01 Jean*0012
a96726d526 Jean*0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
7753507405 Curt*0029
0030
0031
0032 IMPLICIT NONE
a96726d526 Jean*0033
7753507405 Curt*0034
0035 #include "SIZE.h"
0036 #include "EEPARAMS.h"
0037 #include "PARAMS.h"
679d149d01 Jean*0038 #include "BULKF_PARAMS.h"
7753507405 Curt*0039 #include "BULKF.h"
679d149d01 Jean*0040
7753507405 Curt*0041
0042
679d149d01 Jean*0043
0044
0045
7753507405 Curt*0046 _RL myTime
0047 INTEGER myIter
679d149d01 Jean*0048 INTEGER myThid
0049
6a1d3c464b Jean*0050 #ifdef ALLOW_BULK_FORCE
7753507405 Curt*0051
0052
a96726d526 Jean*0053
0054
679d149d01 Jean*0055
0056
0057
0058
0059
0060
7753507405 Curt*0061
0062
679d149d01 Jean*0063
0064
0065
0066
0067
0068
0069
a96726d526 Jean*0070
0071 COMMON /BULKF_FIELDS_LOAD_I/ bulkfRec
0072 COMMON /BULKF_FIELDS_LOAD_RS/
679d149d01 Jean*0073 & tair0, tair1, qair0, qair1,
0074 & solar0, solar1, flwdwn0, flwdwn1,
0075 & cloud0, cloud1, wspeed0, wspeed1,
0076 & uwind0, uwind1, vwind0, vwind1,
0077 & rain0, rain1, runoff0, runoff1,
0078 & snow0, snow1,
0079 #ifdef ALLOW_FORMULA_AIM
0080 & thAir0, thAir1,
0081 #endif
0082 & qnetch0, qnetch1, empch0, empch1
0083
a96726d526 Jean*0084 INTEGER bulkfRec(nSx,nSy)
679d149d01 Jean*0085 _RS tair0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0086 _RS tair1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0087 _RS qair0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0088 _RS qair1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0089 _RS solar0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0090 _RS solar1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0091 _RS flwdwn0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0092 _RS flwdwn1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0093 _RS cloud0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0094 _RS cloud1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0095 _RS wspeed0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0096 _RS wspeed1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0097 _RS uwind0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0098 _RS uwind1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0099 _RS vwind0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0100 _RS vwind1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0101 _RS rain0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0102 _RS rain1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0103 _RS runoff0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0104 _RS runoff1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0105 _RS snow0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0106 _RS snow1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0107 #ifdef ALLOW_FORMULA_AIM
0108 _RS thAir0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0109 _RS thAir1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0110 #endif
0111 _RS qnetch0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0112 _RS qnetch1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0113 _RS empch0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0114 _RS empch1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
7753507405 Curt*0115
a96726d526 Jean*0116
0117
0118 _RL aWght,bWght
0119 INTEGER intimeP, intime0, intime1
0120 INTEGER bi, bj, i, j
0121
7753507405 Curt*0122
0123 IF ( periodicExternalForcing ) THEN
0124
0125
0126 IF ( myIter .EQ. nIter0 ) THEN
679d149d01 Jean*0127 DO bj=myByLo(myThid),myByHi(myThid)
0128 DO bi=myBxLo(myThid),myBxHi(myThid)
a96726d526 Jean*0129 bulkfRec(bi,bj) = 0
679d149d01 Jean*0130 DO j = 1-Oly,sNy+Oly
0131 DO i = 1-Olx,sNx+Olx
0132 tair0(i,j,bi,bj) = 0. _d 0
0133 tair1(i,j,bi,bj) = 0. _d 0
0134 qair0(i,j,bi,bj) = 0. _d 0
0135 qair1(i,j,bi,bj) = 0. _d 0
0136 rain0(i,j,bi,bj) = 0. _d 0
0137 rain1(i,j,bi,bj) = 0. _d 0
0138 solar0(i,j,bi,bj) = 0. _d 0
0139 solar1(i,j,bi,bj) = 0. _d 0
0140 flwdwn0(i,j,bi,bj) = 0. _d 0
0141 flwdwn1(i,j,bi,bj) = 0. _d 0
0142 cloud0(i,j,bi,bj) = 0. _d 0
0143 cloud1(i,j,bi,bj) = 0. _d 0
0144 wspeed0(i,j,bi,bj) = 0. _d 0
0145 wspeed1(i,j,bi,bj) = 0. _d 0
0146 uwind0(i,j,bi,bj) = 0. _d 0
0147 uwind1(i,j,bi,bj) = 0. _d 0
0148 vwind0(i,j,bi,bj) = 0. _d 0
0149 vwind1(i,j,bi,bj) = 0. _d 0
0150 runoff0(i,j,bi,bj) = 0. _d 0
0151 runoff1(i,j,bi,bj) = 0. _d 0
0152 snow0(i,j,bi,bj) = 0. _d 0
0153 snow1(i,j,bi,bj) = 0. _d 0
0154 #ifdef ALLOW_FORMULA_AIM
0155 thAir0(i,j,bi,bj) = 0. _d 0
0156 thAir1(i,j,bi,bj) = 0. _d 0
0157 #endif
0158 qnetch0(i,j,bi,bj) = 0. _d 0
0159 qnetch1(i,j,bi,bj) = 0. _d 0
0160 empch0(i,j,bi,bj) = 0. _d 0
0161 empch1(i,j,bi,bj) = 0. _d 0
0162 ENDDO
0163 ENDDO
0164 ENDDO
0165 ENDDO
7753507405 Curt*0166 ENDIF
0167
a96726d526 Jean*0168
0169 CALL GET_PERIODIC_INTERVAL(
0170 O intimeP, intime0, intime1, bWght, aWght,
0171 I externForcingCycle, externForcingPeriod,
0172 I deltaTclock, myTime, myThid )
679d149d01 Jean*0173
a96726d526 Jean*0174 bi = myBxLo(myThid)
0175 bj = myByLo(myThid)
0176 #ifdef ALLOW_DEBUG
94370ae71c Jean*0177 IF ( debugLevel.GE.debLevB ) THEN
a96726d526 Jean*0178 _BEGIN_MASTER(myThid)
0179 WRITE(standardMessageUnit,'(A,I10,A,4I5,A,2F14.10)')
0180 & ' BULKF_FIELDS_LOAD,', myIter,
0181 & ' : iP,iLd,i0,i1=', intimeP,bulkfRec(bi,bj), intime0,intime1,
0182 & ' ; Wght=', bWght, aWght
0183 _END_MASTER(myThid)
0184 ENDIF
0185 #endif /* ALLOW_DEBUG */
7753507405 Curt*0186
a96726d526 Jean*0187
0188
0189 IF ( intime1.NE.bulkfRec(bi,bj) ) THEN
7753507405 Curt*0190
a05d835d01 Jean*0191 _BARRIER
7753507405 Curt*0192
a96726d526 Jean*0193
0194
94370ae71c Jean*0195 IF ( debugLevel.GE.debLevZero ) THEN
0196 _BEGIN_MASTER(myThid)
a96726d526 Jean*0197 WRITE(standardMessageUnit,'(A,I10,A,2(2I5,A))')
0198 & ' BULKF_FIELDS_LOAD, it=', myIter,
0199 & ' : Reading new data, i0,i1=', intime0, intime1,
0200 & ' (prev=', intimeP, bulkfRec(bi,bj), ' )'
0201 _END_MASTER(myThid)
94370ae71c Jean*0202 ENDIF
679d149d01 Jean*0203
7753507405 Curt*0204 IF ( AirTempFile .NE. ' ' ) THEN
0205 CALL READ_REC_XY_RS( AirTempFile,tair0,intime0,
0206 & myIter,myThid )
0207 CALL READ_REC_XY_RS( AirTempFile,tair1,intime1,
0208 & myIter,myThid )
0209 ENDIF
0210 IF ( AirHumidityFile .NE. ' ' ) THEN
0211 CALL READ_REC_XY_RS( AirhumidityFile,qair0,intime0,
0212 & myIter,myThid )
0213 CALL READ_REC_XY_RS( AirhumidityFile,qair1,intime1,
0214 & myIter,myThid )
0215 ENDIF
0216 IF ( SolarFile .NE. ' ' ) THEN
0217 CALL READ_REC_XY_RS( SolarFile,solar0,intime0,
0218 & myIter,myThid )
0219 CALL READ_REC_XY_RS( SolarFile,solar1,intime1,
0220 & myIter,myThid )
0221 ENDIF
0222 IF ( LongwaveFile .NE. ' ' ) THEN
679d149d01 Jean*0223 CALL READ_REC_XY_RS( LongwaveFile,flwdwn0,intime0,
0224 & myIter,myThid )
0225 CALL READ_REC_XY_RS( LongwaveFile,flwdwn1,intime1,
0226 & myIter,myThid )
0227 ENDIF
0228 IF ( CloudFile .NE. ' ' ) THEN
0229 CALL READ_REC_XY_RS( CloudFile,cloud0,intime0,
0230 & myIter,myThid )
0231 CALL READ_REC_XY_RS( CloudFile,cloud1,intime1,
0232 & myIter,myThid )
0233 ENDIF
0234
0235 IF ( WSpeedFile .NE. ' ' ) THEN
0236 CALL READ_REC_XY_RS( WSpeedFile,wspeed0,intime0,
7753507405 Curt*0237 & myIter,myThid )
679d149d01 Jean*0238 CALL READ_REC_XY_RS( WSpeedFile,wspeed1,intime1,
7753507405 Curt*0239 & myIter,myThid )
0240 ENDIF
0241 IF ( UwindFile .NE. ' ' ) THEN
0242 CALL READ_REC_XY_RS( UWindFile,uwind0,intime0,
0243 & myIter,myThid )
0244 CALL READ_REC_XY_RS( UWindFile,uwind1,intime1,
0245 & myIter,myThid )
0246 ENDIF
0247 IF ( VwindFile .NE. ' ' ) THEN
0248 CALL READ_REC_XY_RS( VWindFile,vwind0,intime0,
0249 & myIter,myThid )
0250 CALL READ_REC_XY_RS( VWindFile,vwind1,intime1,
0251 & myIter,myThid )
0252 ENDIF
679d149d01 Jean*0253
0254 IF ( RainFile .NE. ' ' ) THEN
0255 CALL READ_REC_XY_RS( RainFile,rain0,intime0,
0256 & myIter,myThid )
0257 CALL READ_REC_XY_RS( RainFile,rain1,intime1,
0258 & myIter,myThid )
0259 ENDIF
7753507405 Curt*0260 IF ( RunoffFile .NE. ' ' ) THEN
0261 CALL READ_REC_XY_RS( RunoffFile,runoff0,intime0,
0262 & myIter,myThid )
0263 CALL READ_REC_XY_RS( RunoffFile,runoff1,intime1,
0264 & myIter,myThid )
0265 ENDIF
679d149d01 Jean*0266 IF ( SnowFile .NE. ' ' ) THEN
0267 CALL READ_REC_XY_RS( SnowFile,snow0,intime0,
7753507405 Curt*0268 & myIter,myThid )
679d149d01 Jean*0269 CALL READ_REC_XY_RS( SnowFile,snow1,intime1,
7753507405 Curt*0270 & myIter,myThid )
0271 ENDIF
0272
679d149d01 Jean*0273 #ifdef ALLOW_FORMULA_AIM
0274 IF ( airPotTempFile .NE. ' ' ) THEN
0275 CALL READ_REC_XY_RS( airPotTempFile, thAir0, intime0,
0276 & myIter,myThid )
0277 CALL READ_REC_XY_RS( airPotTempFile, thAir1, intime1,
0278 & myIter,myThid )
0279 ENDIF
0280 #endif
7753507405 Curt*0281
0282 IF ( QnetFile .NE. ' ' ) THEN
0283 CALL READ_REC_XY_RS( QnetFile,qnetch0,intime0,
0284 & myIter,myThid )
0285 CALL READ_REC_XY_RS( QnetFile,qnetch1,intime1,
0286 & myIter,myThid )
0287 ENDIF
0288 IF ( EmPFile .NE. ' ' ) THEN
0289 CALL READ_REC_XY_RS( EmpFile,empch0,intime0,
0290 & myIter,myThid )
0291 CALL READ_REC_XY_RS( EmpFile,empch1,intime1,
0292 & myIter,myThid )
3da6675e68 Jean*0293
a5003302cb Jean*0294
0295 _BARRIER
0296 DO bj = myByLo(myThid), myByHi(myThid)
0297 DO bi = myBxLo(myThid), myBxHi(myThid)
0298 DO j=1-Oly,sNy+Oly
0299 DO i=1-Olx,sNx+Olx
0300 empch0(i,j,bi,bj) = empch0(i,j,bi,bj)*rhoConstFresh
0301 empch1(i,j,bi,bj) = empch1(i,j,bi,bj)*rhoConstFresh
0302 ENDDO
0303 ENDDO
0304 ENDDO
0305 ENDDO
3da6675e68 Jean*0306
7753507405 Curt*0307 ENDIF
0308
a05d835d01 Jean*0309
0310
679d149d01 Jean*0311
12ffad7671 Jean*0312 _EXCH_XY_RS(tair0 , myThid )
0313 _EXCH_XY_RS(tair1 , myThid )
0314 _EXCH_XY_RS(qair0 , myThid )
0315 _EXCH_XY_RS(qair1 , myThid )
0316 _EXCH_XY_RS(solar0, myThid )
0317 _EXCH_XY_RS(solar1, myThid )
0318 _EXCH_XY_RS(flwdwn0, myThid )
0319 _EXCH_XY_RS(flwdwn1, myThid )
0320 _EXCH_XY_RS(cloud0, myThid )
0321 _EXCH_XY_RS(cloud1, myThid )
0322 _EXCH_XY_RS(wspeed0, myThid )
0323 _EXCH_XY_RS(wspeed1, myThid )
0324
0325
0326
0327
a05d835d01 Jean*0328 CALL EXCH_UV_AGRID_3D_RS( uwind0, vwind0, .TRUE., 1, myThid )
0329 CALL EXCH_UV_AGRID_3D_RS( uwind1, vwind1, .TRUE., 1, myThid )
12ffad7671 Jean*0330 _EXCH_XY_RS(rain0, myThid )
0331 _EXCH_XY_RS(rain1, myThid )
0332 _EXCH_XY_RS(runoff0, myThid )
0333 _EXCH_XY_RS(runoff1, myThid )
0334 _EXCH_XY_RS(snow0 , myThid )
0335 _EXCH_XY_RS(snow1 , myThid )
679d149d01 Jean*0336 #ifdef ALLOW_FORMULA_AIM
0337 IF ( useFluxFormula_AIM ) THEN
12ffad7671 Jean*0338 _EXCH_XY_RS( thAir0, myThid )
0339 _EXCH_XY_RS( thAir1, myThid )
679d149d01 Jean*0340 ENDIF
0341 #endif
12ffad7671 Jean*0342 _EXCH_XY_RS(qnetch0, myThid )
0343 _EXCH_XY_RS(qnetch1, myThid )
0344 _EXCH_XY_RS(empch0, myThid )
0345 _EXCH_XY_RS(empch1, myThid )
679d149d01 Jean*0346
a96726d526 Jean*0347
0348 DO bj = myByLo(myThid), myByHi(myThid)
0349 DO bi = myBxLo(myThid), myBxHi(myThid)
0350 bulkfRec(bi,bj) = intime1
0351 ENDDO
0352 ENDDO
0353
0354
7753507405 Curt*0355 ENDIF
0356
0357
0358 DO bj = myByLo(myThid), myByHi(myThid)
0359 DO bi = myBxLo(myThid), myBxHi(myThid)
0360 DO j=1-Oly,sNy+Oly
0361 DO i=1-Olx,sNx+Olx
679d149d01 Jean*0362
0363
0364 TAIR(i,j,bi,bj) = bWght*tair0(i,j,bi,bj)
0365 & +aWght*tair1(i,j,bi,bj)
0366
0367
0368
0369 QAIR(i,j,bi,bj) =(bWght*qair0(i,j,bi,bj)
6a1d3c464b Jean*0370 & +aWght*qair1(i,j,bi,bj) )
0371 SOLAR(i,j,bi,bj) = bWght*solar0(i,j,bi,bj)
0372 & +aWght*solar1(i,j,bi,bj)
679d149d01 Jean*0373 FLWDWN(i,j,bi,bj) = bWght*flwdwn0(i,j,bi,bj)
0374 & +aWght*flwdwn1(i,j,bi,bj)
0375 CLOUD(i,j,bi,bj) = bWght*cloud0(i,j,bi,bj)
0376 & +aWght*cloud1(i,j,bi,bj)
0377 WSPEED(i,j,bi,bj) = bWght*wspeed0(i,j,bi,bj)
0378 & +aWght*wspeed1(i,j,bi,bj)
6a1d3c464b Jean*0379 UWIND(i,j,bi,bj) = bWght*uwind0(i,j,bi,bj)
0380 & +aWght*uwind1(i,j,bi,bj)
0381 VWIND(i,j,bi,bj) = bWght*vwind0(i,j,bi,bj)
0382 & +aWght*vwind1(i,j,bi,bj)
679d149d01 Jean*0383 RAIN(i,j,bi,bj) = bWght*rain0(i,j,bi,bj)
0384 & +aWght*rain1(i,j,bi,bj)
6a1d3c464b Jean*0385 RUNOFF(i,j,bi,bj) = bWght*runoff0(i,j,bi,bj)
0386 & +aWght*runoff1(i,j,bi,bj)
94370ae71c Jean*0387
0388
0389
0390
a5003302cb Jean*0391 Qnetch(i,j,bi,bj) = bWght*qnetch0(i,j,bi,bj)
679d149d01 Jean*0392 & +aWght*qnetch1(i,j,bi,bj)
a5003302cb Jean*0393 EmPch(i,j,bi,bj) = bWght*empch0(i,j,bi,bj)
679d149d01 Jean*0394 & +aWght*empch1(i,j,bi,bj)
7753507405 Curt*0395 ENDDO
0396 ENDDO
679d149d01 Jean*0397 #ifdef ALLOW_FORMULA_AIM
0398 IF ( useFluxFormula_AIM ) THEN
0399 DO j=1-Oly,sNy+Oly
0400 DO i=1-Olx,sNx+Olx
0401 thAir(i,j,bi,bj) = bWght*thAir0(i,j,bi,bj)
0402 & + aWght*thAir1(i,j,bi,bj)
0403 ENDDO
0404 ENDDO
0405 ENDIF
0406 #endif
7753507405 Curt*0407 ENDDO
0408 ENDDO
0409
6a1d3c464b Jean*0410
12ffad7671 Jean*0411
7753507405 Curt*0412
0413
2af766aefa Curt*0414
0415
0416
0417
0418
0419
0420
0421
0422
0423
0424
0425
0426
7753507405 Curt*0427
0428
0429 ENDIF
0430
6a1d3c464b Jean*0431 #endif /*ALLOW_BULK_FORCE*/
7753507405 Curt*0432
0433 RETURN
0434 END