7 pzz,pwind,pta,pqa,ppa,prhoa, &
8 psflux_u,psflux_t,psflux_q, &
9 pforc_u,pdforc_udu,pforc_e,pdforc_ede,pforc_t,pdforc_tdt, &
11 pz,pzf,pdz,pdzf,pu,ptke,pt,pq,plmo,plm,pleps,pp,pustar, &
12 palfau,pbetau,palfath,pbetath,palfaq,pbetaq, oneutral )
52 USE modi_canopy_evol_wind
53 USE modi_canopy_evol_tke
54 USE modi_canopy_evol_temp
58 USE yomhook
,ONLY : lhook, dr_hook
59 USE parkind1
,ONLY : jprb
66 INTEGER,
INTENT(IN) :: ki
67 INTEGER,
INTENT(IN) :: klvl
68 REAL,
INTENT(IN) :: ptstep
69 INTEGER,
INTENT(IN) :: kimpl
74 REAL,
DIMENSION(KI,KLVL),
INTENT(IN) :: pzz
75 REAL,
DIMENSION(KI),
INTENT(IN) :: pwind
76 REAL,
DIMENSION(KI),
INTENT(IN) :: pta
77 REAL,
DIMENSION(KI),
INTENT(IN) :: pqa
78 REAL,
DIMENSION(KI),
INTENT(IN) :: ppa
79 REAL,
DIMENSION(KI),
INTENT(IN) :: prhoa
80 REAL,
DIMENSION(KI),
INTENT(IN) :: psflux_u
81 REAL,
DIMENSION(KI),
INTENT(IN) :: psflux_t
82 REAL,
DIMENSION(KI),
INTENT(IN) :: psflux_q
83 REAL,
DIMENSION(KI,KLVL),
INTENT(IN) :: pforc_u
84 REAL,
DIMENSION(KI,KLVL),
INTENT(IN) :: pdforc_udu
86 REAL,
DIMENSION(KI,KLVL),
INTENT(IN) :: pforc_e
87 REAL,
DIMENSION(KI,KLVL),
INTENT(IN) :: pdforc_ede
89 REAL,
DIMENSION(KI,KLVL),
INTENT(IN) :: pforc_t
90 REAL,
DIMENSION(KI,KLVL),
INTENT(IN) :: pdforc_tdt
92 REAL,
DIMENSION(KI,KLVL),
INTENT(IN) :: pforc_q
93 REAL,
DIMENSION(KI,KLVL),
INTENT(IN) :: pdforc_qdq
96 REAL,
DIMENSION(KI,KLVL),
INTENT(IN) :: pz
97 REAL,
DIMENSION(KI,KLVL),
INTENT(IN) :: pzf
98 REAL,
DIMENSION(KI,KLVL),
INTENT(IN) :: pdz
99 REAL,
DIMENSION(KI,KLVL),
INTENT(IN) :: pdzf
100 REAL,
DIMENSION(KI,KLVL),
INTENT(INOUT) :: pu
101 REAL,
DIMENSION(KI,KLVL),
INTENT(INOUT) :: ptke
102 REAL,
DIMENSION(KI,KLVL),
INTENT(INOUT) :: pt
103 REAL,
DIMENSION(KI,KLVL),
INTENT(INOUT) :: pq
104 REAL,
DIMENSION(KI,KLVL),
INTENT(INOUT) :: plmo
105 REAL,
DIMENSION(KI,KLVL),
INTENT(OUT) :: plm
106 REAL,
DIMENSION(KI,KLVL),
INTENT(OUT) :: pleps
107 REAL,
DIMENSION(KI,KLVL),
INTENT(INOUT) :: pp
108 REAL,
DIMENSION(KI),
INTENT(OUT) :: pustar
110 REAL,
DIMENSION(KI),
INTENT(OUT) :: palfau
111 REAL,
DIMENSION(KI),
INTENT(OUT) :: pbetau
112 REAL,
DIMENSION(KI),
INTENT(OUT) :: palfath
113 REAL,
DIMENSION(KI),
INTENT(OUT) :: pbetath
114 REAL,
DIMENSION(KI),
INTENT(OUT) :: palfaq
115 REAL,
DIMENSION(KI),
INTENT(OUT) :: pbetaq
117 LOGICAL,
OPTIONAL,
INTENT(IN) :: oneutral
127 REAL,
DIMENSION(KI,KLVL) :: zk
128 REAL,
DIMENSION(KI,KLVL) :: zdkddvdz
129 REAL,
DIMENSION(KI,KLVL) :: zth
130 REAL,
DIMENSION(KI) :: ztha
131 REAL,
DIMENSION(KI,KLVL) :: zexn
132 REAL,
DIMENSION(KI,KLVL) :: zuw
133 REAL,
DIMENSION(KI) :: zsflux_th
134 REAL,
DIMENSION(KI,KLVL) :: zforc_th
135 REAL,
DIMENSION(KI,KLVL) :: zdforc_thdth
137 REAL,
DIMENSION(KI,KLVL) :: zwth
138 REAL,
DIMENSION(KI,KLVL) :: zwq
139 REAL,
DIMENSION(KI,KLVL) :: zsfth
140 REAL,
DIMENSION(KI,KLVL) :: zsfrv
142 REAL,
DIMENSION(KI,KLVL) :: zrhoa
143 REAL(KIND=JPRB) :: zhook_handle
145 IF (lhook) CALL dr_hook(
'CANOPY_EVOL',0,zhook_handle)
149 IF (present(oneutral)) gneutral = oneutral
157 IF(pwind(ji)>0. .AND. pu(ji,klvl-1)==0.)
THEN
159 pu(ji,:) = pwind(ji) * log(pz(ji,:)/zz0) / log(pz(ji,klvl)/zz0)
179 zk(:,jlayer) = 0.5 * xcmfs * plm(:,jlayer) * sqrt(ptke(:,jlayer) ) &
180 + 0.5 * xcmfs * plm(:,jlayer-1) * sqrt(ptke(:,jlayer-1))
194 CALL
canopy_evol_wind(ki,klvl,ptstep,kimpl,pwind,zk,zdkddvdz,psflux_u,pforc_u,pdforc_udu,pdz,pdzf,pu,zuw,palfau,pbetau)
199 pustar = sqrt(abs(zuw(:,klvl)))
218 pp(:,jlayer) = ppa(:) + xg * prhoa(:) * (pz(:,klvl) - pz(:,jlayer))
220 zexn = (pp/xp00)**(xrd/xcpd)
223 WHERE(pt/=xundef) zth(:,:) = pt(:,:) / zexn(:,:)
225 ztha(:) = pta(:) / zexn(:,klvl)
232 zk(:,jlayer) = 0.5 * xcshf * plm(:,jlayer) * sqrt(ptke(:,jlayer) ) &
233 + 0.5 * xcshf * plm(:,jlayer-1) * sqrt(ptke(:,jlayer-1))
245 zsflux_th = psflux_t / zexn(:,1)
246 zforc_th = pforc_t / zexn
247 zdforc_thdth = pdforc_tdt
253 CALL
canopy_evol_temp(ki,klvl,ptstep,kimpl,ztha,zk,zdkddvdz,zsflux_th,zforc_th,zdforc_thdth,pdz,pdzf,zth,zwth,palfath,pbetath)
258 WHERE(pt/=xundef) pt(:,:) = zth(:,:) * zexn(:,:)
265 CALL
canopy_evol_temp(ki,klvl,ptstep,kimpl,pqa,zk,zdkddvdz,psflux_q,pforc_q,pdforc_qdq,pdz,pdzf,pq,zwq,palfaq,pbetaq)
268 IF (kimpl==1 .AND. lhook) CALL dr_hook(
'CANOPY_EVOL',1,zhook_handle)
277 CALL
canopy_evol_tke(ki,klvl,ptstep,prhoa,pz,pzf,pdz,pdzf,pforc_e,pdforc_ede, &
278 pu,zth,zuw,zwth,zwq,pleps,ptke )
282 IF (.NOT.gneutral)
THEN
293 zrhoa(:,:) = spread(prhoa(:),2,klvl)
295 zsfth(:,:) = zwth(:,:)
296 zsfrv(:,:) = zwq(:,:) / zrhoa(:,:)
298 plmo(:,:) =
lmo(sqrt(abs(zuw)),pt,pq,zsfth,zsfrv)
301 WHERE (plmo(:,jlayer)>0.) plmo(:,jlayer) = max(plmo(:,jlayer),pz(:,klvl))
302 WHERE (plmo(:,jlayer)<0.) plmo(:,jlayer) = min(plmo(:,jlayer),-pz(:,klvl))
316 pu(:,klvl) = pwind(:)
318 IF (lhook) CALL dr_hook(
'CANOPY_EVOL',1,zhook_handle)
subroutine canopy_evol_tke(KI, KLVL, PTSTEP, PRHOA, PZ, PZF, PDZ, PDZF, PFORC_E, PDFORC_EDE, PU, PTH, PUW, PWTH, PWQ, PLEPS, PTKE)
subroutine canopy_evol_wind(KI, KLVL, PTSTEP, KIMPL, PWIND, PK, PDKDDVDZ, PSFLUX_U, PFORC_U, PDFORC_UDU, PDZ, PDZF, PU, PUW, PALFA, PBETA)
subroutine rmc01_surf(PZ, PLMO, PLK, PLEPS, ONEUTRAL)
subroutine canopy_evol_temp(KI, KLVL, PTSTEP, KIMPL, PTHA, PK, PDKDDVDZ, PSFLUX_T, PFORC_T, PDFORC_TDT, PDZ, PDZF, PTH, PWTH, PALFA, PBETA)
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)