7 PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, PAZIM, &
8 PZREF, PUREF, PZS, PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV, &
9 PRAIN, PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, &
10 PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV, &
11 PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF, PZ0, PZ0H, PQSURF, &
12 PPEW_A_COEF, PPEW_B_COEF, &
13 PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, HTEST )
69 USE modi_diag_inline_ideal_n
70 USE modi_surface_aero_cond
85 TYPE(
diag_t),
INTENT(INOUT) :: D
86 TYPE(
diag_t),
INTENT(INOUT) :: DC
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')
217 gcall_lmo = (
xsfth(ihourf) + (
xsfth(ihourf+1)-
xsfth(ihourf) )*zalpha ) /=0.
225 gcall_lmo = gcall_lmo .OR. (
xsftq(ihourf) + (
xsftq(ihourf+1)-
xsftq(ihourf) )*zalpha ) /=0.
233 zwind(:) = sqrt(pu**2+pv**2)
253 zqa(:) = pqa(:) / prhoa(:)
255 WHERE (zqa(:)/=0.) zrva(:) = 1./(1./zqa(:) - 1.)
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
320 pqsurf(:) =
qsat(ptsurf(:),pps(:))
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,pzref, puref, zdircoszw,zwind,zri)
351 CALL surface_cd(zri, pzref, puref, pz0, pz0h, zcd, zcdn)
354 zqa, ppa, pps, prhoa, pu, pv, pzref, puref, &
355 prain, psnow, zcd, zcdn, zch, zri, zhu, pz0, &
356 pz0h, pqsurf, psfth, psftq, psfu, psfv, &
357 pdir_sw, psca_sw, plw, pdir_alb, psca_alb, &
358 zle, zlei, zsubl, zlwup )
360 IF (
lhook)
CALL dr_hook(
'COUPLING_IDEAL_FLUX',1,zhook_handle)
369 REAL,
INTENT(IN) :: PTIMEIN
370 REAL,
INTENT(IN) :: PSTEP
371 INTEGER,
INTENT(IN) :: KFORC
372 REAL,
DIMENSION(:),
INTENT(IN) :: PTIMES
373 INTEGER,
INTENT(OUT):: KHOUR
374 REAL,
INTENT(OUT):: PALPHA
378 REAL(KIND=JPRB) :: ZHOOK_HANDLE
380 IF (
lhook)
CALL dr_hook(
'COUPLING_IDEAL_FLUX:TEMP_FORC_DISTS',0,zhook_handle)
384 IF (ptimes(kforc)==
xundef)
THEN 387 ELSEIF (ztimein<ptimes(1).OR.ztimein>ptimes(kforc))
THEN 388 WRITE(*,*)
'COUPLING_IDEAL_FLUX', ztimein, ptimes(1), ptimes(kforc)
389 CALL abor1_sfx(
"COUPLING_IDEAL_FLUX:TEMP_FORC_DISTS: PTIMEC OUT OF BOUNDS!!!")
390 ELSEIF (ztimein==ptimes(kforc))
THEN 395 IF (ptimein.GE.ptimes(jt))
THEN 400 palpha = (ptimein-ptimes(khour)) / (ptimes(khour+1)-ptimes(khour))
403 IF (
lhook)
CALL dr_hook(
'COUPLING_IDEAL_FLUX:TEMP_FORC_DISTS',1,zhook_handle)
real, dimension(:,:), allocatable xsfts
subroutine surface_ri(PTG, PQS, PEXNS, PEXNA, PTA, PQA, PZREF, PUREF, PDIRCOSZW, PVMOD, PRI)
subroutine temp_forc_dists(PTIMEIN, PSTEP, KFORC, PTIMES, KHOUR, PALPHA)
character(len=5) custartype
real, dimension(:), allocatable xtimet
real, dimension(:), allocatable xtsrad
subroutine diag_inline_ideal_n(DGO, D, DC, 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)
subroutine abor1_sfx(YTEXT)
real, dimension(:), allocatable xsfth
subroutine surface_aero_cond(PRI, PZREF, PUREF, PVMOD, PZ0, PZ0H, PAC, PRA, PCH)
real, dimension(:), allocatable xsfco2
subroutine surface_cd(PRI, PZREF, PUREF, PZ0EFF, PZ0H, PCD, PCDN)
subroutine coupling_ideal_flux(DGO, D, DC, 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)
real, dimension(:), allocatable xtimef
real, dimension(:), allocatable xustar
real, dimension(:), allocatable xsftq