File indexing completed on 2019-12-05 06:10:40 UTC
view on githubraw file Latest commit 451f8a1a on 2019-05-30 03:05:36 UTC
cf5b5345a0 Jean*0001 #include "CHEAPAML_OPTIONS.h"
0002
89f7c61169 Jean*0003 SUBROUTINE CHEAPAML(
0004 I myTime, myIter, myThid )
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
b4dc6cd434 Jean*0024
89f7c61169 Jean*0025
0026
0027
0028
0029
0030
0031
0032 IMPLICIT NONE
0033
0034
cf5b5345a0 Jean*0035 #include "SIZE.h"
ced0783fba Jean*0036 #include "EEPARAMS.h"
c7cc66b68a Jean*0037 #include "EESUPPORT.h"
cf5b5345a0 Jean*0038 #include "PARAMS.h"
0039 #include "DYNVARS.h"
0040 #include "GRID.h"
0041 #include "FFIELDS.h"
0042 #include "CHEAPAML.h"
ced0783fba Jean*0043
89f7c61169 Jean*0044
cf5b5345a0 Jean*0045 _RL myTime
89f7c61169 Jean*0046 INTEGER myIter
b4dc6cd434 Jean*0047 INTEGER myThid
cf5b5345a0 Jean*0048
0049
5251e2c855 Jean*0050 INTEGER bi,bj
6e2c553d69 Jean*0051 INTEGER i,j, nt, startAB
b4dc6cd434 Jean*0052 INTEGER iMin, iMax
0053 INTEGER jMin, jMax
f7e8d2fb69 Jean*0054 LOGICAL writeDbug
0055 CHARACTER*10 sufx
5251e2c855 Jean*0056 LOGICAL xIsPeriodic, yIsPeriodic
89f7c61169 Jean*0057
0058
6e2c553d69 Jean*0059 _RL gTair(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0060 _RL gqair(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0061 _RL gCheaptracer(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
89f7c61169 Jean*0062
0063 _RL uTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0064 _RL vTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
cf5b5345a0 Jean*0065
ced0783fba Jean*0066 _RL deltaTTracer,deltaTm,ts,xalwu
8fd83faf35 Jean*0067 _RL dm,pt,xalwd,xlwnet
2616d73cb2 Nico*0068 _RL dtemp,xflu,xfld,dq,dtr
c7cc66b68a Jean*0069
8fd83faf35 Jean*0070 _RL q,precip,ttt,entrain
0071 _RL uRelWind(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0072 _RL vRelWind(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0073 _RL windSq (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0074 _RL fsha(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0075 _RL flha(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0076 _RL evp (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0077 _RL xolw(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0078 _RL ssqt(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0079 _RL q100(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0080 _RL cdq (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0081
0082 _RL surfDrag(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0083 _RL dumArg(6)
0084 _RL fsha0, flha0, evp_0, xolw0, ssqt0, q100_0, cdq_0
0085 _RL Tsurf (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0086 _RL iceFrac(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0087 _RL icFrac, opFrac
2616d73cb2 Nico*0088
fe3b1ad426 Jean*0089 _RL tmpFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
2616d73cb2 Nico*0090
89f7c61169 Jean*0091
0092
ced0783fba Jean*0093 deltaTm=1. _d 0/deltaT
cf5b5345a0 Jean*0094
ced0783fba Jean*0095
cf5b5345a0 Jean*0096 deltaTtracer = deltaT/FLOAT(cheapaml_ntim)
0097
f7e8d2fb69 Jean*0098
0099
0100 writeDbug = debugLevel.GE.debLevC .AND. diagFreq.GT.0.
0101
b4dc6cd434 Jean*0102 #ifdef ALLOW_DIAGNOSTICS
0103
0104 IF ( useDiagnostics ) THEN
0105 CALL DIAGNOSTICS_FILL( Tair, 'CH_TAIR ', 0,1,0,1,1, myThid )
0106 IF (useFreshWaterFlux)
0107 & CALL DIAGNOSTICS_FILL( Qair, 'CH_QAIR ', 0,1,0,1,1, myThid )
0108 ENDIF
0109 #endif /* ALLOW_DIAGNOSTICS */
0110
cf5b5345a0 Jean*0111 DO bj=myByLo(myThid),myByHi(myThid)
0112 DO bi=myBxLo(myThid),myBxHi(myThid)
89f7c61169 Jean*0113
0114 DO j = 1-OLy,sNy+OLy
0115 DO i = 1-OLx,sNx+OLx
0116 Qnet(i,j,bi,bj) = 0. _d 0
0117 EmPmR(i,j,bi,bj)= 0. _d 0
ced0783fba Jean*0118 ENDDO
0119 ENDDO
89f7c61169 Jean*0120 ENDDO
0121 ENDDO
ced0783fba Jean*0122
89f7c61169 Jean*0123
0124
0125
0126
c7cc66b68a Jean*0127
89f7c61169 Jean*0128
0129
cf5b5345a0 Jean*0130
89f7c61169 Jean*0131 DO nt=1,cheapaml_ntim
cf5b5345a0 Jean*0132
89f7c61169 Jean*0133 DO bj=myByLo(myThid),myByHi(myThid)
0134 DO bi=myBxLo(myThid),myBxHi(myThid)
0135
0136
0137 DO j=1-OLy,sNy+OLy
0138 DO i=1-OLx,sNx+OLx
0139 gTair(i,j,bi,bj)=0. _d 0
58426debb4 Jean*0140 uTrans(i,j) = uWind(i,j,bi,bj)*dyG(i,j,bi,bj)
0141 vTrans(i,j) = vWind(i,j,bi,bj)*dxG(i,j,bi,bj)
89f7c61169 Jean*0142 ENDDO
0143 ENDDO
2b5bd8961b Jean*0144 CALL CHEAPAML_CALC_RHS(
89f7c61169 Jean*0145 I bi, bj, 1-OLx,sNx+OLx, 1-OLy,sNy+OLy,
0146 I uTrans, vTrans,
b4dc6cd434 Jean*0147 I uWind, vWind,
5251e2c855 Jean*0148 I cheapaml_kdiff, Tair,
0149 I deltaTtracer, zu, useFluxLimit,
0150 I cheapamlXperiodic, cheapamlYperiodic,
b4dc6cd434 Jean*0151 O wWind,
5251e2c855 Jean*0152 U gTair,
cf5b5345a0 Jean*0153 I myTime, myIter, myThid )
451f8a1a2d Jean*0154 IF (.NOT.useFluxLimit ) THEN
0155 startAB = cheapTairStartAB + nt - 1
0156 CALL ADAMS_BASHFORTH2(
fe3b1ad426 Jean*0157 I bi, bj, 1, 1,
9d0e3cbad3 Jean*0158 U gTair(1-OLx,1-OLy,bi,bj),
0159 U gTairm(1-OLx,1-OLy,bi,bj), tmpFld,
89f7c61169 Jean*0160 I startAB, myIter, myThid )
451f8a1a2d Jean*0161 ENDIF
5251e2c855 Jean*0162 CALL CHEAPAML_TIMESTEP(
89f7c61169 Jean*0163 I bi, bj, 1-OLx,sNx+OLx, 1-OLy,sNy+OLy, deltaTtracer,
5251e2c855 Jean*0164 I gTair,
0165 U Tair,
0166 I nt, myIter, myThid )
89f7c61169 Jean*0167
0168 ENDDO
0169 ENDDO
0170
b4dc6cd434 Jean*0171 _EXCH_XY_RL(Tair,myThid)
89f7c61169 Jean*0172
0173 IF (useFreshWaterFlux) THEN
0174
0175 DO bj=myByLo(myThid),myByHi(myThid)
0176 DO bi=myBxLo(myThid),myBxHi(myThid)
0177 DO j=1-OLy,sNy+OLy
0178 DO i=1-OLx,sNx+OLx
0179 gqair(i,j,bi,bj)=0. _d 0
58426debb4 Jean*0180 uTrans(i,j) = uWind(i,j,bi,bj)*dyG(i,j,bi,bj)
0181 vTrans(i,j) = vWind(i,j,bi,bj)*dxG(i,j,bi,bj)
89f7c61169 Jean*0182 ENDDO
0183 ENDDO
2b5bd8961b Jean*0184 CALL CHEAPAML_CALC_RHS(
89f7c61169 Jean*0185 I bi, bj, 1-OLx,sNx+OLx, 1-OLy,sNy+OLy,
0186 I uTrans, vTrans,
b4dc6cd434 Jean*0187 I uWind, vWind,
5251e2c855 Jean*0188 I cheapaml_kdiff, qair,
0189 I deltaTtracer, zu, useFluxLimit,
0190 I cheapamlXperiodic, cheapamlYperiodic,
b4dc6cd434 Jean*0191 O wWind,
5251e2c855 Jean*0192 U gqair,
ced0783fba Jean*0193 I myTime, myIter, myThid )
451f8a1a2d Jean*0194 IF (.NOT.useFluxLimit ) THEN
0195 startAB = cheapTairStartAB + nt - 1
0196 CALL ADAMS_BASHFORTH2(
fe3b1ad426 Jean*0197 I bi, bj, 1, 1,
9d0e3cbad3 Jean*0198 U gqair(1-OLx,1-OLy,bi,bj),
0199 U gqairm(1-OLx,1-OLy,bi,bj), tmpFld,
89f7c61169 Jean*0200 I startAB, myIter, myThid )
451f8a1a2d Jean*0201 ENDIF
5251e2c855 Jean*0202 CALL CHEAPAML_TIMESTEP(
89f7c61169 Jean*0203 I bi, bj, 1-OLx,sNx+OLx, 1-OLy,sNy+OLy, deltaTtracer,
5251e2c855 Jean*0204 I gqair,
0205 U qair,
0206 I nt, myIter, myThid )
89f7c61169 Jean*0207
0208 ENDDO
0209 ENDDO
0210
b4dc6cd434 Jean*0211 _EXCH_XY_RL(qair,myThid)
89f7c61169 Jean*0212 ENDIF
51132e5783 Nico*0213
89f7c61169 Jean*0214 IF (useCheapTracer) THEN
0215
0216 DO bj=myByLo(myThid),myByHi(myThid)
0217 DO bi=myBxLo(myThid),myBxHi(myThid)
0218 DO j=1-OLy,sNy+OLy
0219 DO i=1-OLx,sNx+OLx
0220 gCheaptracer(i,j,bi,bj)=0. _d 0
58426debb4 Jean*0221 uTrans(i,j) = uWind(i,j,bi,bj)*dyG(i,j,bi,bj)
0222 vTrans(i,j) = vWind(i,j,bi,bj)*dxG(i,j,bi,bj)
89f7c61169 Jean*0223 ENDDO
0224 ENDDO
2b5bd8961b Jean*0225 CALL CHEAPAML_CALC_RHS(
89f7c61169 Jean*0226 I bi, bj, 1-OLx,sNx+OLx, 1-OLy,sNy+OLy,
0227 I uTrans, vTrans,
b4dc6cd434 Jean*0228 I uWind, vWind,
5251e2c855 Jean*0229 I cheapaml_kdiff, Cheaptracer,
0230 I deltaTtracer, zu, useFluxLimit,
0231 I cheapamlXperiodic, cheapamlYperiodic,
b4dc6cd434 Jean*0232 O wWind,
5251e2c855 Jean*0233 U gCheaptracer,
51132e5783 Nico*0234 I myTime, myIter, myThid )
451f8a1a2d Jean*0235 IF (.NOT.useFluxLimit ) THEN
0236 startAB = cheapTracStartAB + nt - 1
0237 CALL ADAMS_BASHFORTH2(
fe3b1ad426 Jean*0238 I bi, bj, 1, 1,
9d0e3cbad3 Jean*0239 U gCheaptracer(1-OLx,1-OLy,bi,bj),
0240 U gCheaptracerm(1-OLx,1-OLy,bi,bj), tmpFld,
fe3b1ad426 Jean*0241 I startAB, myIter, myThid )
451f8a1a2d Jean*0242 ENDIF
5251e2c855 Jean*0243 CALL CHEAPAML_TIMESTEP(
89f7c61169 Jean*0244 I bi, bj, 1-OLx,sNx+OLx, 1-OLy,sNy+OLy, deltaTtracer,
5251e2c855 Jean*0245 I gCheaptracer,
0246 U Cheaptracer,
0247 I nt, myIter, myThid )
89f7c61169 Jean*0248
0249 ENDDO
0250 ENDDO
0251
b4dc6cd434 Jean*0252 _EXCH_XY_RL(Cheaptracer,myThid)
89f7c61169 Jean*0253 ENDIF
c7cc66b68a Jean*0254
89f7c61169 Jean*0255
d25d6ad15e Jean*0256 IF ( .NOT.(cheapamlXperiodic.AND.cheapamlYperiodic) ) THEN
4fa4901be6 Nico*0257 DO bj=myByLo(myThid),myByHi(myThid)
89f7c61169 Jean*0258 DO bi=myBxLo(myThid),myBxHi(myThid)
5251e2c855 Jean*0259 CALL CHEAPAML_COPY_EDGES(
0260 I cheapamlXperiodic, cheapamlYperiodic,
0261 I Tr(1-OLx,1-OLy,bi,bj),
0262 U Tair(1-OLx,1-OLy,bi,bj),
0263 I bi, bj, myIter, myThid )
0264 IF (useFreshWaterFlux) THEN
0265 CALL CHEAPAML_COPY_EDGES(
0266 I cheapamlXperiodic, cheapamlYperiodic,
0267 I qr(1-OLx,1-OLy,bi,bj),
0268 U qair(1-OLx,1-OLy,bi,bj),
0269 I bi, bj, myIter, myThid )
0270 ENDIF
0271 IF (useCheapTracer) THEN
0272 CALL CHEAPAML_COPY_EDGES(
0273 I cheapamlXperiodic, cheapamlYperiodic,
0274 I CheaptracerR(1-OLx,1-OLy,bi,bj),
0275 U Cheaptracer(1-OLx,1-OLy,bi,bj),
0276 I bi, bj, myIter, myThid )
0277 ENDIF
89f7c61169 Jean*0278 ENDDO
0279 ENDDO
0280 ENDIF
c7cc66b68a Jean*0281
89f7c61169 Jean*0282
0283 ENDDO
f7e8d2fb69 Jean*0284 IF ( writeDbug ) THEN
0285 WRITE(sufx,'(I10.10)') myIter
0286 CALL WRITE_FLD_XY_RL('tAir_afAdv.', sufx, Tair, myIter, myThid )
0287 IF (useFreshWaterFlux)
0288 & CALL WRITE_FLD_XY_RL('qAir_afAdv.', sufx, qair, myIter, myThid )
0289 ENDIF
ced0783fba Jean*0290
89f7c61169 Jean*0291
cf5b5345a0 Jean*0292
89f7c61169 Jean*0293
b4dc6cd434 Jean*0294 iMin = 1
0295 iMax = sNx
0296 jMin = 1
0297 jMax = sNy
0298
51132e5783 Nico*0299 DO bj=myByLo(myThid),myByHi(myThid)
89f7c61169 Jean*0300 DO bi=myBxLo(myThid),myBxHi(myThid)
b4dc6cd434 Jean*0301
d54b0079d9 Brun*0302 DO j = 1-OLy, sNy+OLy
0303 DO i = 1-OLx, sNx+OLx
0304 surfDrag(i,j,bi,bj) = 0.
0305 ENDDO
0306 ENDDO
0307
0308 IF (useRelativeWind) THEN
0309 DO j = 1-OLy, sNy+OLy
0310 DO i = 1-OLx, sNx+OLx
0311 uRelWind(i,j) = uWind(i,j,bi,bj)-uVel(i,j,1,bi,bj)
0312 vRelWind(i,j) = vWind(i,j,bi,bj)-vVel(i,j,1,bi,bj)
0313 ENDDO
0314 ENDDO
0315
0316 DO j = jMin,jMax
0317 DO i = iMin,iMax
0318 windSq(i,j) = ( uRelWind( i ,j)*uRelWind( i ,j)
0319 & + uRelWind(i+1,j)*uRelWind(i+1,j)
0320 & + vRelWind(i, j )*vRelWind(i, j )
0321 & + vRelWind(i,j+1)*vRelWind(i,j+1)
0322 & )*0.5 _d 0
b4dc6cd434 Jean*0323 #ifdef INCONSISTENT_WIND_LOCATION
d54b0079d9 Brun*0324 windSq(i,j) = uRelWind(i,j)*uRelWind(i,j)
0325 & + vRelWind(i,j)*vRelWind(i,j)
b4dc6cd434 Jean*0326 #endif
d54b0079d9 Brun*0327 ENDDO
0328 ENDDO
0329 ELSE
0330 DO j = jMin,jMax
0331 DO i = iMin,iMax
0332 windSq(i,j) = ( uWind( i ,j,bi,bj)*uWind( i ,j,bi,bj)
0333 & + uWind(i+1,j,bi,bj)*uWind(i+1,j,bi,bj)
0334 & + vWind(i, j ,bi,bj)*vWind(i, j,bi,bj )
0335 & + vWind(i,j+1,bi,bj)*vWind(i,j+1,bi,bj)
0336 & )*0.5 _d 0
0337 #ifdef INCONSISTENT_WIND_LOCATION
0338 windSq(i,j) = uWind(i,j,bi,bj)*uWind(i,j,bi,bj)
0339 & + vWind(i,j,bi,bj)*vWind(i,j,bi,bj)
0340 #endif
0341 ENDDO
0342 ENDDO
0343
08ad22b4de Jean*0344 ENDIF
d54b0079d9 Brun*0345
8fd83faf35 Jean*0346 IF ( useThSIce ) THEN
0347 CALL CHEAPAML_SEAICE(
0348 I solar(1-OLx,1-OLy,bi,bj),
0349 I cheapdlongwave(1-OLx,1-OLy,bi,bj),
0350 I uWind(1-OLx,1-OLy,bi,bj),
0351 I vWind(1-OLx,1-OLy,bi,bj), lath,
0352 O fsha, flha, evp, xolw, ssqt, q100, cdq,
0353 O Tsurf, iceFrac, Qsw(1-OLx,1-OLy,bi,bj),
0354 I bi, bj, myTime, myIter, myThid )
0355 DO j = jMin,jMax
0356 DO i = iMin,iMax
0357 CALL CHEAPAML_COARE3_FLUX(
0358 I i, j, bi, bj, 0,
0359 I theta(1-OLx,1-OLy,1,bi,bj), windSq,
0360 O fsha0, flha0, evp_0, xolw0,
0361 O ssqt0, q100_0, cdq_0,
0362 O surfDrag(i,j,bi,bj),
0363 O dumArg(1), dumArg(2), dumArg(3), dumArg(4),
0364 I myIter, myThid )
0365 Qnet(i,j,bi,bj) = (
0366 & -solar(i,j,bi,bj)
0367 & +xolw0 - cheapdlongwave(i,j,bi,bj)
0368 & +fsha0
0369 & +flha0
0370 & )*maskC(i,j,1,bi,bj)
0371 EmPmR(i,j,bi,bj) = evp_0
0372 icFrac = iceFrac(i,j)
0373 opFrac = 1. _d 0 - icFrac
0374
0375 Qsw(i,j,bi,bj) = - ( icFrac*Qsw(i,j,bi,bj)
0376 & + opFrac*solar(i,j,bi,bj) )
0377 fsha(i,j) = icFrac*fsha(i,j) + opFrac*fsha0
0378 flha(i,j) = icFrac*flha(i,j) + opFrac*flha0
0379 evp(i,j) = icFrac*evp(i,j) + opFrac*evp_0
0380 xolw(i,j) = icFrac*xolw(i,j) + opFrac*xolw0
0381 ssqt(i,j) = icFrac*ssqt(i,j) + opFrac*ssqt0
0382 q100(i,j) = icFrac*q100(i,j) + opFrac*q100_0
0383 cdq(i,j) = icFrac*cdq(i,j) + opFrac*cdq_0
0384 ENDDO
0385 ENDDO
0386 ELSE
0387 DO j = jMin,jMax
0388 DO i = iMin,iMax
0389 IF (FluxFormula.EQ.'LANL') THEN
0390 CALL cheapaml_LANL_flux(
0391 I i, j, bi, bj,
0392 O fsha(i,j), flha(i,j), evp(i,j),
0393 O xolw(i,j), ssqt(i,j), q100(i,j) )
0394 ELSEIF (FluxFormula.EQ.'COARE3') THEN
0395 CALL CHEAPAML_COARE3_FLUX(
0396 I i, j, bi, bj, 0,
0397 I theta(1-OLx,1-OLy,1,bi,bj), windSq,
0398 O fsha(i,j), flha(i,j), evp(i,j), xolw(i,j),
0399 O ssqt(i,j), q100(i,j), cdq(i,j),
0400 O surfDrag(i,j,bi,bj),
0401 O dumArg(1), dumArg(2), dumArg(3), dumArg(4),
0402 I myIter, myThid )
0403 ENDIF
0404 IF (useFreshWaterFlux) THEN
0405 EmPmR(i,j,bi,bj) = evp(i,j)
0406 ENDIF
0407 ENDDO
0408 ENDDO
0409 ENDIF
0410
0411 DO j = jMin,jMax
0412 DO i = iMin,iMax
c7cc66b68a Jean*0413
89f7c61169 Jean*0414
8fd83faf35 Jean*0415 ttt = Tair(i,j,bi,bj)-gamma_blk*(CheapHgrid(i,j,bi,bj)-zt)
0416
0417 xalwu = stefan*(0.5*Tair(i,j,bi,bj)+0.5*ttt+celsius2K)**4
0418 & *0.5 _d 0
89f7c61169 Jean*0419
8fd83faf35 Jean*0420 xalwd = stefan*(Tair(i,j,bi,bj)+celsius2K)**4*0.5 _d 0
89f7c61169 Jean*0421
8fd83faf35 Jean*0422 xflu = ( -solar(i,j,bi,bj) + xalwu + flha(i,j)
0423 & )*xef*maskC(i,j,1,bi,bj)
89f7c61169 Jean*0424
8fd83faf35 Jean*0425 xfld = ( -solar(i,j,bi,bj) - xalwd + xolw(i,j)
0426 & + fsha(i,j) + flha(i,j)
0427 & )*xef*maskC(i,j,1,bi,bj)
0c111b8b6e Nico*0428
b4dc6cd434 Jean*0429 IF (useDLongWave) THEN
8fd83faf35 Jean*0430 xlwnet = xolw(i,j)-cheapdlongwave(i,j,bi,bj)
b4dc6cd434 Jean*0431 ELSE
0c111b8b6e Nico*0432
0433
0434
b4dc6cd434 Jean*0435 xlwnet = 0.98 _d 0*stefan*(theta(i,j,1,bi,bj)+celsius2K)**4
cf6b9ab292 Brun*0436 & *(0.39 _d 0 - 0.05 _d 0*SQRT(ABS(qair(i,j,bi,bj))
0437 & * 1607.7 _d 0))
8fd83faf35 Jean*0438 & *( oneRL - (halfRL+ABS(yG(i,j,bi,bj))/230. _d 0)
0439 & *cheapclouds(i,j,bi,bj)**2 )
0440 & + 4.0*0.98 _d 0*stefan*(theta(i,j,1,bi,bj)+celsius2K)**3
0441 & *(theta(i,j,1,bi,bj)-Tair(i,j,bi,bj))
89f7c61169 Jean*0442
b4dc6cd434 Jean*0443
89f7c61169 Jean*0444
0445
b4dc6cd434 Jean*0446 ENDIF
2616d73cb2 Nico*0447
b4dc6cd434 Jean*0448
0449
0450
0451
89f7c61169 Jean*0452
b4dc6cd434 Jean*0453 gTair(i,j,bi,bj)= (xfld-xflu)/CheapHgrid(i,j,bi,bj)
8fd83faf35 Jean*0454 IF ( .NOT.useThSIce ) THEN
0455 Qnet(i,j,bi,bj) = (
b4dc6cd434 Jean*0456 & -solar(i,j,bi,bj)
0457
0458
0459
0460 & +xlwnet
8fd83faf35 Jean*0461 & +fsha(i,j)
0462 & +flha(i,j)
b4dc6cd434 Jean*0463 & )*maskC(i,j,1,bi,bj)
8fd83faf35 Jean*0464 Qsw(i,j,bi,bj) = -solar(i,j,bi,bj)
0465 ENDIF
2616d73cb2 Nico*0466
89f7c61169 Jean*0467
b4dc6cd434 Jean*0468 IF (useFreshWaterFlux) THEN
cf6b9ab292 Brun*0469 q=q100(i,j)
89f7c61169 Jean*0470
0471
0472
0473
b4dc6cd434 Jean*0474 ts=Tair(i,j,bi,bj)+gamma_blk*zt+celsius2K
0475 pt=p0*(1-gamma_blk*CheapHgrid(i,j,bi,bj)/ts)
cf6b9ab292 Brun*0476 & **(gravity/gamma_blk/gasR)
89f7c61169 Jean*0477
cf6b9ab292 Brun*0478 IF (.NOT.usePrecip) THEN
89f7c61169 Jean*0479
cf6b9ab292 Brun*0480 dm=100.*(p0-pt)*recip_gravity
0c111b8b6e Nico*0481
cf6b9ab292 Brun*0482 precip = 0.
0483 IF ( wWind(i,j,bi,bj).GT.0. .AND.
0484 & q.GT.ssqt(i,j)*0.7 _d 0 ) THEN
0485 precip = precip
8fd83faf35 Jean*0486 & + ( (q-ssqt(i,j)*0.7 _d 0)*dm/cheap_pr2 )
0487 & *(wWind(i,j,bi,bj)/0.75 _d -5)**2
cf6b9ab292 Brun*0488 ENDIF
2616d73cb2 Nico*0489
0c111b8b6e Nico*0490
cf6b9ab292 Brun*0491 IF (q.GT.0.0214 _d 0 .AND. q.GT.ssqt(i,j)*0.9 _d 0) THEN
0492 precip = precip + ((q-ssqt(i,j)*0.9 _d 0)*dm/cheap_pr1)
0493 ENDIF
0c111b8b6e Nico*0494
cf6b9ab292 Brun*0495 cheapPrecip(i,j,bi,bj) = precip*1200/CheapHgrid(i,j,bi,bj)
0496 ENDIF
08ad22b4de Jean*0497
cf6b9ab292 Brun*0498 entrain = cdq(i,j)*q*0.25
0c111b8b6e Nico*0499
b4dc6cd434 Jean*0500
8fd83faf35 Jean*0501 gqair(i,j,bi,bj) = (evp(i,j)-entrain)/CheapHgrid(i,j,bi,bj)
0502 & /rhoa*maskC(i,j,1,bi,bj)
0503 EmPmR(i,j,bi,bj) = ( EmPmR(i,j,bi,bj)
0504 & -cheapPrecip(i,j,bi,bj)
b4dc6cd434 Jean*0505 & )*maskC(i,j,1,bi,bj)
0506 ENDIF
ced0783fba Jean*0507
89f7c61169 Jean*0508 ENDDO
0509 ENDDO
0510
0511
0512
5251e2c855 Jean*0513
0514 CALL CHEAPAML_TIMESTEP(
b4dc6cd434 Jean*0515 I bi, bj, iMin, iMax, jMin, jMax, deltaT,
5251e2c855 Jean*0516 I gTair,
0517 U Tair,
0518 I 0, myIter, myThid )
89f7c61169 Jean*0519
0520 DO j=1-OLy,sNy+OLy
0521 DO i=1-OLx,sNx+OLx
0522 dtemp=tr(i,j,bi,bj)-Tair(i,j,bi,bj)
0523 Tair(i,j,bi,bj)=Tair(i,j,bi,bj)+dtemp*xrelf(i,j,bi,bj)
0524 ENDDO
0525 ENDDO
51132e5783 Nico*0526
89f7c61169 Jean*0527
0528 IF (useFreshWaterFlux) THEN
5251e2c855 Jean*0529 CALL CHEAPAML_TIMESTEP(
b4dc6cd434 Jean*0530 I bi, bj, iMin, iMax, jMin, jMax, deltaT,
5251e2c855 Jean*0531 I gqair,
0532 U qair,
0533 I 0, myIter, myThid )
89f7c61169 Jean*0534
0535 DO j=1-OLy,sNy+OLy
0536 DO i=1-OLx,sNx+OLx
0537 dq=qr(i,j,bi,bj)-qair(i,j,bi,bj)
0538 qair(i,j,bi,bj)=qair(i,j,bi,bj)+dq*xrelf(i,j,bi,bj)
0539 IF (qair(i,j,bi,bj).LT.0.0) qair(i,j,bi,bj) = 0.0 _d 0
0540 ENDDO
0541 ENDDO
0542 ENDIF
0543
0544
0545 IF (useCheapTracer) THEN
0546
0547 DO j=1-OLy,sNy+OLy
0548 DO i=1-OLx,sNx+OLx
0549 dtr=CheaptracerR(i,j,bi,bj)-Cheaptracer(i,j,bi,bj)
0550 Cheaptracer(i,j,bi,bj) = Cheaptracer(i,j,bi,bj)
0551 & + dtr*xrelf(i,j,bi,bj)
0552 ENDDO
0553 ENDDO
0554 ENDIF
ced0783fba Jean*0555
8fd83faf35 Jean*0556 #ifdef ALLOW_DIAGNOSTICS
0557 IF ( useDiagnostics ) THEN
0558 CALL DIAGNOSTICS_FILL( fsha,'CH_SH ',0,1,2,bi,bj,myThid )
0559 CALL DIAGNOSTICS_FILL( flha,'CH_LH ',0,1,2,bi,bj,myThid )
0560 CALL DIAGNOSTICS_FILL( q100,'CH_q100 ',0,1,2,bi,bj,myThid )
0561 CALL DIAGNOSTICS_FILL( ssqt,'CH_ssqt ',0,1,2,bi,bj,myThid )
0562 ENDIF
0563 #endif /* ALLOW_DIAGNOSTICS */
0564
89f7c61169 Jean*0565
0566 ENDDO
0567 ENDDO
0568
0569
b4dc6cd434 Jean*0570 _EXCH_XY_RL(Tair,myThid)
0571 _EXCH_XY_RS(Qnet,myThid)
89f7c61169 Jean*0572 IF (useFreshWaterFlux) THEN
b4dc6cd434 Jean*0573 _EXCH_XY_RL(qair,myThid)
0574 _EXCH_XY_RS(EmPmR,myThid)
89f7c61169 Jean*0575 ENDIF
0576 IF (useCheapTracer) THEN
b4dc6cd434 Jean*0577 _EXCH_XY_RL(Cheaptracer,myThid)
0578 ENDIF
0579 IF (.NOT.useStressOption) THEN
0580 IF ( FluxFormula.EQ.'COARE3' ) THEN
0581 _EXCH_XY_RL( surfDrag, myThid )
0582 ELSE
0583 CALL EXCH_UV_AGRID_3D_RL( ustress, vstress, .TRUE., 1, myThid )
0584 ENDIF
89f7c61169 Jean*0585 ENDIF
0586
0587
d25d6ad15e Jean*0588
5251e2c855 Jean*0589 IF ( notUsingXPeriodicity.OR.notUsingYPeriodicity ) THEN
0590 xIsPeriodic = .NOT.notUsingXPeriodicity
0591 yIsPeriodic = .NOT.notUsingYPeriodicity
0592 DO bj=myByLo(myThid),myByHi(myThid)
0593 DO bi=myBxLo(myThid),myBxHi(myThid)
0594 CALL CHEAPAML_COPY_EDGES(
0595
0596 I xIsPeriodic, yIsPeriodic,
0597 I Tr(1-OLx,1-OLy,bi,bj),
0598 U Tair(1-OLx,1-OLy,bi,bj),
0599 I bi, bj, myIter, myThid )
0600 IF (useFreshWaterFlux) THEN
0601 CALL CHEAPAML_COPY_EDGES(
0602
0603 I xIsPeriodic, yIsPeriodic,
0604 I qr(1-OLx,1-OLy,bi,bj),
0605 U qair(1-OLx,1-OLy,bi,bj),
0606 I bi, bj, myIter, myThid )
0607 ENDIF
0608 IF (useCheapTracer) THEN
0609 CALL CHEAPAML_COPY_EDGES(
0610
0611 I xIsPeriodic, yIsPeriodic,
0612 I CheaptracerR(1-OLx,1-OLy,bi,bj),
0613 U Cheaptracer(1-OLx,1-OLy,bi,bj),
0614 I bi, bj, myIter, myThid )
0615 ENDIF
89f7c61169 Jean*0616 ENDDO
51132e5783 Nico*0617 ENDDO
89f7c61169 Jean*0618 ENDIF
c7cc66b68a Jean*0619
8fd83faf35 Jean*0620
0621
0622
cf5b5345a0 Jean*0623
0624 DO bj=myByLo(myThid),myByHi(myThid)
0625 DO bi=myBxLo(myThid),myBxHi(myThid)
b4dc6cd434 Jean*0626
0627 IF ( .NOT.useStressOption .AND. FluxFormula.EQ.'COARE3' ) THEN
d54b0079d9 Brun*0628 IF (useRelativeWind) THEN
08ad22b4de Jean*0629
d54b0079d9 Brun*0630 DO j = 1-OLy+1,sNy+OLy
b4dc6cd434 Jean*0631 DO i = 1-OLx+1,sNx+OLx
0632 fu(i,j,bi,bj) = maskW(i,j,1,bi,bj)*0.5 _d 0
0633 & *( surfDrag(i-1,j,bi,bj) + surfDrag(i,j,bi,bj) )
0634 & *( uWind(i,j,bi,bj)-uVel(i,j,1,bi,bj) )
0635 fv(i,j,bi,bj) = maskS(i,j,1,bi,bj)*0.5 _d 0
0636 & *( surfDrag(i,j-1,bi,bj) + surfDrag(i,j,bi,bj) )
0637 & *( vWind(i,j,bi,bj)-vVel(i,j,1,bi,bj) )
0638 ENDDO
0639 ENDDO
0640 #ifdef INCONSISTENT_WIND_LOCATION
0641 DO j = 1-OLy,sNy+OLy
0642 DO i = 1-OLx+1,sNx+OLx
0643 fu(i,j,bi,bj) = maskW(i,j,1,bi,bj)*0.5 _d 0
0644 & *( surfDrag(i-1,j,bi,bj)
0645 & *( uWind(i-1,j,bi,bj)-uVel(i-1,j,1,bi,bj) )
0646 & + surfDrag(i,j,bi,bj)
0647 & *( uWind(i,j,bi,bj) - uVel(i,j,1,bi,bj) ) )
0648 ENDDO
0649 ENDDO
0650 DO j = 1-OLy+1,sNy+OLy
0651 DO i = 1-OLx,sNx+OLx
0652 fv(i,j,bi,bj) = maskS(i,j,1,bi,bj)*0.5 _d 0
0653 & *( surfDrag(i,j-1,bi,bj)
0654 & *( vWind(i,j-1,bi,bj)-vVel(i,j-1,1,bi,bj) )
0655 & + surfDrag(i,j,bi,bj)
0656 & *( vWind(i,j,bi,bj) - vVel(i,j,1,bi,bj) ) )
0657 ENDDO
0658 ENDDO
0659 #endif /* INCONSISTENT_WIND_LOCATION */
d54b0079d9 Brun*0660 ELSE
0661
0662 DO j = 1-OLy+1,sNy+OLy
0663 DO i = 1-OLx+1,sNx+OLx
0664 fu(i,j,bi,bj) = maskW(i,j,1,bi,bj)*0.5 _d 0
0665 & *( surfDrag(i-1,j,bi,bj) + surfDrag(i,j,bi,bj) )
0666 & *uWind(i,j,bi,bj)
0667 fv(i,j,bi,bj) = maskS(i,j,1,bi,bj)*0.5 _d 0
0668 & *( surfDrag(i,j-1,bi,bj) + surfDrag(i,j,bi,bj) )
0669 & *vWind(i,j,bi,bj)
0670 ENDDO
0671 ENDDO
0672 #ifdef INCONSISTENT_WIND_LOCATION
0673 DO j = 1-OLy,sNy+OLy
0674 DO i = 1-OLx+1,sNx+OLx
0675 fu(i,j,bi,bj) = maskW(i,j,1,bi,bj)*0.5 _d 0
0676 & *( surfDrag(i-1,j,bi,bj)
0677 & *uWind(i-1,j,bi,bj)
0678 & + surfDrag(i,j,bi,bj)
0679 & *uWind(i,j,bi,bj))
0680 ENDDO
0681 ENDDO
0682 DO j = 1-OLy+1,sNy+OLy
0683 DO i = 1-OLx,sNx+OLx
0684 fv(i,j,bi,bj) = maskS(i,j,1,bi,bj)*0.5 _d 0
0685 & *( surfDrag(i,j-1,bi,bj)
0686 & *vWind(i,j-1,bi,bj)
0687 & + surfDrag(i,j,bi,bj)
0688 & *vWind(i,j,bi,bj))
0689 ENDDO
0690 ENDDO
0691 #endif /* INCONSISTENT_WIND_LOCATION */
0692 ENDIF
0693
0694 ELSE
89f7c61169 Jean*0695
0696 DO j = 1-OLy,sNy+OLy
0697 DO i = 1-OLx+1,sNx+OLx
b4dc6cd434 Jean*0698 fu(i,j,bi,bj) = maskW(i,j,1,bi,bj)*0.5 _d 0
0699 & *( ustress(i,j,bi,bj) + ustress(i-1,j,bi,bj) )
89f7c61169 Jean*0700 ENDDO
0701 ENDDO
0702 DO j = 1-OLy+1,sNy+OLy
0703 DO i = 1-OLx,sNx+OLx
b4dc6cd434 Jean*0704 fv(i,j,bi,bj) = maskS(i,j,1,bi,bj)*0.5 _d 0
0705 & *( vstress(i,j,bi,bj) + vstress(i,j-1,bi,bj) )
89f7c61169 Jean*0706 ENDDO
0707 ENDDO
b4dc6cd434 Jean*0708 ENDIF
cf5b5345a0 Jean*0709
0710
0711 ENDDO
0712 ENDDO
2616d73cb2 Nico*0713
4fa4901be6 Nico*0714 #ifdef ALLOW_DIAGNOSTICS
bf944b1865 Jean*0715
0716
0717
0718
b4dc6cd434 Jean*0719 IF ( useDiagnostics ) THEN
0720 CALL DIAGNOSTICS_FILL(uWind, 'CH_Uwind',0,1,0,1,1,myThid)
0721 CALL DIAGNOSTICS_FILL(vWind, 'CH_Vwind',0,1,0,1,1,myThid)
0722 CALL DIAGNOSTICS_FILL_RS(Qnet,'CH_QNET ',0,1,0,1,1,myThid)
0723 IF (useFreshWaterFlux) THEN
0724 CALL DIAGNOSTICS_FILL_RS( EmPmR, 'CH_EmP ', 0,1,0,1,1,myThid)
0725 CALL DIAGNOSTICS_FILL(cheapPrecip,'CH_Prec ',0,1,0,1,1,myThid)
0726 ENDIF
0727 IF (useCheapTracer) THEN
89f7c61169 Jean*0728 CALL DIAGNOSTICS_FILL(Cheaptracer,'CH_Trace',0,1,0,1,1,myThid)
b4dc6cd434 Jean*0729 ENDIF
51132e5783 Nico*0730 ENDIF
4fa4901be6 Nico*0731 #endif /* ALLOW_DIAGNOSTICS */
c7cc66b68a Jean*0732
89f7c61169 Jean*0733
0734
0735
0736
0737
0738
0739
0740
0741
0742
0743
0744
cf5b5345a0 Jean*0745
0746 RETURN
0747 END