7 hprogram, hcoupling, ptimec, &
8 ptstep, kyear, kmonth, kday, ptime, ki, ksv, ksw, ptsun, pzenith, pzenith2, &
9 pazim, pzref, puref, pu, pv, pqa, pta, prhoa, psv, pco2, hsv, &
10 prain, psnow, plw, pdir_sw, psca_sw, psw_bands, pps, ppa, &
11 psftq, psfth, psfts, psfco2, psfu, psfv, &
12 ptrad, pdir_alb, psca_alb, pemis, ptsurf, pz0, pz0h, pqsurf, &
13 ppew_a_coef, ppew_b_coef, &
14 ppet_a_coef, ppeq_a_coef, ppet_b_coef, ppeq_b_coef, &
56 USE modd_csts, ONLY : xrd, xcpd, xp00, xtt, xday, xtts
63 USE modi_add_forecast_to_date_surf
64 USE modi_diag_inline_watflux_n
68 USE modi_update_rad_water
69 USE modi_interpol_ts_water_mth
75 USE yomhook
,ONLY : lhook, dr_hook
76 USE parkind1
,ONLY : jprb
80 USE modi_coupling_iceflux_n
88 TYPE(dst_t),
INTENT(INOUT) :: dst
89 TYPE(slt_t),
INTENT(INOUT) :: slt
91 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
92 CHARACTER(LEN=1),
INTENT(IN) :: hcoupling
95 REAL,
INTENT(IN) :: ptimec
96 INTEGER,
INTENT(IN) :: kyear
97 INTEGER,
INTENT(IN) :: kmonth
98 INTEGER,
INTENT(IN) :: kday
99 REAL,
INTENT(IN) :: ptime
100 INTEGER,
INTENT(IN) :: ki
101 INTEGER,
INTENT(IN) :: ksv
102 INTEGER,
INTENT(IN) :: ksw
103 REAL,
DIMENSION(KI),
INTENT(IN) :: ptsun
104 REAL,
INTENT(IN) :: ptstep
105 REAL,
DIMENSION(KI),
INTENT(IN) :: pzref
106 REAL,
DIMENSION(KI),
INTENT(IN) :: puref
108 REAL,
DIMENSION(KI),
INTENT(IN) :: pta
109 REAL,
DIMENSION(KI),
INTENT(IN) :: pqa
110 REAL,
DIMENSION(KI),
INTENT(IN) :: prhoa
111 REAL,
DIMENSION(KI,KSV),
INTENT(IN) :: psv
114 CHARACTER(LEN=6),
DIMENSION(KSV),
INTENT(IN):: hsv
115 REAL,
DIMENSION(KI),
INTENT(IN) :: pu
116 REAL,
DIMENSION(KI),
INTENT(IN) :: pv
117 REAL,
DIMENSION(KI,KSW),
INTENT(IN) :: pdir_sw
119 REAL,
DIMENSION(KI,KSW),
INTENT(IN) :: psca_sw
121 REAL,
DIMENSION(KSW),
INTENT(IN) :: psw_bands
122 REAL,
DIMENSION(KI),
INTENT(IN) :: pzenith
123 REAL,
DIMENSION(KI),
INTENT(IN) :: pzenith2
124 REAL,
DIMENSION(KI),
INTENT(IN) :: pazim
125 REAL,
DIMENSION(KI),
INTENT(IN) :: plw
127 REAL,
DIMENSION(KI),
INTENT(IN) :: pps
128 REAL,
DIMENSION(KI),
INTENT(IN) :: ppa
129 REAL,
DIMENSION(KI),
INTENT(IN) :: pco2
130 REAL,
DIMENSION(KI),
INTENT(IN) :: psnow
131 REAL,
DIMENSION(KI),
INTENT(IN) :: prain
134 REAL,
DIMENSION(KI),
INTENT(OUT) :: psfth
135 REAL,
DIMENSION(KI),
INTENT(OUT) :: psftq
136 REAL,
DIMENSION(KI),
INTENT(OUT) :: psfu
137 REAL,
DIMENSION(KI),
INTENT(OUT) :: psfv
138 REAL,
DIMENSION(KI),
INTENT(OUT) :: psfco2
139 REAL,
DIMENSION(KI,KSV),
INTENT(OUT):: psfts
141 REAL,
DIMENSION(KI),
INTENT(OUT) :: ptrad
142 REAL,
DIMENSION(KI,KSW),
INTENT(OUT):: pdir_alb
143 REAL,
DIMENSION(KI,KSW),
INTENT(OUT):: psca_alb
144 REAL,
DIMENSION(KI),
INTENT(OUT) :: pemis
146 REAL,
DIMENSION(KI),
INTENT(OUT) :: ptsurf
147 REAL,
DIMENSION(KI),
INTENT(OUT) :: pz0
148 REAL,
DIMENSION(KI),
INTENT(OUT) :: pz0h
149 REAL,
DIMENSION(KI),
INTENT(OUT) :: pqsurf
151 REAL,
DIMENSION(KI),
INTENT(IN) :: ppew_a_coef
152 REAL,
DIMENSION(KI),
INTENT(IN) :: ppew_b_coef
153 REAL,
DIMENSION(KI),
INTENT(IN) :: ppet_a_coef
154 REAL,
DIMENSION(KI),
INTENT(IN) :: ppeq_a_coef
155 REAL,
DIMENSION(KI),
INTENT(IN) :: ppet_b_coef
156 REAL,
DIMENSION(KI),
INTENT(IN) :: ppeq_b_coef
157 CHARACTER(LEN=2),
INTENT(IN) :: htest
161 REAL,
DIMENSION(KI) :: zexna
162 REAL,
DIMENSION(KI) :: zexns
163 REAL,
DIMENSION(KI) :: zwind
164 REAL,
DIMENSION(KI) :: zcd
165 REAL,
DIMENSION(KI) :: zcdn
166 REAL,
DIMENSION(KI) :: zch
167 REAL,
DIMENSION(KI) :: zri
168 REAL,
DIMENSION(KI) :: zhu
169 REAL,
DIMENSION(KI) :: zresa_water
170 REAL,
DIMENSION(KI) :: zustar
171 REAL,
DIMENSION(KI) :: zustar2
172 REAL,
DIMENSION(KI) :: zz0h
173 REAL,
DIMENSION(KI) :: zqsat
174 REAL,
DIMENSION(KI) :: zqa
175 REAL,
DIMENSION(KI) :: zemis
176 REAL,
DIMENSION(KI) :: ztrad
177 REAL,
DIMENSION(KI) :: zsfth_ice
178 REAL,
DIMENSION(KI) :: zsftq_ice
179 REAL,
DIMENSION(KI) :: zwork
181 REAL,
DIMENSION(KI,KSW) :: zdir_alb
182 REAL,
DIMENSION(KI,KSW) :: zsca_alb
184 REAL :: zconvertfacm0_slt, zconvertfacm0_dst
185 REAL :: zconvertfacm3_slt, zconvertfacm3_dst
186 REAL :: zconvertfacm6_slt, zconvertfacm6_dst
191 LOGICAL :: ghandle_sic = .false.
193 REAL(KIND=JPRB) :: zhook_handle
198 IF (lhook) CALL dr_hook(
'COUPLING_WATFLUX_N',0,zhook_handle)
199 IF (htest/=
'OK')
THEN
200 CALL
abor1_sfx(
'COUPLING_WATFLUXN: FATAL ERROR DURING ARGUMENT TRANSFER')
212 zresa_water(:) = xundef
220 zdir_alb(:,:) = xundef
221 zsca_alb(:,:) = xundef
224 zsftq_ice(:) = xundef
225 zsfth_ice(:) = xundef
230 zexns(:) = (pps(:)/xp00)**(xrd/xcpd)
231 zexna(:) = (ppa(:)/xp00)**(xrd/xcpd)
233 zwind(:) = sqrt(pu(:)**2+pv(:)**2)
239 zqa(:) = pqa(:) / prhoa(:)
245 wm%W%TTIME%TIME = wm%W%TTIME%TIME + ptstep
253 CALL
water_flux(wm%W%XZ0, pta, zexna, prhoa, wm%W%XTS, zexns, zqa, prain, &
254 psnow, xtt, zwind, pzref, puref, pps, ghandle_sic, &
255 zqsat, psfth, psftq, zustar, zcd, zcdn, zch, zri, &
262 iswb =
SIZE(psw_bands)
265 zdir_alb(:,jswb) = wm%W%XDIR_ALB(:)
266 zsca_alb(:,jswb) = wm%W%XSCA_ALB(:)
279 zqa, prain, psnow, zwind, pzref, puref, &
280 pps, wm%W%XTS, xtt, zsfth_ice, zsftq_ice )
288 IF (wm%CHW%SVW%NBEQ>0)
THEN
289 IF (wm%CHW%CCH_DRY_DEP ==
"WES89")
THEN
291 psv(:,wm%CHW%SVW%NSV_CHSBEG:wm%CHW%SVW%NSV_CHSEND), &
292 wm%CHW%SVW%CSV(wm%CHW%SVW%NSV_CHSBEG:wm%CHW%SVW%NSV_CHSEND), &
293 wm%CHW%XDEP(:,1:wm%CHW%SVW%NBEQ) )
295 psfts(:,wm%CHW%SVW%NSV_CHSBEG:wm%CHW%SVW%NSV_CHSEND) = - psv(:,wm%CHW%SVW%NSV_CHSBEG:wm%CHW%SVW%NSV_CHSEND) &
296 * wm%CHW%XDEP(:,1:wm%CHW%SVW%NBEQ)
297 IF (wm%CHW%SVW%NAEREQ > 0 )
THEN
298 CALL
ch_aer_dep(psv(:,wm%CHW%SVW%NSV_AERBEG:wm%CHW%SVW%NSV_AEREND),&
299 psfts(:,wm%CHW%SVW%NSV_AERBEG:wm%CHW%SVW%NSV_AEREND),&
300 zustar,zresa_water,pta,prhoa)
304 psfts(:,wm%CHW%SVW%NSV_CHSBEG:wm%CHW%SVW%NSV_CHSEND) =0.
305 IF(wm%CHW%SVW%NSV_AERBEG.LT.wm%CHW%SVW%NSV_AEREND) psfts(:,wm%CHW%SVW%NSV_AERBEG:wm%CHW%SVW%NSV_AEREND) =0.
309 IF (wm%CHW%SVW%NDSTEQ>0)
THEN
310 CALL
dslt_dep(psv(:,wm%CHW%SVW%NSV_DSTBEG:wm%CHW%SVW%NSV_DSTEND), psfts(:,wm%CHW%SVW%NSV_DSTBEG:wm%CHW%SVW%NSV_DSTEND), &
311 zustar, zresa_water, pta, prhoa, dst%XEMISSIG_DST, dst%XEMISRADIUS_DST, &
312 jpmode_dst, xdensity_dst, xmolarweight_dst, zconvertfacm0_dst, &
313 zconvertfacm6_dst, zconvertfacm3_dst, lvarsig_dst, lrgfix_dst, &
317 psfts(:,wm%CHW%SVW%NSV_DSTBEG:wm%CHW%SVW%NSV_DSTEND), &
319 dst%XEMISRADIUS_DST, &
325 lvarsig_dst, lrgfix_dst )
328 IF (wm%CHW%SVW%NSLTEQ>0)
THEN
329 CALL
dslt_dep(psv(:,wm%CHW%SVW%NSV_SLTBEG:wm%CHW%SVW%NSV_SLTEND), psfts(:,wm%CHW%SVW%NSV_SLTBEG:wm%CHW%SVW%NSV_SLTEND), &
330 zustar, zresa_water, pta, prhoa, slt%XEMISSIG_SLT, slt%XEMISRADIUS_SLT, &
331 jpmode_slt, xdensity_slt, xmolarweight_slt, zconvertfacm0_slt, &
332 zconvertfacm6_slt, zconvertfacm3_slt, lvarsig_slt, lrgfix_slt, &
336 psfts(:,wm%CHW%SVW%NSV_SLTBEG:wm%CHW%SVW%NSV_SLTEND), &
338 slt%XEMISRADIUS_SLT, &
344 lvarsig_slt, lrgfix_slt )
353 IF(cimplicit_wind==
'OLD')
THEN
355 zustar2(:) = (zcd(:)*zwind(:)*ppew_b_coef(:)) / &
356 (1.0-prhoa(:)*zcd(:)*zwind(:)*ppew_a_coef(:))
359 zustar2(:) = (zcd(:)*zwind(:)*(2.*ppew_b_coef(:)-zwind(:))) /&
360 (1.0-2.0*prhoa(:)*zcd(:)*zwind(:)*ppew_a_coef(:))
362 zwork(:) = prhoa(:)*ppew_a_coef(:)*zustar2(:) + ppew_b_coef(:)
363 zwork(:) = max(zwork(:),0.)
365 WHERE(ppew_a_coef(:)/= 0.)
366 zustar2(:) = max( ( zwork(:) - ppew_b_coef(:) ) / (prhoa(:)*ppew_a_coef(:)), 0.)
374 psfu(:) = - prhoa(:) * zustar2(:) * pu(:) / zwind(:)
375 psfv(:) = - prhoa(:) * zustar2(:) * pv(:) / zwind(:)
387 ptstep,pta, zqa, ppa, pps, prhoa, pu, pv, pzref, &
388 puref, zcd, zcdn, zch, zri, zhu, zz0h, zqsat, &
389 psfth, psftq, psfu, psfv, pdir_sw, psca_sw, plw, &
390 zdir_alb, zsca_alb, zemis, ztrad, prain, psnow, &
391 zsfth_ice, zsftq_ice )
397 IF (wm%W%LINTERPOL_TS.AND.mod(wm%W%TTIME%TIME,xday) == 0.)
THEN
399 wm%W%TTIME%TDATE%YEAR,wm%W%TTIME%TDATE%MONTH,wm%W%TTIME%TDATE%DAY,wm%W%XTS)
408 ptsurf(:) = wm%W%XTS (:)
409 pz0(:) = wm%W%XZ0 (:)
418 CALL
update_rad_water(wm%W%CWAT_ALB,wm%W%XTS,pzenith2,xtt,wm%W%XEMIS,wm%W%XDIR_ALB, &
419 wm%W%XSCA_ALB,pdir_alb,psca_alb,pemis,ptrad )
423 IF (lhook) CALL dr_hook(
'COUPLING_WATFLUX_N',1,zhook_handle)
subroutine coupling_watflux_n(WM, DST, SLT, HPROGRAM, HCOUPLING, PTIMEC, 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, PTRAD, 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)
subroutine update_rad_water(HALB, PSST, PZENITH, PTT, PEMIS, PDIR_ALB, PSCA_ALB, PDIR_ALB_ATMOS, PSCA_ALB_ATMOS, PEMIS_ATMOS, PTRAD)
subroutine coupling_iceflux_n(KI, PTA, PEXNA, PRHOA, PTICE, PEXNS, PQA, PRAIN, PSNOW, PWIND, PZREF, PUREF, PPS, PTWAT, PTTS, PSFTH, PSFTQ, OHANDLE_SIC, PMASK, PQSAT, PZ0, PUSTAR, PCD, PCDN, PCH, PRI, PRESA, PZ0H)
subroutine ch_aer_dep(PSVT, PFSVT, PUSTAR, PRESA, PTA, PRHODREF)
subroutine abor1_sfx(YTEXT)
subroutine interpol_ts_water_mth(W, KYEAR, KMONTH, KDAY, PTS)
subroutine massflux2momentflux(PFLUX, PRHODREF, PEMISRADIUS, PEMISSIG, KMDE, PCONVERTFACM0, PCONVERTFACM6, PCONVERTFACM3, OVARSIG, ORGFIX)
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)
subroutine diag_inline_watflux_n(DGW, W, PTSTEP, PTA, PQA, PPA, PPS, PRHOA, PZONA, PMERA, PHT, PHW, PCD, PCDN, PCH, PRI, PHU, PZ0H, PQSAT, PSFTH, PSFTQ, PSFZON, PSFMER, PDIR_SW, PSCA_SW, PLW, PDIR_ALB, PSCA_ALB, PEMIS, PTRAD, PRAIN, PSNOW, PSFTH_ICE, PSFTQ_ICE)
subroutine ch_dep_water(PRESA, PUSTAR, PTA, PTRAD, PSV, HSV, PDEP)
subroutine water_flux(PZ0SEA, PTA, PEXNA, PRHOA, PSST, PEXNS, PQA, PRR, PRS, PTT, PVMOD, PZREF, PUREF, PPS, OHANDLE_SIC, PQSAT, PSFTH, PSFTQ, PUSTAR, PCD, PCDN, PCH, PRI, PRESA, PZ0HSEA)