6 SUBROUTINE coare30_flux (S,PZ0SEA,PTA,PEXNA,PRHOA,PSST,PEXNS,PQA, &
7 PVMOD,PZREF,PUREF,PPS,PQSAT,PSFTH,PSFTQ,PUSTAR,PCD,PCDN,PCH,PCE,PRI,&
74 USE modi_wind_threshold
94 REAL,
DIMENSION(:),
INTENT(IN) :: PTA
95 REAL,
DIMENSION(:),
INTENT(IN) :: PQA
96 REAL,
DIMENSION(:),
INTENT(IN) :: PEXNA
97 REAL,
DIMENSION(:),
INTENT(IN) :: PRHOA
98 REAL,
DIMENSION(:),
INTENT(IN) :: PVMOD
99 REAL,
DIMENSION(:),
INTENT(IN) :: PZREF
100 REAL,
DIMENSION(:),
INTENT(IN) :: PUREF
101 REAL,
DIMENSION(:),
INTENT(IN) :: PSST
102 REAL,
DIMENSION(:),
INTENT(IN) :: PEXNS
103 REAL,
DIMENSION(:),
INTENT(IN) :: PPS
104 REAL,
DIMENSION(:),
INTENT(IN) :: PRAIN
106 REAL,
DIMENSION(:),
INTENT(INOUT) :: PZ0SEA
109 REAL,
DIMENSION(:),
INTENT(OUT) :: PSFTH
110 REAL,
DIMENSION(:),
INTENT(OUT) :: PSFTQ
111 REAL,
DIMENSION(:),
INTENT(OUT) :: PUSTAR
114 REAL,
DIMENSION(:),
INTENT(OUT) :: PQSAT
115 REAL,
DIMENSION(:),
INTENT(OUT) :: PCD
116 REAL,
DIMENSION(:),
INTENT(OUT) :: PCDN
117 REAL,
DIMENSION(:),
INTENT(OUT) :: PCH
118 REAL,
DIMENSION(:),
INTENT(OUT) :: PCE
119 REAL,
DIMENSION(:),
INTENT(OUT) :: PRI
120 REAL,
DIMENSION(:),
INTENT(OUT) :: PRESA
121 REAL,
DIMENSION(:),
INTENT(OUT) :: PZ0HSEA
126 REAL,
DIMENSION(SIZE(PTA)) :: ZVMOD
127 REAL,
DIMENSION(SIZE(PTA)) :: ZPA
128 REAL,
DIMENSION(SIZE(PTA)) :: ZTA
129 REAL,
DIMENSION(SIZE(PTA)) :: ZQASAT
131 REAL,
DIMENSION(SIZE(PTA)) :: ZO
132 REAL,
DIMENSION(SIZE(PTA)) :: ZWG
134 REAL,
DIMENSION(SIZE(PTA)) :: ZDU,ZDT,ZDQ,ZDUWG
136 REAL,
DIMENSION(SIZE(PTA)) :: ZUSR
137 REAL,
DIMENSION(SIZE(PTA)) :: ZTSR
138 REAL,
DIMENSION(SIZE(PTA)) :: ZQSR
140 REAL,
DIMENSION(SIZE(PTA)) :: ZU10,ZT10
141 REAL,
DIMENSION(SIZE(PTA)) :: ZVISA
142 REAL,
DIMENSION(SIZE(PTA)) :: ZO10,ZOT10
143 REAL,
DIMENSION(SIZE(PTA)) :: ZCD,ZCT,ZCC
144 REAL,
DIMENSION(SIZE(PTA)) :: ZCD10,ZCT10
145 REAL,
DIMENSION(SIZE(PTA)) :: ZRIBU,ZRIBCU
146 REAL,
DIMENSION(SIZE(PTA)) :: ZETU,ZL10
148 REAL,
DIMENSION(SIZE(PTA)) :: ZCHARN
149 REAL,
DIMENSION(SIZE(PTA)) :: ZTWAVE,ZHWAVE,ZCWAVE,ZLWAVE
151 REAL,
DIMENSION(SIZE(PTA)) :: ZZL,ZZTL
153 REAL,
DIMENSION(SIZE(PTA)) :: ZRR
154 REAL,
DIMENSION(SIZE(PTA)) :: ZOT,ZOQ
155 REAL,
DIMENSION(SIZE(PTA)) :: ZPUZ,ZPTZ,ZPQZ
157 REAL,
DIMENSION(SIZE(PTA)) :: ZBF
159 REAL,
DIMENSION(SIZE(PTA)) :: ZTAU
160 REAL,
DIMENSION(SIZE(PTA)) :: ZHF
161 REAL,
DIMENSION(SIZE(PTA)) :: ZEF
162 REAL,
DIMENSION(SIZE(PTA)) :: ZWBAR
163 REAL,
DIMENSION(SIZE(PTA)) :: ZTAUR
164 REAL,
DIMENSION(SIZE(PTA)) :: ZRF
165 REAL,
DIMENSION(SIZE(PTA)) :: ZCHN,ZCEN
167 REAL,
DIMENSION(SIZE(PTA)) :: ZLV
169 REAL,
DIMENSION(SIZE(PTA)) :: ZTAC,ZDQSDT,ZDTMP,ZDWAT,ZALFAC
170 REAL,
DIMENSION(SIZE(PTA)) :: ZXLR
171 REAL,
DIMENSION(SIZE(PTA)) :: ZCPLW
173 REAL,
DIMENSION(SIZE(PTA)) :: ZUSTAR2
175 REAL,
DIMENSION(SIZE(PTA)) :: ZDIRCOSZW
176 REAL,
DIMENSION(SIZE(PTA)) :: ZAC
179 INTEGER,
DIMENSION(SIZE(PTA)) :: ITERMAX
181 REAL :: ZRVSRDM1,ZRDSRV,ZR2
189 REAL(KIND=JPRB) :: ZHOOK_HANDLE
232 WHERE((pta(:)*pexns(:)/pexna(:)-psst(:))==0.)
251 zqasat(:) =
qsat(zta(:),zpa(:))
256 IF (s%LPWG) zwg(:) = 0.5
266 zdt(j) = -(zta(j)/pexna(j)) + (psst(j)/pexns(j))
267 zdq(j) = pqsat(j)-pqa(j)
269 zduwg(j) = sqrt(zdu(j)**2+zwg(j)**2)
273 zu10(j) = zduwg(j)*log(zs/zo(j))/log(puref(j)/zo(j))
274 zusr(j) = 0.035*zu10(j)
275 zvisa(j) = 1.326e-5*(1.+6.542e-3*(zta(j)-
xtt)+&
276 8.301e-6*(zta(j)-
xtt)**2-4.84e-9*(zta(j)-
xtt)**3)
278 zo10(j) = zcharn(j)*zusr(j)*zusr(j)/
xg+0.11*zvisa(j)/zusr(j)
279 zcd(j) = (
xkarman/log(puref(j)/zo10(j)))**2
280 zcd10(j)= (
xkarman/log(zs/zo10(j)))**2
281 zct10(j)= zch10/sqrt(zcd10(j))
282 zot10(j)= zs/exp(
xkarman/zct10(j))
286 zct(j) =
xkarman/log(pzref(j)/zot10(j))
289 zribcu(j) = -puref(j)/(zzbl*0.004*zbetagust**3)
292 zribu(j) = -
xg*puref(j)*(zdt(j)+zrvsrdm1*zta(j)*zdq(j))/&
295 IF (zribu(j)<0.)
THEN 296 zetu(j) = zcc(j)*zribu(j)/(1.+zribu(j)/zribcu(j))
298 zetu(j) = zcc(j)*zribu(j)/(1.+27./9.*zribu(j)/zcc(j))
301 zl10(j) = puref(j)/zetu(j)
306 zusr(:) = zduwg(:)*
xkarman/(log(puref(:)/zo10(:))-
psifctu(puref(:)/zl10(:)))
307 ztsr(:) = -zdt(:)*
xkarman/(log(pzref(:)/zot10(:))-
psifctt(pzref(:)/zl10(:)))
308 zqsr(:) = -zdq(:)*
xkarman/(log(pzref(:)/zot10(:))-
psifctt(pzref(:)/zl10(:)))
314 IF (zetu(j)>50.)
THEN 321 IF (zduwg(j)>10.) zcharn(j) = 0.011 + (0.018-0.011)*(zduwg(j)-10.)/(18.-10.)
322 IF (zduwg(j)>18.) zcharn(j) = 0.018
327 zhwave(j) = 0.018*zvmod(j)*zvmod(j)*(1.+0.015*zvmod(j))
328 ztwave(j) = 0.729*zvmod(j)
329 zcwave(j) =
xg*ztwave(j)/(2.*
xpi)
330 zlwave(j) = ztwave(j)*zcwave(j)
336 DO jloop=1,maxval(itermax)
340 IF (jloop.GT.itermax(j)) cycle
342 IF (s%NGRVWAVES==0)
THEN 343 zo(j) = zcharn(j)*zusr(j)*zusr(j)/
xg + 0.11*zvisa(j)/zusr(j)
344 ELSE IF (s%NGRVWAVES==1)
THEN 345 zo(j) = (50./(2.*
xpi))*zlwave(j)*(zusr(j)/zcwave(j))**4.5 &
346 + 0.11*zvisa(j)/zusr(j)
347 ELSE IF (s%NGRVWAVES==2)
THEN 348 zo(j) = 1200.*zhwave(j)*(zhwave(j)/zlwave(j))**4.5 &
349 + 0.11*zvisa(j)/zusr(j)
352 zrr(j) = zo(j)*zusr(j)/zvisa(j)
353 zoq(j) = min(1.15e-4 , 5.5e-5/zrr(j)**0.6)
357 ( ztsr(j)*(1.+zrvsrdm1*pqa(j)) + zrvsrdm1*zta(j)*zqsr(j) ) / &
358 ( zta(j)*zusr(j)*zusr(j)*(1.+zrvsrdm1*pqa(j)) )
359 zztl(j)= zzl(j)*pzref(j)/puref(j)
373 zusr(j) = zduwg(j)*
xkarman/(log(puref(j)/zo(j)) -zpuz(j))
374 ztsr(j) = -zdt(j) *
xkarman/(log(pzref(j)/zot(j))-zptz(j))
375 zqsr(j) = -zdq(j) *
xkarman/(log(pzref(j)/zoq(j))-zpqz(j))
380 zbf(j) = -
xg/zta(j)*zusr(j)*(ztsr(j)+zrvsrdm1*zta(j)*zqsr(j))
382 zwg(j) = zbetagust*(zbf(j)*zzbl)**(1./3.)
387 zduwg(j) = sqrt(zvmod(j)**2 + zwg(j)**2)
411 pcd(j) = (zusr(j)/zduwg(j))**2.
412 pch(j) = zusr(j)*ztsr(j)/(zduwg(j)*(zta(j)*pexns(j)/pexna(j)-psst(j)))
413 pce(j) = zusr(j)*zqsr(j)/(zduwg(j)*(pqa(j)-pqsat(j)))
415 pcdn(j) = (
xkarman/log(zs/zo(j)))**2.
423 IF (abs(pcdn(j))>1.e-2)
THEN 424 write(*,*)
'pb PCDN in COARE30: ',pcdn(j)
425 write(*,*)
'point: ',j,
"/",
SIZE(pta)
426 write(*,*)
'roughness: ', zo(j)
427 write(*,*)
'ustar: ',zusr(j)
428 write(*,*)
'wind: ',zduwg(j)
429 CALL abor1_sfx(
'COARE30: PCDN too large -> no convergence')
433 ztau(j) = -prhoa(j)*zusr(j)*zusr(j)*zvmod(j)/zduwg(j)
434 zhf(j) = prhoa(j)*
xcpd*zusr(j)*ztsr(j)
435 zef(j) = prhoa(j)*zlv(j)*zusr(j)*zqsr(j)
449 zdqsdt(j)= zqasat(j) * zxlr(j) / (
xrd*zta(j)**2)
450 zdtmp(j) = (1.0 + 3.309e-3*ztac(j) -1.44e-6*ztac(j)*ztac(j)) * &
451 0.02411 / (prhoa(j)*
xcpd)
453 zdwat(j) = 2.11e-5 * (
xp00/zpa(j)) * (zta(j)/
xtt)**1.94
455 zalfac(j)= 1.0 / (1.0 + &
456 zrdsrv*zdqsdt(j)*zxlr(j)*zdwat(j)/(zdtmp(j)*
xcpd))
457 zcplw(j) = 4224.8482 + ztac(j) * &
458 ( -4.707 + ztac(j) * &
459 (0.08499 + ztac(j) * &
460 (1.2826e-3 + ztac(j) * &
461 (4.7884e-5 - 2.0027e-6* ztac(j)))))
463 zrf(j) = prain(j) * zcplw(j) * zalfac(j) * &
464 (psst(j) - zta(j) + (pqsat(j)-pqa(j))*zxlr(j)/
xcpd )
468 ztaur(j)=-0.85*(prain(j) *zvmod(j))
474 zwbar(j)=- (1./zrdsrv)*zusr(j)*zqsr(j) / (1.0+(1./zrdsrv)*pqa(j)) &
475 - zusr(j)*ztsr(j)/zta(j)
479 zustar2(j)= - (ztau(j) + ztaur(j)) / prhoa(j)
480 pustar(j) = sqrt(zustar2(j))
484 psfth(j) = zhf(j) + zrf(j)
485 psftq(j) = zef(j) / zlv(j)
497 CALL surface_ri(psst,pqsat,pexns,pexna,zta,zqasat,&
498 pzref,puref,zdircoszw,pvmod,pri )
502 zac(:) = pch(:)*zvmod(:)
507 pz0sea(:) = zcharn(:) * zustar2(:) /
xg +
xvz0cm * pcd(:) / pcdn(:)
509 pz0hsea(:) = pz0sea(:)
real function, dimension(size(pwind)) wind_threshold(PWIND, PUREF)
subroutine surface_ri(PTG, PQS, PEXNS, PEXNA, PTA, PQA, PZREF, PUREF, PDIRCOSZW, PVMOD, PRI)
subroutine abor1_sfx(YTEXT)
real, parameter xsurf_epsilon
subroutine coare30_flux(S, PZ0SEA, PTA, PEXNA, PRHOA, PSST, PEXNS, PQA, PVMOD, PZREF, PUREF, PPS, PQSAT, PSFTH, PSFTQ, PUSTAR, PCD, PCDN, PCH, PCE, PRI, PRESA, PRAIN, PZ0HSEA)