7 hprogram, hcoupling, ptimec, &
8 ptstep, kyear, kmonth, kday, ptime, ki, ksv, ksw, ptsun, pzenith, pazim, &
9 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, &
61 USE modd_csts, ONLY : xrd, xcpd, xp00, xpi, xlvtt, xday, xkarman, xtt, &
63 USE modd_ideal_flux, ONLY : nforcf, nforct, xsfth, xsftq, xsfts, xsfco2, &
64 custartype, xustar, xz0, xalb, xemis, xtsrad, &
71 USE modi_diag_inline_ideal_n
72 USE modi_surface_aero_cond
76 USE yomhook
,ONLY : lhook, dr_hook
77 USE parkind1
,ONLY : jprb
88 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
89 CHARACTER(LEN=1),
INTENT(IN) :: hcoupling
92 REAL,
INTENT(IN) :: ptimec
93 INTEGER,
INTENT(IN) :: kyear
94 INTEGER,
INTENT(IN) :: kmonth
95 INTEGER,
INTENT(IN) :: kday
96 REAL,
INTENT(IN) :: ptime
97 INTEGER,
INTENT(IN) :: ki
98 INTEGER,
INTENT(IN) :: ksv
99 INTEGER,
INTENT(IN) :: ksw
100 REAL,
DIMENSION(KI),
INTENT(IN) :: ptsun
101 REAL,
INTENT(IN) :: ptstep
102 REAL,
DIMENSION(KI),
INTENT(IN) :: pzref
103 REAL,
DIMENSION(KI),
INTENT(IN) :: puref
105 REAL,
DIMENSION(KI),
INTENT(IN) :: pta
106 REAL,
DIMENSION(KI),
INTENT(IN) :: pqa
107 REAL,
DIMENSION(KI),
INTENT(IN) :: prhoa
108 REAL,
DIMENSION(KI,KSV),
INTENT(IN) :: psv
111 CHARACTER(LEN=6),
DIMENSION(KSV),
INTENT(IN):: hsv
112 REAL,
DIMENSION(KI),
INTENT(IN) :: pu
113 REAL,
DIMENSION(KI),
INTENT(IN) :: pv
114 REAL,
DIMENSION(KI,KSW),
INTENT(IN) :: pdir_sw
116 REAL,
DIMENSION(KI,KSW),
INTENT(IN) :: psca_sw
118 REAL,
DIMENSION(KSW),
INTENT(IN) :: psw_bands
119 REAL,
DIMENSION(KI),
INTENT(IN) :: pzenith
120 REAL,
DIMENSION(KI),
INTENT(IN) :: pazim
121 REAL,
DIMENSION(KI),
INTENT(IN) :: plw
123 REAL,
DIMENSION(KI),
INTENT(IN) :: pps
124 REAL,
DIMENSION(KI),
INTENT(IN) :: ppa
125 REAL,
DIMENSION(KI),
INTENT(IN) :: pzs
126 REAL,
DIMENSION(KI),
INTENT(IN) :: pco2
127 REAL,
DIMENSION(KI),
INTENT(IN) :: psnow
128 REAL,
DIMENSION(KI),
INTENT(IN) :: prain
131 REAL,
DIMENSION(KI),
INTENT(OUT) :: psfth
132 REAL,
DIMENSION(KI),
INTENT(OUT) :: psftq
133 REAL,
DIMENSION(KI),
INTENT(OUT) :: psfu
134 REAL,
DIMENSION(KI),
INTENT(OUT) :: psfv
135 REAL,
DIMENSION(KI),
INTENT(OUT) :: psfco2
136 REAL,
DIMENSION(KI,KSV),
INTENT(OUT):: psfts
138 REAL,
DIMENSION(KI),
INTENT(OUT) :: ptrad
139 REAL,
DIMENSION(KI,KSW),
INTENT(OUT):: pdir_alb
140 REAL,
DIMENSION(KI,KSW),
INTENT(OUT):: psca_alb
141 REAL,
DIMENSION(KI),
INTENT(OUT) :: pemis
143 REAL,
DIMENSION(KI),
INTENT(OUT) :: ptsurf
144 REAL,
DIMENSION(KI),
INTENT(OUT) :: pz0
145 REAL,
DIMENSION(KI),
INTENT(OUT) :: pz0h
146 REAL,
DIMENSION(KI),
INTENT(OUT) :: pqsurf
148 REAL,
DIMENSION(KI),
INTENT(IN) :: ppew_a_coef
149 REAL,
DIMENSION(KI),
INTENT(IN) :: ppew_b_coef
150 REAL,
DIMENSION(KI),
INTENT(IN) :: ppet_a_coef
151 REAL,
DIMENSION(KI),
INTENT(IN) :: ppeq_a_coef
152 REAL,
DIMENSION(KI),
INTENT(IN) :: ppet_b_coef
153 REAL,
DIMENSION(KI),
INTENT(IN) :: ppeq_b_coef
154 CHARACTER(LEN=2),
INTENT(IN) :: htest
160 REAL,
DIMENSION(KI) :: zz0
161 REAL,
DIMENSION(KI) :: zlmo
162 REAL,
DIMENSION(KI) :: ztha
163 REAL,
DIMENSION(KI) :: zrva
164 REAL,
DIMENSION(KI) :: zustar
165 REAL,
DIMENSION(KI) :: zwind
166 REAL,
DIMENSION(KI) :: zq0
167 REAL,
DIMENSION(KI) :: ze0
168 REAL,
DIMENSION(KI) :: zqa
169 REAL,
DIMENSION(KI) :: zdircoszw
170 REAL,
DIMENSION(KI) :: zexns, zexna
171 REAL,
DIMENSION(KI) :: zac, zra, zch, zcd, zcdn, zri
172 REAL,
DIMENSION(KI) :: zhu
173 REAL,
DIMENSION(KI) :: zle
174 REAL,
DIMENSION(KI) :: zlei
175 REAL,
DIMENSION(KI) :: zsubl
176 REAL,
DIMENSION(KI) :: zlwup
177 REAL,
DIMENSION(KI,KSW) :: zdir_alb
178 REAL,
DIMENSION(KI,KSW) :: zsca_alb
192 REAL(KIND=JPRB) :: zhook_handle
195 IF (lhook) CALL dr_hook(
'COUPLING_IDEAL_FLUX',0,zhook_handle)
196 IF (htest/=
'OK')
THEN
197 CALL
abor1_sfx(
'COUPLING_IDEAL_FLUX: FATAL ERROR DURING ARGUMENT TRANSFER')
215 psfth(:) = xsfth(ihourf) + ( xsfth(ihourf+1)-xsfth(ihourf) )*zalpha
217 gcall_lmo = ( xsfth(ihourf) + ( xsfth(ihourf+1)-xsfth(ihourf) )*zalpha ) /=0.
223 psftq(:) = xsftq(ihourf) + ( xsftq(ihourf+1)-xsftq(ihourf) )*zalpha
225 gcall_lmo = gcall_lmo .OR. ( xsftq(ihourf) + ( xsftq(ihourf+1)-xsftq(ihourf) )*zalpha ) /=0.
233 zwind(:) = sqrt(pu**2+pv**2)
237 SELECT CASE (custartype)
242 zustar(:) = xustar(ihourf) + ( xustar(ihourf+1)-xustar(ihourf) )*zalpha
253 zqa(:) = pqa(:) / prhoa(:)
255 WHERE (zqa(:)/=0.) zrva(:) = 1./(1./zqa(:) - 1.)
258 ztha(:) = pta(:) * (xp00/ppa(:))**(xrd/xcpd)
261 zq0(:) = psfth(:) / xcpd / prhoa(:)
262 ze0(:) = psftq(:) / prhoa(:)
267 zustar(:) =
ustar(zwind(:),pzref(:),zz0(:),zlmo(:))
271 zustar(:) = max( zustar(:), 0.01 )
273 zlmo(:) =
lmo(zustar(:),ztha(:),zrva(:),zq0(:),ze0(:))
274 zustar(:) =
ustar(zwind(:),pzref(:),zz0(:),zlmo(:))
284 psfu = - prhoa * zustar**2 * pu / zwind
285 psfv = - prhoa * zustar**2 * pv / zwind
293 DO jsv=1,
SIZE(psfts,2)
294 psfts(:,jsv) = xsfts(ihourf,jsv) + ( xsfts(ihourf+1,jsv)-xsfts(ihourf,jsv) )*zalpha
302 psfco2(:) = xsfco2(ihourf) + ( xsfco2(ihourf+1)-xsfco2(ihourf) )*zalpha
311 ptrad(:) = xtsrad(ihourt) + ( xtsrad(ihourt+1)-xtsrad(ihourt) )*zalpha
320 pqsurf(:) =
qsat(ptsurf(:),pps(:))
329 zexns(:) = (pps(:)/xp00)**(xrd/xcpd)
330 zexna(:) = (ppa(:)/xp00)**(xrd/xcpd)
331 zqa(:) = pqa(:) / prhoa(:)
335 WHERE (ptsurf(:)<xtt)
336 zle(:) = psftq(:) * xlstt
337 zlei(:) = psftq(:) * xlstt
340 zle(:) = psftq(:) * xlvtt
345 zlwup(:)=(1.-pemis(:))*plw(:)+pemis(:)*xstefan*ptsurf(:)**4
347 CALL
surface_ri(ptsurf,pqsurf,zexns,zexna,pta,pqa, &
348 pzref, puref, zdircoszw,zwind,zri)
352 CALL
surface_cd(zri, pzref, puref, pz0, pz0h, zcd, zcdn)
355 pv, pzref, puref, prain, psnow, &
356 zcd, zcdn, zch, zri, zhu, pz0, &
357 pz0h, pqsurf, psfth, psftq, psfu, psfv, &
358 pdir_sw, psca_sw, plw, pdir_alb, psca_alb, &
359 zle, zlei, zsubl, zlwup )
361 IF (lhook) CALL dr_hook(
'COUPLING_IDEAL_FLUX',1,zhook_handle)
370 REAL,
INTENT(IN) :: ptimein
371 REAL,
INTENT(IN) :: pstep
372 INTEGER,
INTENT(IN) :: kforc
373 REAL,
DIMENSION(:),
INTENT(IN) :: ptimes
374 INTEGER,
INTENT(OUT):: khour
375 REAL,
INTENT(OUT):: palpha
379 REAL(KIND=JPRB) :: zhook_handle
381 IF (lhook) CALL dr_hook(
'COUPLING_IDEAL_FLUX:TEMP_FORC_DISTS',0,zhook_handle)
385 IF (ptimes(kforc)==xundef)
THEN
388 ELSEIF (ztimein<ptimes(1).OR.ztimein>ptimes(kforc))
THEN
389 WRITE(*,*)
'COUPLING_IDEAL_FLUX', ztimein, ptimes(1), ptimes(kforc)
390 CALL
abor1_sfx(
"COUPLING_IDEAL_FLUX:TEMP_FORC_DISTS: PTIMEC OUT OF BOUNDS!!!")
391 ELSEIF (ztimein==ptimes(kforc))
THEN
396 IF (ptimein.GE.ptimes(jt))
THEN
401 palpha = (ptimein-ptimes(khour)) / (ptimes(khour+1)-ptimes(khour))
404 IF (lhook) CALL dr_hook(
'COUPLING_IDEAL_FLUX:TEMP_FORC_DISTS',1,zhook_handle)
subroutine surface_ri(PTG, PQS, PEXNS, PEXNA, PTA, PQA, PZREF, PUREF, PDIRCOSZW, PVMOD, PRI)
subroutine temp_forc_dists(PTIMEIN, PSTEP, KFORC, PTIMES, KHOUR, PALPHA)
subroutine coupling_ideal_flux(DGL, HPROGRAM, HCOUPLING, PTIMEC, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, 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 abor1_sfx(YTEXT)
subroutine surface_aero_cond(PRI, PZREF, PUREF, PVMOD, PZ0, PZ0H, PAC, PRA, PCH)
subroutine surface_cd(PRI, PZREF, PUREF, PZ0EFF, PZ0H, PCD, PCDN)
subroutine diag_inline_ideal_n(DGL, PTSTEP, PTA, PTS, PQA, PPA, PPS, PRHOA, PZONA, PMERA, PHT, PHW, PRAIN, PSNOW, PCD, PCDN, PCH, PRI, PHU, PZ0, PZ0H, PQSAT, PSFTH, PSFTQ, PSFZON, PSFMER, PDIR_SW, PSCA_SW, PLW, PDIR_ALB, PSCA_ALB, PLE, PLEI, PSUBL, PLWUP)