10 SUBROUTINE ecumev6_flux(PZ0SEA,PTA,PEXNA,PRHOA,PSST,PSSS,PEXNS,PQA,PVMOD, &
11 PZREF,PUREF,PPS,PPA,PICHCE,OPRECIP,OPWEBB, &
12 PQSAT,PSFTH,PSFTQ,PUSTAR,PCD,PCDN,PCH,PCE, &
13 PRI,PRESA,PRAIN,KZ0,PZ0HSEA,OPERTFLUX,PPERTFLUX )
97 USE modi_wind_threshold
109 REAL,
DIMENSION(:),
INTENT(IN) :: PVMOD
110 REAL,
DIMENSION(:),
INTENT(IN) :: PTA
111 REAL,
DIMENSION(:),
INTENT(IN) :: PQA
112 REAL,
DIMENSION(:),
INTENT(IN) :: PPA
113 REAL,
DIMENSION(:),
INTENT(IN) :: PRHOA
114 REAL,
DIMENSION(:),
INTENT(IN) :: PEXNA
115 REAL,
DIMENSION(:),
INTENT(IN) :: PUREF
116 REAL,
DIMENSION(:),
INTENT(IN) :: PZREF
117 REAL,
DIMENSION(:),
INTENT(IN) :: PSSS
118 REAL,
DIMENSION(:),
INTENT(IN) :: PPS
119 REAL,
DIMENSION(:),
INTENT(IN) :: PEXNS
120 REAL,
DIMENSION(:),
INTENT(IN) :: PPERTFLUX
122 REAL,
INTENT(IN) :: PICHCE
123 LOGICAL,
INTENT(IN) :: OPRECIP
124 LOGICAL,
INTENT(IN) :: OPWEBB
125 LOGICAL,
INTENT(IN) :: OPERTFLUX
126 REAL,
DIMENSION(:),
INTENT(IN) :: PRAIN
128 INTEGER,
INTENT(IN) :: KZ0
130 REAL,
DIMENSION(:),
INTENT(INOUT) :: PSST
131 REAL,
DIMENSION(:),
INTENT(INOUT) :: PZ0SEA
132 REAL,
DIMENSION(:),
INTENT(OUT) :: PZ0HSEA
135 REAL,
DIMENSION(:),
INTENT(OUT) :: PUSTAR
136 REAL,
DIMENSION(:),
INTENT(OUT) :: PSFTH
137 REAL,
DIMENSION(:),
INTENT(OUT) :: PSFTQ
140 REAL,
DIMENSION(:),
INTENT(OUT) :: PQSAT
141 REAL,
DIMENSION(:),
INTENT(OUT) :: PCD
142 REAL,
DIMENSION(:),
INTENT(OUT) :: PCH
143 REAL,
DIMENSION(:),
INTENT(OUT) :: PCE
144 REAL,
DIMENSION(:),
INTENT(OUT) :: PCDN
145 REAL,
DIMENSION(:),
INTENT(OUT) :: PRI
146 REAL,
DIMENSION(:),
INTENT(OUT) :: PRESA
151 INTEGER,
DIMENSION(SIZE(PTA)) :: JCV
152 INTEGER,
DIMENSION(SIZE(PTA)) :: JITER
154 REAL,
DIMENSION(SIZE(PTA)) :: ZTAU
155 REAL,
DIMENSION(SIZE(PTA)) :: ZHF
156 REAL,
DIMENSION(SIZE(PTA)) :: ZEF
157 REAL,
DIMENSION(SIZE(PTA)) :: ZTAUR
158 REAL,
DIMENSION(SIZE(PTA)) :: ZRF
159 REAL,
DIMENSION(SIZE(PTA)) :: ZEFWEBB
161 REAL,
DIMENSION(SIZE(PTA)) :: ZVMOD
162 REAL,
DIMENSION(SIZE(PTA)) :: ZQSATA
163 REAL,
DIMENSION(SIZE(PTA)) :: ZLVA
164 REAL,
DIMENSION(SIZE(PTA)) :: ZLVS
165 REAL,
DIMENSION(SIZE(PTA)) :: ZCPA
166 REAL,
DIMENSION(SIZE(PTA)) :: ZVISA
167 REAL,
DIMENSION(SIZE(PTA)) :: ZDU
168 REAL,
DIMENSION(SIZE(PTA)) :: ZDT,ZDQ
169 REAL,
DIMENSION(SIZE(PTA)) :: ZDDU
170 REAL,
DIMENSION(SIZE(PTA)) :: ZDDT,ZDDQ
171 REAL,
DIMENSION(SIZE(PTA)) :: ZUSR
173 REAL,
DIMENSION(SIZE(PTA)) :: ZTSR
174 REAL,
DIMENSION(SIZE(PTA)) :: ZQSR
175 REAL,
DIMENSION(SIZE(PTA)) :: ZDELTAU10N,ZDELTAT10N,ZDELTAQ10N
177 REAL,
DIMENSION(SIZE(PTA)) :: ZUSR0,ZTSR0,ZQSR0
178 REAL,
DIMENSION(SIZE(PTA)) :: ZDUSTO,ZDTSTO,ZDQSTO
179 REAL,
DIMENSION(SIZE(PTA)) :: ZPSIU,ZPSIT
180 REAL,
DIMENSION(SIZE(PTA)) :: ZCHARN
182 REAL,
DIMENSION(SIZE(PTA)) :: ZUSTAR2
183 REAL,
DIMENSION(SIZE(PTA)) :: ZAC
184 REAL,
DIMENSION(SIZE(PTA)) :: ZDIRCOSZW
186 REAL,
DIMENSION(SIZE(PTA)) :: ZPARUN,ZPARTN,ZPARQN
187 REAL,
DIMENSION(0:5) :: ZCOEFU,ZCOEFT,ZCOEFQ
196 REAL :: ZLMOMIN,ZLMOMAX
198 REAL :: ZDUSR0,ZDTSR0,ZDQSR0
200 REAL :: ZUTU,ZUTT,ZUTQ
201 REAL :: ZCDIRU,ZCDIRT,ZCDIRQ
202 REAL :: ZORDOU,ZORDOT,ZORDOQ
207 REAL :: ZPSI_U,ZPSI_T
208 REAL :: Z0TSEA,Z0QSEA
209 REAL :: ZCHIC,ZCHIK,ZPSIC,ZPSIK,ZLOGUS10,ZLOGTS10
210 REAL :: ZTAC,ZCPWA,ZDQSDT,ZDWAT,ZDTMP,ZBULB
213 REAL(KIND=JPRB) :: ZHOOK_HANDLE
227 IF (opcvflx) niterfl = nitermax+nitersup
229 zcoefu = (/ 1.00e-03, 3.66e-02, -1.92e-03, 2.32e-04, -7.02e-06, 6.40e-08 /)
230 zcoeft = (/ 5.36e-03, 2.90e-02, -1.24e-03, 4.50e-04, -2.06e-05, 0.0 /)
231 zcoefq = (/ 1.00e-03, 3.59e-02, -2.87e-04, 0.0, 0.0, 0.0 /)
237 zcdiru = zcoefu(1) + 2.0*zcoefu(2)*zutu + 3.0*zcoefu(3)*zutu**2 &
238 + 4.0*zcoefu(4)*zutu**3 + 5.0*zcoefu(5)*zutu**4
239 zcdirt = zcoeft(1) + 2.0*zcoeft(2)*zutt + 3.0*zcoeft(3)*zutt**2 &
240 + 4.0*zcoeft(4)*zutt**3
241 zcdirq = zcoefq(1) + 2.0*zcoefq(2)*zutq
243 zordou = zcoefu(0) + zcoefu(1)*zutu + zcoefu(2)*zutu**2 + zcoefu(3)*zutu**3 &
244 + zcoefu(4)*zutu**4 + zcoefu(5)*zutu**5
245 zordot = zcoeft(0) + zcoeft(1)*zutt + zcoeft(2)*zutt**2 + zcoeft(3)*zutt**3 &
247 zordoq = zcoefq(0) + zcoefq(1)*zutq + zcoefq(2)*zutq**2
300 WHERE(psss(:)>0.0.AND.psss(:)/=
xundef)
305 zqsata(:) =
qsat(pta(:),ppa(:))
310 zdt(:) = pta(:)/pexna(:)-psst(:)/pexns(:)
311 zdq(:) = pqa(:)-pqsat(:)
317 WHERE(psss(:)>0.0.AND.psss(:)/=
xundef)
318 zlvs(:) = zlvs(:)*(1.0-1.00472e-3*psss(:))
328 zvisa(:) = 1.326e-05*(1.0+6.542e-03*(pta(:)-
xtt)+8.301e-06*(pta(:)-
xtt)**2 &
329 -4.84e-09*(pta(:)-
xtt)**3)
338 zddu(:) = sign(max(abs(zddu(:)),10.0*zdusr0),zddu(:))
339 zddt(:) = sign(max(abs(zddt(:)),10.0*zdtsr0),zddt(:))
340 zddq(:) = sign(max(abs(zddq(:)),10.0*zdqsr0),zddq(:))
343 zusr(:) = 0.04*zddu(:)
344 ztsr(:) = 0.04*zddt(:)
345 zqsr(:) = 0.04*zddq(:)
346 zdeltau10n(:) = zddu(:)
347 zdeltat10n(:) = zddt(:)
348 zdeltaq10n(:) = zddq(:)
361 IF (jcv(jlon) == -1)
THEN 362 zusr0(jlon)=zusr(jlon)
363 ztsr0(jlon)=ztsr(jlon)
364 zqsr0(jlon)=zqsr(jlon)
365 IF (jj == nitermax+1 .OR. jj == nitermax+nitersup)
THEN 366 zdeltau10n(jlon) = 0.5*(zdusto(jlon)+zdeltau10n(jlon))
367 zdeltat10n(jlon) = 0.5*(zdtsto(jlon)+zdeltat10n(jlon))
368 zdeltaq10n(jlon) = 0.5*(zdqsto(jlon)+zdeltaq10n(jlon))
369 IF (jj == nitermax+nitersup) jcv(jlon)=3
371 zdusto(jlon) = zdeltau10n(jlon)
372 zdtsto(jlon) = zdeltat10n(jlon)
373 zdqsto(jlon) = zdeltaq10n(jlon)
377 IF (zdeltau10n(jlon) <= zutu)
THEN 378 zparun(jlon) = zcoefu(0) + zcoefu(1)*zdeltau10n(jlon) &
379 + zcoefu(2)*zdeltau10n(jlon)**2 &
380 + zcoefu(3)*zdeltau10n(jlon)**3 &
381 + zcoefu(4)*zdeltau10n(jlon)**4 &
382 + zcoefu(5)*zdeltau10n(jlon)**5
384 zparun(jlon) = zcdiru*(zdeltau10n(jlon)-zutu) + zordou
386 pcdn(jlon) = (zparun(jlon)/zdeltau10n(jlon))**2
390 IF (zdeltau10n(jlon) <= zutt)
THEN 391 zpartn(jlon) = zcoeft(0) + zcoeft(1)*zdeltau10n(jlon) &
392 + zcoeft(2)*zdeltau10n(jlon)**2 &
393 + zcoeft(3)*zdeltau10n(jlon)**3 &
394 + zcoeft(4)*zdeltau10n(jlon)**4
396 zpartn(jlon) = zcdirt*(zdeltau10n(jlon)-zutt) + zordot
401 IF (zdeltau10n(jlon) <= zutq)
THEN 402 zparqn(jlon) = zcoefq(0) + zcoefq(1)*zdeltau10n(jlon) &
403 + zcoefq(2)*zdeltau10n(jlon)**2
405 zparqn(jlon) = zcdirq*(zdeltau10n(jlon)-zutq) + zordoq
410 zusr(jlon) = zparun(jlon)
411 ztsr(jlon) = zpartn(jlon)*zdeltat10n(jlon)/zdeltau10n(jlon)
412 zqsr(jlon) = zparqn(jlon)*zdeltaq10n(jlon)/zdeltau10n(jlon)
421 zlmou = puref(jlon)*
xg*
xkarman*(ztsr(jlon)/pta(jlon) &
422 +zetv*zqsr(jlon)/(1.0+zetv*pqa(jlon)))/zusr(jlon)**2
424 zlmot = zlmou*(pzref(jlon)/puref(jlon))
425 zlmou = max(min(zlmou,zlmomax),zlmomin)
426 zlmot = max(min(zlmot,zlmomax),zlmomin)
432 IF (zlmou == 0.0)
THEN 434 ELSEIF (zlmou > 0.0)
THEN 437 zchik = (1.0-zbta*zlmou)**0.25
438 zpsik = 2.0*log((1.0+zchik)/2.0) &
439 +log((1.0+zchik**2)/2.0) &
440 -2.0*atan(zchik)+0.5*
xpi 441 zchic = (1.0-12.87*zlmou)**(1.0/3.0)
442 zpsic = 1.5*log((zchic**2+zchic+1.0)/3.0) &
443 -zsqr3*atan((2.0*zchic+1.0)/zsqr3) &
445 zpsi_u = zpsic+(zpsik-zpsic)/(1.0+zlmou**2)
449 IF (zlmot == 0.0)
THEN 451 ELSEIF (zlmot > 0.0)
THEN 454 zchik = (1.0-zbta*zlmot)**0.25
455 zpsik = 2.0*log((1.0+zchik**2)/2.0)
456 zchic = (1.0-12.87*zlmot)**(1.0/3.0)
457 zpsic = 1.5*log((zchic**2+zchic+1.0)/3.0) &
458 -zsqr3*atan((2.0*zchic+1.0)/zsqr3) &
460 zpsi_t = zpsic+(zpsik-zpsic)/(1.0+zlmot**2)
466 zddu(jlon) = zdu(jlon)
467 zddt(jlon) = zdt(jlon)
468 zddq(jlon) = zdq(jlon)
469 zddu(jlon) = sign(max(abs(zddu(jlon)),10.0*zdusr0),zddu(jlon))
470 zddt(jlon) = sign(max(abs(zddt(jlon)),10.0*zdtsr0),zddt(jlon))
471 zddq(jlon) = sign(max(abs(zddq(jlon)),10.0*zdqsr0),zddq(jlon))
472 zlogus10 = log(puref(jlon)/10.0)
473 zlogts10 = log(pzref(jlon)/10.0)
474 zdeltau10n(jlon) = zddu(jlon)-zusr(jlon)*(zlogus10-zpsi_u)/
xkarman 475 zdeltat10n(jlon) = zddt(jlon)-ztsr(jlon)*(zlogts10-zpsi_t)/
xkarman 476 zdeltaq10n(jlon) = zddq(jlon)-zqsr(jlon)*(zlogts10-zpsi_t)/
xkarman 477 zdeltau10n(jlon) = sign(max(abs(zdeltau10n(jlon)),10.0*zdusr0), &
479 zdeltat10n(jlon) = sign(max(abs(zdeltat10n(jlon)),10.0*zdtsr0), &
481 zdeltaq10n(jlon) = sign(max(abs(zdeltaq10n(jlon)),10.0*zdqsr0), &
486 IF (abs(zusr(jlon)-zusr0(jlon)) < zdusr0 .AND. &
487 abs(ztsr(jlon)-ztsr0(jlon)) < zdtsr0 .AND. &
488 abs(zqsr(jlon)-zqsr0(jlon)) < zdqsr0)
THEN 490 IF (jj >= nitermax+1) jcv(jlon) = 2
508 ztau(jlon) = -prhoa(jlon)*zusr(jlon)**2
509 zhf(jlon) = -prhoa(jlon)*zcpa(jlon)*zusr(jlon)*ztsr(jlon)
510 zef(jlon) = -prhoa(jlon)*zlvs(jlon)*zusr(jlon)*zqsr(jlon)
514 pcd(jlon) = (zusr(jlon)/zddu(jlon))**2
515 pch(jlon) = (zusr(jlon)*ztsr(jlon))/(zddu(jlon)*zddt(jlon))
516 pce(jlon) = (zusr(jlon)*zqsr(jlon))/(zddu(jlon)*zddq(jlon))
521 ztau(jlon) = ztau(jlon)* ( 1. + ppertflux(jlon) / 2. )
522 zhf(jlon) = zhf(jlon)* ( 1. + ppertflux(jlon) / 2. )
523 zef(jlon) = zef(jlon)* ( 1. + ppertflux(jlon) / 2. )
540 ztaur(jlon) = -0.85*prain(jlon)*pvmod(jlon)
550 zcpwa = 4217.51 -3.65566*ztac +0.1381*ztac**2 &
551 -2.8309e-03*ztac**3 +3.42061e-05*ztac**4 &
552 -2.18107e-07*ztac**5 +5.74535e-10*ztac**6
553 zdqsdt = (zlva(jlon)*zqsata(jlon))/(
xrv*pta(jlon)**2)
554 zdwat = 2.11e-05*(zp00/ppa(jlon))*(pta(jlon)/
xtt)**1.94
555 zdtmp = (1.0+3.309e-03*ztac-1.44e-06*ztac**2) &
556 *0.02411/(prhoa(jlon)*zcpa(jlon))
557 zbulb = 1.0/(1.0+zdqsdt*(zlva(jlon)*zdwat)/(zcpa(jlon)*zdtmp))
558 zrf(jlon) = prain(jlon)*zcpwa*zbulb*((psst(jlon)-pta(jlon)) &
559 +(pqsat(jlon)-pqa(jlon))*(zlva(jlon)*zdwat)/(zcpa(jlon)*zdtmp))
572 zww = (1.0+zetv)*(zusr(jlon)*zqsr(jlon)) &
573 +(1.0+(1.0+zetv)*pqa(jlon))*(zusr(jlon)*ztsr(jlon))/pta(jlon)
574 zefwebb(jlon) = -prhoa(jlon)*zlvs(jlon)*zww*pqa(jlon)
585 CALL surface_ri(psst,pqsat,pexns,pexna,pta,pqa, &
586 pzref,puref,zdircoszw,pvmod,pri)
590 zustar2(:) = -(ztau(:)+ztaur(:))/prhoa(:)
593 pcd(:) = zustar2(:)/zddu(:)**2
596 pustar(:) = sqrt(zustar2(:))
600 zac(:) = pch(:)*zddu(:)
601 presa(:) = 1.0/zac(:)
605 psfth(:) = zhf(:)+zrf(:)
606 psftq(:) = (zef(:)+zefwebb(:))/zlvs(:)
613 zcharn(:) = min(0.018,max(0.011,0.011+(0.007/8.0)*(zddu(:)-10.0)))
619 pz0sea(:) = (zcharn(:)/
xg)*zustar2(:) +
xvz0cm*pcd(:)/pcdn(:)
620 pz0hsea(:) = pz0sea(:)
621 ELSEIF (kz0 == 1)
THEN 622 pz0sea(:) = (zcharn(:)/
xg)*zustar2(:) + 0.11*zvisa(:)/pustar(:)
623 pz0hsea(:) = pz0sea(:)
624 ELSEIF (kz0 == 2)
THEN 626 pz0sea(jlon) = puref(jlon)/exp(
xkarman*zddu(jlon)/pustar(jlon)+zpsiu(jlon))
627 z0tsea = pzref(jlon)/exp(
xkarman*zddt(jlon)/ztsr(jlon)+zpsit(jlon))
628 z0qsea = pzref(jlon)/exp(
xkarman*zddq(jlon)/zqsr(jlon)+zpsit(jlon))
629 pz0hsea(jlon) = 0.5*(z0tsea+z0qsea)
real function, dimension(size(pwind)) wind_threshold(PWIND, PUREF)
subroutine surface_ri(PTG, PQS, PEXNS, PEXNA, PTA, PQA, PZREF, PUREF, PDIRCOSZW, PVMOD, PRI)
character(len=3) ccharnock
subroutine ecumev6_flux(PZ0SEA, PTA, PEXNA, PRHOA, PSST, PSSS, PEXNS, PQA, PVMOD, PZREF, PUREF, PPS, PPA, PICHCE, OPRECIP, OPWEBB, PQSAT, PSFTH, PSFTQ, PUSTAR, PCD, PCDN, PCH, PCE, PRI, PRESA, PRAIN, KZ0, PZ0HSEA, OPERTFLUX, PPERTFLUX)