82 #if ! defined in_surfex
83 USE mode_gltools_bound
89 TYPE(t_glt),
INTENT(inout) :: &
92 INTEGER,
PARAMETER :: jkmax=3
95 INTEGER,
DIMENSION(jkmax,SIZE(tpglt%dom,1),SIZE(tpglt%dom,2)) :: &
97 INTEGER,
DIMENSION(nt,SIZE(tpglt%dom,1),SIZE(tpglt%dom,2)) :: &
99 REAL,
DIMENSION(SIZE(tpglt%dom,1),SIZE(tpglt%dom,2)) :: &
101 zfsite,ztmke,ztmke0,zwork2
103 DIMENSION(SIZE(tpglt%sit,1),SIZE(tpglt%sit,2),SIZE(tpglt%sit,3)) :: &
152 zfsit(:,:) = sum( tzsit(:,:,:)%fsi,dim=1 )
191 IF ( nnflxin/=0 )
THEN
194 WRITE(noutlu,*)
'*********************************************'
195 WRITE(noutlu,*)
' DOUBLE / MULTIPLE FLUX MODE (INPUT)'
199 WHERE( zfsit(:,:)>epsil1 )
200 ztsfm(:,:) = sum( tzsit(:,:,:)%fsi*tzsit(:,:,:)%tsf,dim=1 ) / &
202 zalbm(:,:) = sum( tzsit(:,:,:)%fsi*tzsit(:,:,:)%asn,dim=1 ) / &
205 WHERE( zfsit(:,:)<=epsil1 )
206 ztsfm(:,:) = tpglt%tml(:,:)%mlf
212 IF ( nnflxin==1 )
THEN
215 WRITE(noutlu,*)
' (only 1 flux provided for all ice cats)'
216 WRITE(noutlu,*)
'*********************************************'
222 tpglt%blki(jk,:,:)%nsf = tpglt%atm_ice(1,:,:)%nsf + &
223 tpglt%atm_ice(1,:,:)%dfl * &
224 ( tzsit(jk,:,:)%tsf-ztsfm(:,:) )
226 tpglt%blki(jk,:,:)%swa = tpglt%atm_ice(1,:,:)%swa * &
227 ( 1.-tzsit(jk,:,:)%asn ) / ( 1.-zalbm(:,:) )
230 tpglt%blki(jk,:,:)%dfl = tpglt%atm_ice(1,:,:)%dfl
234 tpglt%blki(jk,:,:)%eva = tpglt%atm_ice(1,:,:)%eva
241 WRITE(noutlu,*)
' (1 flux provided for every ice cat)'
242 WRITE(noutlu,*)
'*****************************************'
248 tpglt%blki(:,:,:)%nsf = tpglt%atm_ice(:,:,:)%nsf
251 tpglt%blki(:,:,:)%swa = tpglt%atm_ice(:,:,:)%swa
254 tpglt%blki(:,:,:)%dfl = tpglt%atm_ice(:,:,:)%dfl
258 tpglt%blki(:,:,:)%eva = tpglt%atm_ice(:,:,:)%eva
266 tpglt%blkw(:,:)%nsf = tpglt%atm_wat(:,:)%nsf
269 tpglt%blkw(:,:)%swa = tpglt%atm_wat(:,:)%swa
272 tpglt%blkw(:,:)%dfl = tpglt%atm_wat(:,:)%dfl
276 tpglt%blkw(:,:)%eva = tpglt%atm_wat(:,:)%eva
285 WRITE(noutlu,*)
'*****************************************'
286 WRITE(noutlu,*)
' SINGLE PHYSICS MODE'
287 WRITE(noutlu,*)
'*****************************************'
295 ztsfm(:,:) = sum( tzsit(:,:,:)%fsi*tzsit(:,:,:)%tsf,dim=1 ) + &
296 ( 1.-zfsit(:,:) )*tpglt%tml(:,:)%tml
297 zalbm(:,:) = sum( tzsit(:,:,:)%fsi*tzsit(:,:,:)%asn,dim=1 ) + &
298 ( 1.-zfsit(:,:) )*albw
313 tpglt%blki(jk,:,:)%nsf = tpglt%atm_mix(1,:,:)%nsf + &
314 tpglt%atm_mix(1,:,:)%dfl * &
315 ( tzsit(jk,:,:)%tsf-ztsfm(:,:) )
318 tpglt%blki(jk,:,:)%swa = tpglt%atm_mix(1,:,:)%swa * &
319 ( 1.-tzsit(jk,:,:)%asn ) / ( 1.-zalbm(:,:) )
323 tpglt%blki(jk,:,:)%dfl = tpglt%atm_mix(1,:,:)%dfl
327 tpglt%blki(jk,:,:)%eva = tpglt%atm_mix(1,:,:)%eva
340 zfsite(:,:)=zfsit(:,:)
342 ztmke0(:,:) = float(tpglt%dom%tmk)
344 WHERE( zfsite(:,:)<0.5 .OR. ztmke0(:,:)<0.5 )
350 ztmke=float(itmk(jk-1,:,:))
353 IF( any( ( zfsite(ji-1:ji+1,jj-1:jj+1)<0.5 .OR. &
354 itmk(jk-1,ji-1:ji+1,jj-1:jj+1)==0 ).AND. &
355 ztmke0(ji-1:ji+1,jj-1:jj+1)>0.5 ) )
THEN
360 #if ! defined in_surfex
361 CALL gltools_bound(
'T',
'scalar',ztmke )
363 itmk(jk,:,:)=int(ztmke)
368 itmk0 = spread( itmk(jkmax,:,:),1,nt )
373 WHERE( tzsit(:,:,:)%tsf<245.-t0deg .AND. tzsit(:,:,:)%fsi>epsil1 .AND. &
375 tpglt%blki(:,:,:)%nsf = amax1( &
376 tpglt%blki(:,:,:)%nsf, &
377 tpglt%blki(:,:,:)%dfl*amax1( tzsit(:,:,:)%tsf-(233.-t0deg),0. ) )
385 tpglt%blkw(:,:)%nsf = tpglt%atm_mix(1,:,:)%nsf + &
386 tpglt%atm_mix(1,:,:)%dfl * ( tpglt%tml(:,:)%tml-ztsfm(:,:) )
389 tpglt%blkw(:,:)%swa = tpglt%atm_mix(1,:,:)%swa * &
390 ( 1.-albw ) / ( 1.-zalbm(:,:) )
393 tpglt%blkw(:,:)%dfl = tpglt%atm_mix(1,:,:)%dfl
397 tpglt%blkw(:,:)%eva = tpglt%atm_mix(1,:,:)%eva
406 tpglt%dia(:,:)%ifw = tpglt%atm_all(:,:)%sop + tpglt%atm_all(:,:)%lip + &
407 ( 1.-zfsit(:,:) )*tpglt%blkw(:,:)%eva + &
408 sum( tzsit(:,:,:)%fsi*tpglt%blki(:,:,:)%eva, dim=1 )
411 tpglt%dia(:,:)%swi = sum( tzsit(:,:,:)%fsi*tpglt%blki(:,:,:)%swa, dim=1 )
414 tpglt%dia(:,:)%sww = ( 1.-zfsit(:,:) )*tpglt%blkw(:,:)%swa
subroutine glt_getatmf(tpglt)