6 SUBROUTINE coupling_isba_canopy_n (DTCO, UG, U, USS, SB, NAG, CHI, NCHI, DTV, ID, NGB, GB, &
7 ISS, NISS, IG, NIG, IO, S, K, NK, NP, NPE, NDST, SLT, &
8 HPROGRAM, HCOUPLING, PTSTEP, &
9 KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, &
10 PZENITH, PZENITH2, PAZIM, PZREF, PUREF, PZS, PU, PV, &
11 PQA, PTA, PRHOA, PSV, PCO2, HSV, PRAIN, PSNOW, PLW, &
12 PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, PSFTQ, PSFTH, &
13 PSFTS, PSFCO2, PSFU, PSFV, PTRAD, PDIR_ALB, PSCA_ALB, &
14 PEMIS, PTSURF, PZ0,PZ0H, PQSURF, PPEW_A_COEF, &
15 PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, &
72 USE modi_init_isba_sbl
75 USE modi_canopy_grid_update
77 USE modi_coupling_isba_n
80 USE modi_sso_beljaars04
96 TYPE(
sso_t),
INTENT(INOUT) :: ISS
97 TYPE(
sso_np_t),
INTENT(INOUT) :: NISS
98 TYPE(
grid_t),
INTENT(INOUT) :: IG
107 TYPE(
dst_np_t),
INTENT(INOUT) :: NDST
114 TYPE(
sso_t),
INTENT(INOUT) :: USS
115 TYPE(
slt_t),
INTENT(INOUT) :: SLT
117 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
118 CHARACTER(LEN=1),
INTENT(IN) :: HCOUPLING
121 INTEGER,
INTENT(IN) :: KYEAR
122 INTEGER,
INTENT(IN) :: KMONTH
123 INTEGER,
INTENT(IN) :: KDAY
124 REAL,
INTENT(IN) :: PTIME
125 INTEGER,
INTENT(IN) :: KI
126 INTEGER,
INTENT(IN) :: KSV
127 INTEGER,
INTENT(IN) :: KSW
128 REAL,
DIMENSION(KI),
INTENT(IN) :: PTSUN
129 REAL,
INTENT(IN) :: PTSTEP
130 REAL,
DIMENSION(KI),
INTENT(IN) :: PZREF
131 REAL,
DIMENSION(KI),
INTENT(IN) :: PUREF
133 REAL,
DIMENSION(KI),
INTENT(IN) :: PTA
134 REAL,
DIMENSION(KI),
INTENT(IN) :: PQA
135 REAL,
DIMENSION(KI),
INTENT(IN) :: PRHOA
136 REAL,
DIMENSION(KI,KSV),
INTENT(IN) :: PSV
139 CHARACTER(LEN=6),
DIMENSION(KSV),
INTENT(IN):: HSV
140 REAL,
DIMENSION(KI),
INTENT(IN) :: PU
141 REAL,
DIMENSION(KI),
INTENT(IN) :: PV
142 REAL,
DIMENSION(KI,KSW),
INTENT(IN) :: PDIR_SW
144 REAL,
DIMENSION(KI,KSW),
INTENT(IN) :: PSCA_SW
146 REAL,
DIMENSION(KSW),
INTENT(IN) :: PSW_BANDS
147 REAL,
DIMENSION(KI),
INTENT(IN) :: PZENITH
148 REAL,
DIMENSION(KI),
INTENT(IN) :: PZENITH2
149 REAL,
DIMENSION(KI),
INTENT(IN) :: PAZIM
150 REAL,
DIMENSION(KI),
INTENT(IN) :: PLW
152 REAL,
DIMENSION(KI),
INTENT(IN) :: PPS
153 REAL,
DIMENSION(KI),
INTENT(IN) :: PPA
154 REAL,
DIMENSION(KI),
INTENT(IN) :: PZS
155 REAL,
DIMENSION(KI),
INTENT(IN) :: PCO2
156 REAL,
DIMENSION(KI),
INTENT(IN) :: PSNOW
157 REAL,
DIMENSION(KI),
INTENT(IN) :: PRAIN
160 REAL,
DIMENSION(KI),
INTENT(OUT) :: PSFTH
161 REAL,
DIMENSION(KI),
INTENT(OUT) :: PSFTQ
162 REAL,
DIMENSION(KI),
INTENT(OUT) :: PSFU
163 REAL,
DIMENSION(KI),
INTENT(OUT) :: PSFV
164 REAL,
DIMENSION(KI),
INTENT(OUT) :: PSFCO2
165 REAL,
DIMENSION(KI,KSV),
INTENT(OUT):: PSFTS
167 REAL,
DIMENSION(KI),
INTENT(OUT) :: PTRAD
168 REAL,
DIMENSION(KI,KSW),
INTENT(OUT):: PDIR_ALB
169 REAL,
DIMENSION(KI,KSW),
INTENT(OUT):: PSCA_ALB
170 REAL,
DIMENSION(KI),
INTENT(OUT) :: PEMIS
172 REAL,
DIMENSION(KI),
INTENT(OUT) :: PTSURF
173 REAL,
DIMENSION(KI),
INTENT(OUT) :: PZ0
174 REAL,
DIMENSION(KI),
INTENT(OUT) :: PZ0H
175 REAL,
DIMENSION(KI),
INTENT(OUT) :: PQSURF
177 REAL,
DIMENSION(KI),
INTENT(IN) :: PPEW_A_COEF
178 REAL,
DIMENSION(KI),
INTENT(IN) :: PPEW_B_COEF
179 REAL,
DIMENSION(KI),
INTENT(IN) :: PPET_A_COEF
180 REAL,
DIMENSION(KI),
INTENT(IN) :: PPEQ_A_COEF
181 REAL,
DIMENSION(KI),
INTENT(IN) :: PPET_B_COEF
182 REAL,
DIMENSION(KI),
INTENT(IN) :: PPEQ_B_COEF
183 CHARACTER(LEN=2),
INTENT(IN) :: HTEST
192 REAL,
DIMENSION(KI) :: ZWIND
193 REAL,
DIMENSION(KI) :: ZEXNA
194 REAL,
DIMENSION(KI) :: ZTA
195 REAL,
DIMENSION(KI) :: ZPA
196 REAL,
DIMENSION(KI) :: ZZREF
197 REAL,
DIMENSION(KI) :: ZUREF
198 REAL,
DIMENSION(KI) :: ZU
199 REAL,
DIMENSION(KI) :: ZV
200 REAL,
DIMENSION(KI) :: ZQA
201 REAL,
DIMENSION(KI) :: ZPEQ_A_COEF
202 REAL,
DIMENSION(KI) :: ZPEQ_B_COEF
207 REAL,
DIMENSION(KI) :: ZCANOPY
208 REAL,
DIMENSION(KI) :: ZSFLUX_U
209 REAL,
DIMENSION(KI) :: ZSFLUX_T
210 REAL,
DIMENSION(KI) :: ZSFLUX_Q
211 REAL,
DIMENSION(KI,SB%NLVL) :: ZFORC_U
212 REAL,
DIMENSION(KI,SB%NLVL) :: ZDFORC_UDU
214 REAL,
DIMENSION(KI,SB%NLVL) :: ZFORC_E
215 REAL,
DIMENSION(KI,SB%NLVL) :: ZDFORC_EDE
217 REAL,
DIMENSION(KI,SB%NLVL) :: ZFORC_T
218 REAL,
DIMENSION(KI,SB%NLVL) :: ZDFORC_TDT
220 REAL,
DIMENSION(KI,SB%NLVL) :: ZFORC_Q
221 REAL,
DIMENSION(KI,SB%NLVL) :: ZDFORC_QDQ
223 REAL,
DIMENSION(KI,SB%NLVL) :: ZLM
224 REAL,
DIMENSION(KI,SB%NLVL) :: ZLEPS
225 REAL,
DIMENSION(KI) :: ZH
226 REAL,
DIMENSION(KI) :: ZUSTAR
227 REAL,
DIMENSION(KI) :: ZUSTAR_GROUND
229 REAL,
DIMENSION(KI) :: ZPET_A_COEF
230 REAL,
DIMENSION(KI) :: ZPET_B_COEF
231 REAL,
DIMENSION(KI) :: ZPEW_A_COEF
232 REAL,
DIMENSION(KI) :: ZPEW_B_COEF
234 REAL,
DIMENSION(KI) :: ZALFAU
235 REAL,
DIMENSION(KI) :: ZBETAU
236 REAL,
DIMENSION(KI) :: ZALFATH
237 REAL,
DIMENSION(KI) :: ZBETATH
238 REAL,
DIMENSION(KI) :: ZALFAQ
239 REAL,
DIMENSION(KI) :: ZBETAQ
241 CHARACTER(LEN=1) :: GCOUPLING
243 REAL,
DIMENSION(KI) ::ZCANOPY_DENSITY
244 REAL,
DIMENSION(KI) ::ZUW_GROUND
245 REAL,
DIMENSION(KI) ::ZDUWDU_GROUND
247 INTEGER :: JJ, JLAYER, IMASK, JP, JI
248 REAL(KIND=JPRB) :: ZHOOK_HANDLE
256 IF (
lhook)
CALL dr_hook(
'COUPLING_ISBA_CANOPY_N',0,zhook_handle)
276 IF(any(sb%XT(:,:) ==
xundef))
THEN 278 ptstep, ppa, pps, pta, pqa, prhoa, pu, pv, pdir_sw, &
279 psca_sw, psw_bands, prain, psnow, pzref, puref, iss%XSSO_SLOPE )
285 CALL init_forc(zforc_u, zdforc_udu, zforc_e, zdforc_ede, zforc_t, zdforc_tdt, zforc_q, zdforc_qdq )
295 zcanopy_density(:) = 0.
302 IF (io%LCANOPY_DRAG)
THEN 311 zh(imask) = zh(imask) + pk%XPATCH(jj) * pek%XZ0(jj) / 0.13
312 zcanopy_density(imask) = zcanopy_density(imask) + pk%XPATCH(jj) * pek%XLAI(jj)
317 zh(jj) = min(zh(jj), sb%XZF(jj,sb%NLVL))
318 IF (zh(jj)<=sb%XDZ(jj,1)) zh(jj) = 0.
322 zduwdu_ground(jj) = 0.
327 CALL isba_canopy(io%XCDRAG, ki, sb, zh,zcanopy_density, zuw_ground, &
328 zduwdu_ground, zforc_u, zdforc_udu, zforc_e, zdforc_ede )
335 zwind = sqrt(pu**2+pv**2)
336 CALL canopy_evol(sb, ki, ptstep, 1, sb%XZ, zwind, pta, pqa, ppa, prhoa, &
337 zsflux_u, zsflux_t, zsflux_q, zforc_u, zdforc_udu, &
338 zforc_e, zdforc_ede, zforc_t, zdforc_tdt, zforc_q, &
339 zdforc_qdq, zlm, zleps, zustar, zalfau, zbetau, zalfath, &
340 zbetath, zalfaq, zbetaq )
348 zbetau, zalfath, zbetath, zalfaq,&
349 zbetaq, zpa, zta, zqa, zu, zv, &
350 zuref, zzref, zexna, zpew_a_coef,&
351 zpew_b_coef, zpet_a_coef, &
352 zpet_b_coef, zpeq_a_coef, &
362 gcoupling = hcoupling
365 pu, pv, puref, pzref, &
366 ppew_a_coef, ppew_b_coef, &
367 ppet_a_coef, ppet_b_coef, &
368 ppeq_a_coef, ppeq_b_coef, &
369 zpa, zta, zqa, zu, zv, zuref, &
370 zzref, zpew_a_coef, &
371 zpew_b_coef, zpet_a_coef, &
372 zpet_b_coef, zpeq_a_coef, &
382 CALL coupling_isba_n(dtco, ug, u, uss, nag, chi, nchi, dtv, id, ngb, gb, iss,niss, ig, &
383 nig, io, s, k, nk, np, npe, ndst, slt, hprogram, gcoupling, &
384 ptstep, kyear, kmonth, kday, ptime, ki, ksv, ksw, ptsun, pzenith, &
385 pzenith2, zzref, zuref, pzs, zu, zv, zqa, zta, prhoa, psv, pco2, &
386 hsv, prain, psnow, plw, pdir_sw, psca_sw, psw_bands, pps, zpa, &
387 psftq, psfth, psfts, psfco2, psfu, psfv, ptrad, pdir_alb, &
388 psca_alb, pemis, ptsurf, pz0, pz0h, pqsurf, zpew_a_coef, &
389 zpew_b_coef, zpet_a_coef, zpeq_a_coef, zpet_b_coef, zpeq_b_coef, &
397 IF (.NOT. io%LCANOPY .AND.
lhook)
CALL dr_hook(
'COUPLING_ISBA_CANOPY_N',1,zhook_handle)
398 IF (.NOT. io%LCANOPY)
RETURN 405 CALL init_forc(zforc_u, zdforc_udu, zforc_e, zdforc_ede, &
406 zforc_t, zdforc_tdt, zforc_q, zdforc_qdq )
408 zsflux_u = - sqrt(psfu(:)**2+psfv(:)**2) / prhoa(:)
409 zsflux_t(:) = psfth(:) /
xcpd * zexna(:) / prhoa(:)
410 zsflux_q(:) = psftq(:)
417 IF (io%LCANOPY_DRAG)
THEN 420 zuw_ground(jj) = -sqrt(psfu(jj)**2+psfv(jj)**2)/ prhoa(jj)
421 zduwdu_ground(jj) = 0.
422 IF (sb%XU(jj,1)/=0.) zduwdu_ground(jj) = 2. * zuw_ground(jj) / sb%XU(jj,1)
426 CALL isba_canopy(io%XCDRAG, ki, sb, zh, zcanopy_density, zuw_ground, &
427 zduwdu_ground, zforc_u, zdforc_udu, zforc_e, zdforc_ede )
438 zwind = sqrt(pu**2+pv**2)
439 CALL canopy_evol(sb, ki, ptstep, 2, sb%XZ, zwind, pta, pqa, ppa, prhoa, &
440 zsflux_u, zsflux_t, zsflux_q, zforc_u, zdforc_udu,zforc_e,&
441 zdforc_ede, zforc_t, zdforc_tdt, zforc_q, zdforc_qdq, zlm,&
442 zleps, zustar, zalfau, zbetau, zalfath, zbetath, zalfaq, &
445 DO jlayer=1,sb%NLVL-1
446 sb%XLMO(:,jlayer) = sb%XLMO(:,sb%NLVL)
452 IF (io%LCANOPY_DRAG)
THEN 454 zustar_ground(jj) = sqrt(sqrt(psfu(jj)**2+psfv(jj)**2)/prhoa(jj))
455 IF (zustar_ground(jj)>0.)
THEN 456 psfu(jj) = psfu(jj) * zustar(jj)**2/zustar_ground(jj)**2
457 psfv(jj) = psfv(jj) * zustar(jj)**2/zustar_ground(jj)**2
461 IF (id%O%LSURF_BUDGET)
THEN 472 IF (id%O%N2M>=1)
CALL init_2m_10m(sb, id%D, pu, pv, zwind, prhoa )
474 IF (
lhook)
CALL dr_hook(
'COUPLING_ISBA_CANOPY_N',1,zhook_handle)
subroutine coupling_isba_canopy_n(DTCO, UG, U, USS, SB, NAG, CHI, NCHI, DTV, ID, NGB, GB, ISS, NISS, IG, NIG, IO, S, K, NK, NP, NPE, NDST, SLT, HPROGRAM, HCOUPLING, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, PAZIM, PZREF, PUREF, PZS, 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 init_coupling(HCOUPLING, PPS, PPA, PTA, PQA, PU, PV, PUREF, PZREF, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, PPET_B_COEF, PPEQ_A_COEF, PPEQ_B_COEF, PPPA, PTTA, PQQA, PUU, PVV, PUUREF, PZZREF, PPEW_AA_COEF, PPEW_BB_COEF, PPET_AA_COEF, PPET_BB_COEF, PPEQ_AA_COEF, PPEQ_BB_COEF)
subroutine init_isba_sbl(IO, K, NP, NPE, SB, PTSTEP, PPA, PPS, PTA, PQA, PRHOA, PU, PV, PDIR_SW, PSCA_SW, PSW_BANDS, PRAIN, PSNOW, PZREF, PUREF, PSSO_SLOPE)
subroutine coupling_isba_n(DTCO, UG, U, USS, NAG, CHI, NCHI, DTI, ID, NGB, GB, ISS, NISS, IG, NIG, IO, S, K, NK, NP, NPE, NDST, SLT, HPROGRAM, HCOUPLING, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, PZREF, PUREF, PZS, 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 init_2m_10m(SB, D, PU, PV, PWIND, PRHOA)
subroutine canopy_evol(SB, KI, PTSTEP, KIMPL, PZZ, PWIND, PTA, PQA
subroutine init_forc(PFORC_U, PDFORC_UDU, PFORC_E, PDFORC_EDE, PFORC_T, PDFORC_TDT, PFORC_Q, PDFORC_QDQ)
subroutine isba_canopy(PCDRAG, KI, SB, PHEIGHT, PCANOPY_DENSITY, PUW_GROUND, PDUWDU_GROUND, PFORC_U, PDFORC_UDU, PFORC_E, PDFORC_EDE)
subroutine canopy_grid_update(KI, PH, PZFORC, SB)
subroutine init_coupling_canopy(SB, PPA, PU, PV, PRHOA, PALFAU, PBETAU, PALFATH, PBETATH, PALFAQ, PBETAQ, PPPA, PTTA, PQQA, PUU, PVV, PUUREF, PZZREF, PEXNA, PPEW_AA_COEF, PPEW_BB_COEF, PPET_AA_COEF, PPET_BB_COEF, PPEQ_AA_COEF, PPEQ_BB_COEF)