6 SUBROUTINE coupling_isba_canopy_n (DTCO, UG, U, USS, IM, DTGD, DTGR, TGRO, DST, SLT, &
8 ptstep, kyear, kmonth, kday, ptime, ki, ksv, ksw, ptsun, pzenith, pzenith2, &
9 pazim, pzref, puref, pzs, 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, &
63 USE modi_init_isba_sbl
66 USE modi_canopy_grid_update
68 USE modi_coupling_isba_n
71 USE modi_sso_beljaars04
73 USE yomhook
,ONLY : lhook, dr_hook
74 USE parkind1
,ONLY : jprb
81 TYPE(isba_model_t
),
INTENT(INOUT) :: im
89 TYPE(dst_t),
INTENT(INOUT) :: dst
90 TYPE(slt_t),
INTENT(INOUT) :: slt
92 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
93 CHARACTER(LEN=1),
INTENT(IN) :: hcoupling
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) :: pzs
130 REAL,
DIMENSION(KI),
INTENT(IN) :: pco2
131 REAL,
DIMENSION(KI),
INTENT(IN) :: psnow
132 REAL,
DIMENSION(KI),
INTENT(IN) :: prain
135 REAL,
DIMENSION(KI),
INTENT(OUT) :: psfth
136 REAL,
DIMENSION(KI),
INTENT(OUT) :: psftq
137 REAL,
DIMENSION(KI),
INTENT(OUT) :: psfu
138 REAL,
DIMENSION(KI),
INTENT(OUT) :: psfv
139 REAL,
DIMENSION(KI),
INTENT(OUT) :: psfco2
140 REAL,
DIMENSION(KI,KSV),
INTENT(OUT):: psfts
142 REAL,
DIMENSION(KI),
INTENT(OUT) :: ptrad
143 REAL,
DIMENSION(KI,KSW),
INTENT(OUT):: pdir_alb
144 REAL,
DIMENSION(KI,KSW),
INTENT(OUT):: psca_alb
145 REAL,
DIMENSION(KI),
INTENT(OUT) :: pemis
147 REAL,
DIMENSION(KI),
INTENT(OUT) :: ptsurf
148 REAL,
DIMENSION(KI),
INTENT(OUT) :: pz0
149 REAL,
DIMENSION(KI),
INTENT(OUT) :: pz0h
150 REAL,
DIMENSION(KI),
INTENT(OUT) :: pqsurf
152 REAL,
DIMENSION(KI),
INTENT(IN) :: ppew_a_coef
153 REAL,
DIMENSION(KI),
INTENT(IN) :: ppew_b_coef
154 REAL,
DIMENSION(KI),
INTENT(IN) :: ppet_a_coef
155 REAL,
DIMENSION(KI),
INTENT(IN) :: ppeq_a_coef
156 REAL,
DIMENSION(KI),
INTENT(IN) :: ppet_b_coef
157 REAL,
DIMENSION(KI),
INTENT(IN) :: ppeq_b_coef
158 CHARACTER(LEN=2),
INTENT(IN) :: htest
164 REAL,
DIMENSION(KI) :: zwind
165 REAL,
DIMENSION(KI) :: zexna
166 REAL,
DIMENSION(KI) :: zta
167 REAL,
DIMENSION(KI) :: zpa
168 REAL,
DIMENSION(KI) :: zzref
169 REAL,
DIMENSION(KI) :: zuref
170 REAL,
DIMENSION(KI) :: zu
171 REAL,
DIMENSION(KI) :: zv
172 REAL,
DIMENSION(KI) :: zqa
173 REAL,
DIMENSION(KI) :: zpeq_a_coef
174 REAL,
DIMENSION(KI) :: zpeq_b_coef
179 REAL,
DIMENSION(KI) :: zcanopy
180 REAL,
DIMENSION(KI) :: zsflux_u
181 REAL,
DIMENSION(KI) :: zsflux_t
182 REAL,
DIMENSION(KI) :: zsflux_q
183 REAL,
DIMENSION(KI,IM%ICP%NLVL) :: zforc_u
184 REAL,
DIMENSION(KI,IM%ICP%NLVL) :: zdforc_udu
186 REAL,
DIMENSION(KI,IM%ICP%NLVL) :: zforc_e
187 REAL,
DIMENSION(KI,IM%ICP%NLVL) :: zdforc_ede
189 REAL,
DIMENSION(KI,IM%ICP%NLVL) :: zforc_t
190 REAL,
DIMENSION(KI,IM%ICP%NLVL) :: zdforc_tdt
192 REAL,
DIMENSION(KI,IM%ICP%NLVL) :: zforc_q
193 REAL,
DIMENSION(KI,IM%ICP%NLVL) :: zdforc_qdq
195 REAL,
DIMENSION(KI,IM%ICP%NLVL) :: zlmo
196 REAL,
DIMENSION(KI,IM%ICP%NLVL) :: zlm
197 REAL,
DIMENSION(KI,IM%ICP%NLVL) :: zleps
198 REAL,
DIMENSION(KI) :: zh
199 REAL,
DIMENSION(KI) :: zustar
200 REAL,
DIMENSION(KI) :: zustar_ground
202 REAL,
DIMENSION(KI) :: zpet_a_coef
203 REAL,
DIMENSION(KI) :: zpet_b_coef
204 REAL,
DIMENSION(KI) :: zpew_a_coef
205 REAL,
DIMENSION(KI) :: zpew_b_coef
207 REAL,
DIMENSION(KI) :: zalfau
208 REAL,
DIMENSION(KI) :: zbetau
209 REAL,
DIMENSION(KI) :: zalfath
210 REAL,
DIMENSION(KI) :: zbetath
211 REAL,
DIMENSION(KI) :: zalfaq
212 REAL,
DIMENSION(KI) :: zbetaq
214 CHARACTER(LEN=1) :: gcoupling
216 REAL,
DIMENSION(KI) ::zcanopy_density
217 REAL,
DIMENSION(KI) ::zuw_ground
218 REAL,
DIMENSION(KI) ::zduwdu_ground
220 REAL,
DIMENSION(KI,IM%ICP%NLVL) :: zz
223 REAL(KIND=JPRB) :: zhook_handle
231 IF (lhook) CALL dr_hook(
'COUPLING_ISBA_CANOPY_N',0,zhook_handle)
232 IF (im%I%LCANOPY)
THEN
240 CALL
canopy_grid_update(ki,im%ICP%NLVL,zcanopy,puref,im%ICP%XZ,im%ICP%XZF,im%ICP%XDZ,im%ICP%XDZF)
250 IF(any(im%ICP%XT(:,:) == xundef))
THEN
251 CALL
init_isba_sbl(im%I%CISBA, im%I%CCPSURF, im%ICP%NLVL, ptstep, ppa, pps, pta, pqa, prhoa, pu, pv, &
252 pdir_sw, psca_sw, psw_bands, prain, psnow, &
253 pzref, puref, im%I%XTG(:,1,:), im%I%XPATCH, im%I%XWG(:,1,:), im%I%XWGI(:,1,:), &
254 im%I%XZ0, im%I%XSSO_SLOPE, im%I%XRESA, im%I%XVEG, im%I%XLAI, &
255 im%I%XWR, im%I%XRGL, im%I%XRSMIN, im%I%XGAMMA, im%I%XWRMAX_CF, im%I%XZ0_O_Z0H, &
256 im%I%XWFC, im%I%XWSAT, im%I%TSNOW, im%ICP%XZ, &
257 im%ICP%XT, im%ICP%XQ, im%ICP%XU, im%ICP%XTKE, im%ICP%XP)
263 CALL
init_forc( zforc_u, zdforc_udu, zforc_e, zdforc_ede, &
264 zforc_t, zdforc_tdt, zforc_q, zdforc_qdq )
270 zlmo = spread(im%ICP%XLMO,2,im%ICP%NLVL)
280 zz(:,:) = im%ICP%XZ(:,:)
285 IF (im%I%LCANOPY_DRAG)
THEN
290 zh(jj) = sum(im%I%XPATCH(jj,:)*im%I%XZ0(jj,:)/0.13)
291 zh(jj) = min(zh(jj), im%ICP%XZF(jj,im%ICP%NLVL))
292 IF (zh(jj)<=im%ICP%XDZ(jj,1)) zh(jj) = 0.
295 zcanopy_density(jj) = sum(im%I%XPATCH(jj,:)*im%I%XLAI(jj,:))
297 zduwdu_ground(jj) = 0.
303 ki,im%ICP%NLVL,im%ICP%XZ,im%ICP%XZF,im%ICP%XDZ,im%ICP%XDZF,&
304 zh,zcanopy_density,im%ICP%XU,im%ICP%XTKE, &
305 zuw_ground, zduwdu_ground, &
306 zforc_u,zdforc_udu,zforc_e,zdforc_ede )
313 IF (im%I%CROUGH==
'BE04')
THEN
317 ki,im%ICP%NLVL,im%ICP%XZ,im%I%XSSO_STDEV,im%ICP%XU,zforc_u,zdforc_udu )
325 zwind = sqrt(pu**2+pv**2)
326 CALL
canopy_evol(ki,im%ICP%NLVL,ptstep,1,zz,zwind,pta,pqa,ppa,prhoa, &
327 zsflux_u,zsflux_t,zsflux_q, &
328 zforc_u,zdforc_udu,zforc_e,zdforc_ede, &
329 zforc_t,zdforc_tdt,zforc_q,zdforc_qdq, &
330 im%ICP%XZ,im%ICP%XZF,im%ICP%XDZ,im%ICP%XDZF,im%ICP%XU,&
331 im%ICP%XTKE,im%ICP%XT,im%ICP%XQ,zlmo,zlm,zleps,im%ICP%XP,zustar, &
332 zalfau,zbetau,zalfath,zbetath,zalfaq,zbetaq )
340 pu, pv, im%ICP%XZ(:,1), im%ICP%XU(:,1), &
341 prhoa, zalfau, zbetau, zalfath, &
342 zbetath, zalfaq, zbetaq, &
343 zpa, zta, zqa, zu, zv, &
344 zuref, zzref, zexna, &
345 zpew_a_coef, zpew_b_coef, &
346 zpet_a_coef, zpet_b_coef, &
347 zpeq_a_coef, zpeq_b_coef )
356 gcoupling = hcoupling
359 pps, ppa, pta, pqa, pu, pv, &
361 ppew_a_coef, ppew_b_coef, &
362 ppet_a_coef, ppet_b_coef, &
363 ppeq_a_coef, ppeq_b_coef, &
364 zpa, zta, zqa, zu, zv, &
366 zpew_a_coef, zpew_b_coef, &
367 zpet_a_coef, zpet_b_coef, &
368 zpeq_a_coef, zpeq_b_coef )
377 CALL
coupling_isba_n(dtco, ug, u, uss, im, dtgd, dtgr, tgro, dst, slt, &
378 hprogram, gcoupling, &
379 ptstep, kyear, kmonth, kday, ptime, &
381 ptsun, pzenith, pzenith2, &
382 zzref, zuref, pzs, zu, zv, zqa, zta, prhoa, psv, pco2, hsv, &
383 prain, psnow, plw, pdir_sw, psca_sw, psw_bands, pps, zpa, &
384 psftq, psfth, psfts, psfco2, psfu, psfv, &
385 ptrad, pdir_alb, psca_alb, pemis, ptsurf, pz0, pz0h, pqsurf, &
386 zpew_a_coef, zpew_b_coef, &
387 zpet_a_coef, zpeq_a_coef, zpet_b_coef, zpeq_b_coef, &
395 IF (.NOT. im%I%LCANOPY .AND. lhook) CALL dr_hook(
'COUPLING_ISBA_CANOPY_N',1,zhook_handle)
396 IF (.NOT. im%I%LCANOPY)
RETURN
403 CALL
init_forc( zforc_u, zdforc_udu, zforc_e, zdforc_ede, &
404 zforc_t, zdforc_tdt, zforc_q, zdforc_qdq )
406 zsflux_u = - sqrt(psfu(:)**2+psfv(:)**2) / prhoa(:)
407 zsflux_t(:) = psfth(:) / xcpd * zexna(:) / prhoa(:)
408 zsflux_q(:) = psftq(:)
415 IF (im%I%LCANOPY_DRAG)
THEN
418 zuw_ground(jj) = -sqrt(psfu(jj)**2+psfv(jj)**2)/ prhoa(jj)
419 zduwdu_ground(jj) = 0.
420 IF (im%ICP%XU(jj,1) /=0.) zduwdu_ground(jj) = 2. * zuw_ground(jj) / im%ICP%XU(jj,1)
425 ki,im%ICP%NLVL,im%ICP%XZ,im%ICP%XZF,im%ICP%XDZ,im%ICP%XDZF,&
426 zh,zcanopy_density,im%ICP%XU,im%ICP%XTKE, &
427 zuw_ground, zduwdu_ground, &
428 zforc_u,zdforc_udu,zforc_e,zdforc_ede )
435 IF (im%I%CROUGH==
'BE04')
THEN
439 ki,im%ICP%NLVL,im%ICP%XZ,im%I%XSSO_STDEV,im%ICP%XU,zforc_u,zdforc_udu )
448 zwind = sqrt(pu**2+pv**2)
449 CALL
canopy_evol(ki,im%ICP%NLVL,ptstep,2,zz,zwind,pta,pqa,ppa,prhoa, &
450 zsflux_u,zsflux_t,zsflux_q, &
451 zforc_u,zdforc_udu,zforc_e,zdforc_ede, &
452 zforc_t,zdforc_tdt,zforc_q,zdforc_qdq, &
453 im%ICP%XZ,im%ICP%XZF,im%ICP%XDZ,im%ICP%XDZF,im%ICP%XU,im%ICP%XTKE,&
454 im%ICP%XT,im%ICP%XQ,zlmo,zlm,zleps,im%ICP%XP,zustar, &
455 zalfau,zbetau,zalfath,zbetath,zalfaq,zbetaq )
457 im%ICP%XLMO(:) = zlmo(:,im%ICP%NLVL)
462 IF (im%I%LCANOPY_DRAG .OR. im%I%CROUGH==
'BE04')
THEN
464 zustar_ground(jj) = sqrt(sqrt(psfu(jj)**2+psfv(jj)**2)/prhoa(jj))
465 IF (zustar_ground(jj)>0.)
THEN
466 psfu(jj) = psfu(jj) * zustar(jj)**2/zustar_ground(jj)**2
467 psfv(jj) = psfv(jj) * zustar(jj)**2/zustar_ground(jj)**2
471 IF (im%DGI%LSURF_BUDGET)
THEN
472 im%DGI%XAVG_FMU = psfu
473 im%DGI%XAVG_FMV = psfv
483 IF (im%DGI%N2M>=1) CALL
init_2m_10m( im%ICP%XP(:,2), im%ICP%XT(:,2), im%ICP%XQ(:,2), im%ICP%XU, im%ICP%XZ, &
484 pu, pv, zwind, prhoa, &
485 im%DGI%XAVG_T2M, im%DGI%XAVG_Q2M, im%DGI%XAVG_HU2M, &
486 im%DGI%XAVG_ZON10M, im%DGI%XAVG_MER10M, &
487 im%DGI%XAVG_WIND10M, im%DGI%XAVG_WIND10M_MAX, im%DGI%XAVG_T2M_MIN, &
488 im%DGI%XAVG_T2M_MAX, im%DGI%XAVG_HU2M_MIN, im%DGI%XAVG_HU2M_MAX )
490 IF (lhook) CALL dr_hook(
'COUPLING_ISBA_CANOPY_N',1,zhook_handle)
subroutine init_coupling_canopy(PP, PPA, PT, PQ, PU, PV, PZ, PXU, 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)
subroutine sso_beljaars04(USS, KI, KLVL, PZ, PSSO_STDEV, PU, PFORC_U, PDFORC_UDU)
subroutine coupling_isba_n(DTCO, UG, U, USS, IM, DTGD, DTGR, TGRO, DST, 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 coupling_isba_canopy_n(DTCO, UG, U, USS, IM, DTGD, DTGR, TGRO, DST, 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 isba_canopy(I, KI, KLVL, PZ, PZF, PDZ, PDZF, PHEIGHT, PCANOPY_DENSITY, PU, PTKE, PUW_GROUND, PDUWDU_GROUND, PFORC_U, PDFORC_UDU, PFORC_E, PDFORC_EDE)
subroutine init_isba_sbl(HISBA, HCPSURF, KLVL, PTSTEP, PPA, PPS, PTA, PQA, PRHOA, PU, PV, PDIR_SW, PSCA_SW, PSW_BANDS, PRAIN, PSNOW, PZREF, PUREF, PTG, PPATCH, PWG, PWGI, PZ0, PSSO_SLOPE, PRESA, PVEG, PLAI, PWR, PRGL, PRSMIN, PGAMMA, PWRMAX_CF, PZ0_O_Z0H, PWFC, PWSAT, PTSNOW, PZ, PT, PQ, PWIND, PTKE, PP)
subroutine canopy_grid_update(KI, KLVL, PH, PZFORC, PZ, PZF, PDZ, PDZF)
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_2m_10m(PP, PT, PQ, PXU, PXZ, PU, PV, PWIND, PRHOA, PT2M, PQ2M, PHU2M, PZON10M, PMER10M, PWIND10M, PWIND10M_MAX, PT2M_MIN, PT2M_MAX, PHU2M_MIN, PHU2M_MAX)
subroutine init_forc(PFORC_U, PDFORC_UDU, PFORC_E, PDFORC_EDE, PFORC_T, PDFORC_TDT, PFORC_Q, PDFORC_QDQ)
subroutine canopy_evol(KI, KLVL, PTSTEP, KIMPL, PZZ, PWIND, PTA, PQA, PPA, PRHOA, PSFLUX_U, PSFLUX_T, PSFLUX_Q, PFORC_U, PDFORC_UDU, PFORC_E, PDFORC_EDE, PFORC_T, PDFORC_TDT, PFORC_Q, PDFORC_QDQ, PZ, PZF, PDZ, PDZF, PU, PTKE, PT, PQ, PLMO, PLM, PLEPS, PP, PUSTAR, PALFAU, PBETAU, PALFATH, PBETATH, PALFAQ, PBETAQ, ONEUTRAL)