55 CHARACTER(LEN=5),
INTENT(IN) :: HTYPE
56 REAL,
DIMENSION(:,:),
INTENT(IN) :: PD
57 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PD_OUT
58 REAL,
DIMENSION(:,:),
INTENT(IN),
OPTIONAL :: PHC
59 REAL,
DIMENSION(:,:),
INTENT(OUT),
OPTIONAL :: PHC_OUT
60 REAL,
DIMENSION(:,:),
INTENT(IN),
OPTIONAL :: PTC
61 REAL,
DIMENSION(:,:),
INTENT(OUT),
OPTIONAL :: PTC_OUT
71 REAL,
DIMENSION(0:SIZE(PD ,2))::ZD_IN
73 REAL,
DIMENSION(0:SIZE(PD_OUT,2))::ZD_OUT
75 REAL,
DIMENSION(SIZE(PD,2)) :: ZW, ZHC
76 REAL,
DIMENSION(SIZE(PD_OUT,2)) :: ZW_OUT, ZHC_OUT
82 REAL,
PARAMETER :: ZD_G1 = 0.001
93 REAL(KIND=JPRB) :: ZHOOK_HANDLE, ZHOOK_HANDLE_OMP
96 IF (
lhook)
CALL dr_hook(
'THERMAL_LAYER_CONF_1',0,zhook_handle)
98 IF (
PRESENT(phc_out).AND..NOT.
PRESENT(phc))
THEN 99 CALL abor1_sfx(
"THERMAL_LAYERS_CONF:IF HC_OUT IS PRESENT, HC MUST BE PRESENT TOO." 100 ELSEIF (
PRESENT(ptc_out).AND..NOT.
PRESENT(ptc))
THEN 101 CALL abor1_sfx(
"THERMAL_LAYERS_CONF:IF TC_OUT IS PRESENT, TC MUST BE PRESENT TOO." 108 IF (
lhook)
CALL dr_hook(
'THERMAL_LAYER_CONF_1',1,zhook_handle)
111 IF (
lhook)
CALL dr_hook(
'THERMAL_LAYER_CONF_2',0,zhook_handle_omp)
113 DO ji=1,
SIZE(pd_out,1)
117 zd_in(jin) = zd_in(jin-1) + pd(ji,jin)
127 IF (htype==
'ROAD ' .OR. htype==
'FLOOR')
THEN 129 CALL tebgrid(zd_tot,zd_out(1:),zd_g1)
132 pd_out(ji,jout) = zd_out(jout) - zd_out(jout-1)
139 IF (mod(iout,2)==0)
THEN 140 zd_half = zd_tot / 2.
142 zd_mid = 2. * zd_tot / iout
143 IF (iout==3) zd_mid = max(zd_mid,zd_tot-2.*zd_g1)
145 zd_half = (zd_tot-zd_mid) / 2.
146 pd_out(ji,iout/2+1) = zd_mid
149 CALL tebgrid(zd_half,zd_out(1:iout/2),zd_g1)
153 IF (jout<=iout/2)
THEN 154 pd_out(ji,jout) = zd_out(jout) - zd_out(jout-1)
155 pd_out(ji,iout+1-jout) = pd_out(ji,jout)
159 IF (jout>1) zd_out(jout) = zd_out(jout-1) + pd_out(ji,jout)
171 IF (
PRESENT(ptc))
THEN 176 IF (
PRESENT(phc))
THEN 182 CALL av_thermal_data(iout,pd(ji,:),zd_in(1:iin),zd_out(1:iout),zhc,zw,zhc_out
184 IF (
PRESENT(ptc_out))
THEN 186 WHERE (zw_out(:)/=
xundef) ptc_out(ji,:)=1./zw_out(:)
188 IF (
PRESENT(phc_out)) phc_out(ji,:) = zhc_out(:)
192 IF (
lhook)
CALL dr_hook(
'THERMAL_LAYER_CONF_2',1,zhook_handle_omp)
198 SUBROUTINE av_thermal_data(KOUT,PDD,PDD_IN,PDD_OUT,PF1,PF2,PF1_OUT,PF2_OUT)
202 INTEGER,
INTENT(IN) :: KOUT
203 REAL,
DIMENSION(:),
INTENT(IN) :: PDD
204 REAL,
DIMENSION(:),
INTENT(IN) :: PDD_IN
205 REAL,
DIMENSION(:),
INTENT(IN) :: PDD_OUT
206 REAL,
DIMENSION(:),
INTENT(IN) :: PF1
207 REAL,
DIMENSION(:),
INTENT(IN) :: PF2
208 REAL,
DIMENSION(:),
INTENT(OUT) :: PF1_OUT
209 REAL,
DIMENSION(:),
INTENT(OUT) :: PF2_OUT
221 REAL(KIND=JPRB) :: ZHOOK_HANDLE
243 IF (pdd_in(jin)< pdd_out(jout)-zeps)
THEN 246 zc = pdd_in(jin) - zd_lim
247 zf1 = zf1 + zc * pf1(jin)
248 zf2 = zf2 + zc * pf2(jin)
257 zc = pdd_out(jout) - zd_lim
258 zf1 = zf1 + zc * pf1(jin)
259 zf2 = zf2 + zc * pf2(jin)
261 pf1_out(jout) = zf1/zs
262 pf2_out(jout) = zf2/zs
263 zd_lim = pdd_out(jout)
279 SUBROUTINE tebgrid( PSOILDEPTH, PD_G, PD_G1 )
337 REAL,
INTENT(IN) :: PSOILDEPTH
339 REAL,
DIMENSION(:),
INTENT(OUT) :: PD_G
340 REAL,
OPTIONAL,
INTENT(IN) :: PD_G1
345 INTEGER :: JJ, JI, JNLVL
348 REAL,
PARAMETER :: ZGRIDFACTOR = 3.0
368 REAL(KIND=JPRB) :: ZHOOK_HANDLE
375 IF (
PRESENT(pd_g1)) zd_g1 = pd_g1
377 IF (psoildepth < jnlvl*zd_g1)
THEN 386 pd_g(jj) = jj*psoildepth/jnlvl
392 pd_g(jnlvl) = psoildepth
403 pd_g(jj) = pd_g(jj+1)/zgridfactor
414 pd_g(jj) = max(pd_g(jj), jj*zd_g1)
subroutine av_thermal_data(KOUT, PDD, PDD_IN, PDD_OUT, PF1, PF2, PF1_OUT, PF2_O
subroutine abor1_sfx(YTEXT)
subroutine thermal_layers_conf(HTYPE, PD, PD_OUT, PHC, PHC_OUT, PTC, PTC
subroutine tebgrid(PSOILDEPTH, PD_G, PD_G1)