7 HPROGRAM, HCOUPLING, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, &
8 KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, PAZIM, PZREF, &
9 PUREF, PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV, PRAIN, &
10 PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, PSFTQ, &
11 PSFTH, PSFTS, PSFCO2, PSFU, PSFV, PTSRAD, PDIR_ALB, &
12 PSCA_ALB, PEMIS, PTSURF, PZ0, PZ0H, PQSURF, PPEW_A_COEF, &
13 PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, &
72 USE modi_add_forecast_to_date_surf
73 USE modi_diag_inline_flake_n
74 USE modi_diag_misc_flake_n
79 USE modi_update_rad_flake
81 USE modi_flake_interface
94 TYPE(
diag_t),
INTENT(INOUT) :: D
95 TYPE(
diag_t),
INTENT(INOUT) :: DC
97 TYPE(
flake_t),
INTENT(INOUT) :: F
99 TYPE(
dst_t),
INTENT(INOUT) :: DST
100 TYPE(
slt_t),
INTENT(INOUT) :: SLT
102 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
103 CHARACTER(LEN=1),
INTENT(IN) :: HCOUPLING
106 INTEGER,
INTENT(IN) :: KYEAR
107 INTEGER,
INTENT(IN) :: KMONTH
108 INTEGER,
INTENT(IN) :: KDAY
109 REAL,
INTENT(IN) :: PTIME
110 INTEGER,
INTENT(IN) :: KI
111 INTEGER,
INTENT(IN) :: KSV
112 INTEGER,
INTENT(IN) :: KSW
113 REAL,
DIMENSION(KI),
INTENT(IN) :: PTSUN
114 REAL,
INTENT(IN) :: PTSTEP
115 REAL,
DIMENSION(KI),
INTENT(IN) :: PZREF
116 REAL,
DIMENSION(KI),
INTENT(IN) :: PUREF
118 REAL,
DIMENSION(KI),
INTENT(IN) :: PTA
119 REAL,
DIMENSION(KI),
INTENT(IN) :: PQA
120 REAL,
DIMENSION(KI),
INTENT(IN) :: PRHOA
121 REAL,
DIMENSION(KI,KSV),
INTENT(IN) :: PSV
124 CHARACTER(LEN=6),
DIMENSION(KSV),
INTENT(IN):: HSV
125 REAL,
DIMENSION(KI),
INTENT(IN) :: PU
126 REAL,
DIMENSION(KI),
INTENT(IN) :: PV
127 REAL,
DIMENSION(KI,KSW),
INTENT(IN) :: PDIR_SW
129 REAL,
DIMENSION(KI,KSW),
INTENT(IN) :: PSCA_SW
131 REAL,
DIMENSION(KSW),
INTENT(IN) :: PSW_BANDS
132 REAL,
DIMENSION(KI),
INTENT(IN) :: PZENITH
133 REAL,
DIMENSION(KI),
INTENT(IN) :: PZENITH2
134 REAL,
DIMENSION(KI),
INTENT(IN) :: PAZIM
135 REAL,
DIMENSION(KI),
INTENT(IN) :: PLW
137 REAL,
DIMENSION(KI),
INTENT(IN) :: PPS
138 REAL,
DIMENSION(KI),
INTENT(IN) :: PPA
139 REAL,
DIMENSION(KI),
INTENT(IN) :: PCO2
140 REAL,
DIMENSION(KI),
INTENT(IN) :: PSNOW
141 REAL,
DIMENSION(KI),
INTENT(IN) :: PRAIN
144 REAL,
DIMENSION(KI),
INTENT(OUT) :: PSFTH
145 REAL,
DIMENSION(KI),
INTENT(OUT) :: PSFTQ
146 REAL,
DIMENSION(KI),
INTENT(OUT) :: PSFU
147 REAL,
DIMENSION(KI),
INTENT(OUT) :: PSFV
148 REAL,
DIMENSION(KI),
INTENT(OUT) :: PSFCO2
149 REAL,
DIMENSION(KI,KSV),
INTENT(OUT):: PSFTS
151 REAL,
DIMENSION(KI),
INTENT(OUT) :: PTSRAD
152 REAL,
DIMENSION(KI,KSW),
INTENT(OUT):: PDIR_ALB
153 REAL,
DIMENSION(KI,KSW),
INTENT(OUT):: PSCA_ALB
154 REAL,
DIMENSION(KI),
INTENT(OUT) :: PEMIS
156 REAL,
DIMENSION(KI),
INTENT(OUT) :: PTSURF
157 REAL,
DIMENSION(KI),
INTENT(OUT) :: PZ0
158 REAL,
DIMENSION(KI),
INTENT(OUT) :: PZ0H
159 REAL,
DIMENSION(KI),
INTENT(OUT) :: PQSURF
161 REAL,
DIMENSION(KI),
INTENT(IN) :: PPEW_A_COEF
162 REAL,
DIMENSION(KI),
INTENT(IN) :: PPEW_B_COEF
163 REAL,
DIMENSION(KI),
INTENT(IN) :: PPET_A_COEF
164 REAL,
DIMENSION(KI),
INTENT(IN) :: PPEQ_A_COEF
165 REAL,
DIMENSION(KI),
INTENT(IN) :: PPET_B_COEF
166 REAL,
DIMENSION(KI),
INTENT(IN) :: PPEQ_B_COEF
167 CHARACTER(LEN=2),
INTENT(IN) :: HTEST
171 REAL,
DIMENSION(KI,KSW) :: ZDIR_ALB
172 REAL,
DIMENSION(KI,KSW) :: ZSCA_ALB
174 REAL,
DIMENSION(KI) :: ZALB
175 REAL,
DIMENSION(KI) :: ZSWE
177 REAL,
DIMENSION(KI) :: ZEXNA
178 REAL,
DIMENSION(KI) :: ZEXNS
180 REAL,
DIMENSION(KI) :: ZWIND
181 REAL,
DIMENSION(KI) :: ZGLOBAL_SW
182 REAL,
DIMENSION(KI) :: ZQA
184 REAL,
DIMENSION(KI) :: ZUSTAR
185 REAL,
DIMENSION(KI) :: ZUSTAR2
186 REAL,
DIMENSION(KI) :: ZSFM
188 REAL,
DIMENSION(KI) :: ZRESA_WATER
192 REAL,
DIMENSION(KI) :: ZCD
193 REAL,
DIMENSION(KI) :: ZCDN
194 REAL,
DIMENSION(KI) :: ZCH
195 REAL,
DIMENSION(KI) :: ZCE
196 REAL,
DIMENSION(KI) :: ZRI
197 REAL,
DIMENSION(KI) :: ZHU
198 REAL,
DIMENSION(KI) :: ZZ0H
199 REAL,
DIMENSION(KI) :: ZQSAT
200 REAL,
DIMENSION(KI) :: ZTSTEP
201 REAL,
DIMENSION(KI) :: ZLE
202 REAL,
DIMENSION(KI) :: ZLEI
203 REAL,
DIMENSION(KI) :: ZSUBL
204 REAL,
DIMENSION(KI) :: ZLWUP
205 REAL,
DIMENSION(KI) :: ZTRAD
206 REAL,
DIMENSION(KI) :: ZWORK
208 REAL :: ZCONVERTFACM0_SLT, ZCONVERTFACM0_DST
209 REAL :: ZCONVERTFACM3_SLT, ZCONVERTFACM3_DST
210 REAL :: ZCONVERTFACM6_SLT, ZCONVERTFACM6_DST
217 LOGICAL :: GPWG = .false.
218 LOGICAL :: GHANDLE_SIC = .false.
222 INTEGER :: IBEG, IEND
224 REAL(KIND=JPRB) :: ZHOOK_HANDLE
228 IF (
lhook)
CALL dr_hook(
'COUPLING_FLAKE_N',0,zhook_handle)
229 IF (htest/=
'OK')
THEN 230 CALL abor1_sfx(
'COUPLING_FLAKEN: FATAL ERROR DURING ARGUMENT TRANSFER')
262 zwind(:) = sqrt(pu(:)**2+pv(:)**2)
264 zqa(:) = pqa(:)/prhoa(:)
274 f%TTIME%TIME = f%TTIME%TIME + ptstep
283 IF (f%CFLK_FLUX==
'DEF ')
THEN 285 CALL water_flux(f%XZ0, pta, zexna, prhoa, f%XTS, zexns, pqa, &
286 prain, psnow,
xtt, zwind, pzref, puref, &
287 pps, ghandle_sic, zqsat, psfth, psftq, zustar,&
288 zcd, zcdn, zch, zri, zresa_water, zz0h )
291 zle(:) = psftq(:) *
xlstt 292 zlei(:) = psftq(:) *
xlstt 295 zle(:) = psftq(:) *
xlvtt 302 zustar2(:) = (zcd(:)*zwind(:)*ppew_b_coef(:))/ &
303 (1.0-prhoa(:)*zcd(:)*zwind(:)*ppew_a_coef(:))
306 zustar2(:) = (zcd(:)*zwind(:)*(2.*ppew_b_coef(:)-zwind(:))) /&
307 (1.0-2.0*prhoa(:)*zcd(:)*zwind(:)*ppew_a_coef(:))
309 zwork(:) = prhoa(:)*ppew_a_coef(:)*zustar2(:) + ppew_b_coef(:)
310 zwork(:) = max(zwork(:),0.)
312 WHERE(ppew_a_coef(:)/= 0.)
313 zustar2(:) = max( ( zwork(:) - ppew_b_coef(:) ) / (prhoa(:)*ppew_a_coef(:)), 0.)
319 zsfm(:) = - prhoa(:) * zustar2(:)
320 psfu(:) = zsfm(:) * pu(:) / zwind(:)
321 psfv(:) = zsfm(:) * pv(:) / zwind(:)
325 zustar(:) = f%XUSTAR(:)
333 iswb =
SIZE(psw_bands)
336 zdir_alb(:,jswb) = f%XDIR_ALB(:)
337 zsca_alb(:,jswb) = f%XSCA_ALB(:)
342 CALL flake_albedo(pdir_sw,psca_sw,ksw,zdir_alb,zsca_alb,zglobal_sw,zalb)
346 psnow, zglobal_sw, plw, puref, pzref, zwind, pta, zqa, pps, &
352 psfth, zle, zsfm, zz0h, zqsat, zri, zustar, &
353 zcd, psftq, zlei, zsubl, zlwup, zswe, &
361 IF (f%CFLK_FLUX==
'FLAKE')
THEN 365 psfu(:) = zsfm(:) * pu(:) / zwind(:)
366 psfv(:) = zsfm(:) * pv(:) / zwind(:)
371 zustar(:) = sqrt(abs(zsfm(:))/prhoa(:))
376 zresa_water(:) =
xcpd * prhoa(:) * (f%XTS(:) - pta(:) * zexns(:)/zexna(:)) &
377 / (psfth(:) * zexns(:))
382 f%XUSTAR(:) = zustar(:)
394 IF (chf%SVF%NBEQ>0)
THEN 396 IF (chf%CCH_DRY_DEP ==
"WES89")
THEN 398 ibeg = chf%SVF%NSV_CHSBEG
399 iend = chf%SVF%NSV_CHSEND
401 CALL ch_dep_water (zresa_water, zustar, pta, ztrad, psv(:,ibeg:iend), &
402 chf%SVF%CSV(ibeg:iend), chf%XDEP(:,1:chf%SVF%NBEQ) )
404 psfts(:,ibeg:iend) = - psv(:,ibeg:iend) * chf%XDEP(:,1:chf%SVF%NBEQ)
406 IF (chf%SVF%NAEREQ > 0 )
THEN 407 ibeg = chf%SVF%NSV_AERBEG
408 iend = chf%SVF%NSV_AEREND
410 CALL ch_aer_dep(psv(:,ibeg:iend),psfts(:,ibeg:iend),zustar,zresa_water,pta,prhoa)
414 ibeg = chf%SVF%NSV_AERBEG
415 iend = chf%SVF%NSV_AEREND
417 psfts(:,ibeg:iend) =0.
418 IF(ibeg.LT.iend) psfts(:,ibeg:iend) =0.
423 IF (chf%SVF%NDSTEQ>0)
THEN 425 ibeg = chf%SVF%NSV_DSTBEG
426 iend = chf%SVF%NSV_DSTEND
428 CALL dslt_dep(psv(:,ibeg:iend), psfts(:,ibeg:iend), zustar, zresa_water, pta, prhoa, &
430 xmolarweight_dst, zconvertfacm0_dst, zconvertfacm6_dst, zconvertfacm3_dst, &
434 psfts(:,ibeg:iend), &
436 dst%XEMISRADIUS_DST, &
446 IF (chf%SVF%NSLTEQ>0)
THEN 448 ibeg = chf%SVF%NSV_SLTBEG
449 iend = chf%SVF%NSV_SLTEND
451 CALL dslt_dep(psv(:,ibeg:iend), psfts(:,ibeg:iend), zustar, zresa_water, pta, prhoa, &
453 xmolarweight_slt, zconvertfacm0_slt, zconvertfacm6_slt, zconvertfacm3_slt, &
457 psfts(:,ibeg:iend), &
459 slt%XEMISRADIUS_SLT, &
473 IF (f%CFLK_FLUX==
'FLAKE')
THEN 477 WHERE (abs((f%XTS(:) - pta(:) * zexns(:)/zexna(:))) > 1.e-2 .AND. zwind(:)/=0.)
478 zch = max(zeps,psfth / (
xcpd * prhoa(:) * zwind(:) * (f%XTS(:) - pta(:) * zexns(:)/zexna(:))) * zexns(:))
481 zcdn(:) = (
xkarman/log(puref(:)/f%XZ0(:)))**2
482 zcd(:) = max(zeps,zcd(:))
487 ptstep, pta, zqa, ppa, pps, prhoa, pu, &
488 pv, pzref, puref, prain, psnow, &
489 zcd, zcdn, zch, zri, zhu, &
490 zz0h, zqsat, psfth, psftq, psfu, psfv, &
491 pdir_sw, psca_sw, plw, zdir_alb, zsca_alb, &
492 zle, zlei, zsubl, zlwup, zalb, zswe )
504 ptsurf(:) = f%XTS (:)
516 IF (
lhook)
CALL dr_hook(
'COUPLING_FLAKE_N',1,zhook_handle)
subroutine diag_misc_flake_n(DMF, F)
subroutine massflux2momentflux(PFLUX, PRHODREF, PEMISRADIUS, PEMISSIG, KMDE, PCONVERTFACM0, PCONVERTFACM6, PCONVERTFACM3, OVARSIG, ORGFIX)
character(len=3) cimplicit_wind
real, parameter xmolarweight_slt
subroutine coupling_flake_n(CHF, DGO, D, DC, DMF, F, DST, SLT, HPROGRAM, HCOUPLING, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, PAZIM, PZREF, PUREF, PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV, PRAIN, PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV, PTSRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF, PZ0, PZ0H, PQSURF, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, HTEST)
real, parameter xmolarweight_dst
real, parameter xdensity_dst
subroutine diag_inline_flake_n(DGO, D, DC, F, PTSTEP, PTA, PQA, PPA, PPS, PRHOA, PZONA, PMERA, PHT, PHW, PRAIN, PSNOW, PCD, PCDN, PCH, PRI, PHU, PZ0H, PQSAT, PSFTH, PSFTQ, PSFZON, PSFMER, PDIR_SW, PSCA_SW, PLW, PDIR_ALB, PSCA_ALB, PLE, PLEI, PSUBL, PLWUP, PALB, PSWE)
subroutine ch_aer_dep(PSVT, PFSVT, PUSTAR, PRESA, PTA, PRHODREF)
subroutine abor1_sfx(YTEXT)
subroutine water_flux(PZ0SEA,
subroutine update_rad_flake(F, PZENITH, PDIR_ALB_ATMOS, PSCA_ALB_ATMOS, PEMIS_ATMOS, PTRAD)
subroutine flake_albedo(PDIR_SW, PSCA_SW, KSW, PDIR_ALB, PSCA_ALB, PGLOBAL_SW, PALB)
subroutine dslt_dep(PSVT, PFSVT, PUSTAR, PRESA, PTA, PRHODREF, PEMISSIG, PEMISRADIUS, KPMODE, PDENSITY, PMOLARWEIGHT, PCONVERTFACM0, PCONVERTFACM6, PCONVERTFACM3, OVARSIG, ORGFIX, HVERMOD)
subroutine add_forecast_to_date_surf(KYEAR, KMONTH, KDAY, PSEC)
real, parameter xdensity_slt
subroutine ch_dep_water(PRESA, PUSTAR, PTA, PTRAD, PSV, HSV, PDEP)
subroutine flake_interface(F, KI, dMsnowdt_in, I_atm_in, Q_atm_lw_in, height_u_in, height_tq_in, U_a_in, T_a_in, q_a_in, P_a_in, del_time, albedo, Q_sensible, Q_latent, Q_momentum, z0t, Qsat, Ri, ustar, Cd_a, Q_watvap, Q_latenti, Q_sublim, Q_atm_lw_up, pswe, PPEW_A_COEF, PPEW_B_COEF, rho_a, HIMPLICIT_WIND)