6 SUBROUTINE pgd_orography (DTCO, UG, U, USS, HPROGRAM, HFILE, HFILETYPE, OZS)
59 USE modi_open_aux_io_surf
60 USE modi_close_aux_io_surf
61 USE modi_read_nam_pgd_orography
64 USE modi_read_pgd_netcdf
65 USE modi_interpol_field
68 USE modi_get_size_full_n
72 USE modi_init_io_surf_n
73 USE modi_end_io_surf_n
84 USE modi_explicit_slope
101 TYPE(
sso_t),
INTENT(INOUT) :: USS
103 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
104 CHARACTER(LEN=28),
INTENT(IN) :: HFILE
105 CHARACTER(LEN=6),
INTENT(IN) :: HFILETYPE
106 LOGICAL,
INTENT(IN) :: OZS
115 REAL,
DIMENSION(:),
POINTER :: ZSLOPE
117 REAL,
PARAMETER :: PP_DEG2RAD= 3.141592654/180.
120 LOGICAL,
DIMENSION(NL) :: GSSO
121 LOGICAL,
DIMENSION(NL) :: GSSO_ANIS
122 LOGICAL,
DIMENSION(NL) :: GZ0EFFI
123 LOGICAL,
DIMENSION(NL) :: GZ0EFFJ
124 INTEGER,
DIMENSION(NL) :: IFLAG
133 CHARACTER(LEN=28) :: YZS
134 CHARACTER(LEN=6) :: YFILETYPE
135 CHARACTER(LEN=28) :: YSLOPE
136 CHARACTER(LEN=6) :: YSLOPEFILETYPE
138 CHARACTER(LEN=3) :: COROGTYPE
145 LOGICAL :: LEXPLICIT_SLOPE
147 REAL(KIND=JPRB) :: ZHOOK_HANDLE
163 corogtype, xenv, limp_zs, &
164 yslope, yslopefiletype, lexplicit_slope)
175 ALLOCATE(uss%XAVG_ZS (
nl))
176 ALLOCATE(uss%XSIL_ZS (
nl))
177 ALLOCATE(uss%XSSO_STDEV (
nl))
178 ALLOCATE(uss%XMIN_ZS (
nl))
179 ALLOCATE(uss%XMAX_ZS (
nl))
181 ALLOCATE(uss%XSSO_ANIS (
nl))
182 ALLOCATE(uss%XSSO_DIR (
nl))
183 ALLOCATE(uss%XSSO_SLOPE (
nl))
185 ALLOCATE(uss%XAOSIP (
nl))
186 ALLOCATE(uss%XAOSIM (
nl))
187 ALLOCATE(uss%XAOSJP (
nl))
188 ALLOCATE(uss%XAOSJM (
nl))
189 ALLOCATE(uss%XHO2IP (
nl))
190 ALLOCATE(uss%XHO2IM (
nl))
191 ALLOCATE(uss%XHO2JP (
nl))
192 ALLOCATE(uss%XHO2JM (
nl))
197 uss%XSSO_STDEV(:) =
xundef 198 uss%XMIN_ZS (:) = 99999.
199 uss%XMAX_ZS (:) =-99999.
201 uss%XSSO_ANIS (:) =
xundef 203 uss%XSSO_SLOPE(:) =
xundef 229 CALL read_surf(hfiletype,
'DIM_FULL ',idim_full,iresp)
233 WRITE(iluout,*)
'***********************************************************' 234 WRITE(iluout,*)
'* Error in orography preparation *' 235 WRITE(iluout,*)
'* Prescribed orography from atmospheric model does not *' 236 WRITE(iluout,*)
'* have the correct number of points *' 237 WRITE(iluout,*)
'* number of points in atmospheric orography: ', izs
238 WRITE(iluout,*)
'* number of points in the surface : ',
nl 239 WRITE(iluout,*)
'***********************************************************' 241 CALL abor1_sfx(
'PGD_OROGRAPHY: ATMOSPHERIC PRESCRIBED OROGRAPHY DOES NOT HAVE THE CORRECT NB OF POINTS' 243 CALL read_surf(hfiletype,
'ZS',u%XZS(:),iresp)
246 uss%XAVG_ZS(:) = u%XZS(:)
247 uss%XSIL_ZS(:) = u%XZS(:)
248 uss%XMIN_ZS(:) = u%XZS(:)
249 uss%XMAX_ZS(:) = u%XZS(:)
250 uss%XSSO_STDEV(:) = 0.
259 uss%XSSO_ANIS(:) = 0.
261 uss%XSSO_SLOPE(:) = 0.
267 ELSE IF (xunif_zs/=
xundef)
THEN 273 uss%XAVG_ZS(:) = u%XZS(:)
274 uss%XSIL_ZS(:) = u%XZS(:)
275 uss%XMIN_ZS(:) = u%XZS(:)
276 uss%XMAX_ZS(:) = u%XZS(:)
277 uss%XSSO_STDEV(:) = 0.
286 uss%XSSO_ANIS(:) = 0.
288 uss%XSSO_SLOPE(:) = 0.
296 ELSEIF (len_trim(yzs)==0)
THEN 299 WRITE(iluout,*)
'***********************************************************' 300 WRITE(iluout,*)
'* Error in orography preparation *' 301 WRITE(iluout,*)
'* There is no prescribed orography and no input file *' 302 WRITE(iluout,*)
'***********************************************************' 304 CALL abor1_sfx(
'PGD_OROGRAPHY: NO PRESCRIBED OROGRAPHY NOR INPUT FILE' 306 ELSEIF (limp_zs)
THEN 308 IF(yfiletype==
'NETCDF')
THEN 312 hprogram,
'SURF ',
' ',yzs,
'ZS ' 332 IF (len_trim(yslope)/=0)
THEN 337 hprogram,
'SURF ',
' ',yslope,
'slope ' 340 uss%XSSO_SLOPE(jj)=tan(zslope(jj)*pp_deg2rad)
349 cfilein = adjustl(adjustr(yzs)//
'.txt')
360 CALL read_surf(yfiletype,
'ZS',u%XZS(:),iresp)
361 CALL read_sso_n(u%NSIZE_FULL, u%XSEA, uss, yfiletype)
373 ALLOCATE(
xall(u%NDIM_FULL,2,1))
385 hprogram,
'SURF ',yfiletype,
'A_OROG',yzs,
'ZS ' 392 IF (.NOT.
ALLOCATED(
nsize))
THEN 402 WHERE (u%XSEA(:)==1. .AND.
nsize(:,1)==0)
nsize(:,1) = -1
413 hprogram,iluout,
nsize(:,1),uss%XAVG_ZS,
'average orography' 415 hprogram,iluout,
nsize(:,1),uss%XSIL_ZS,
'silhouette orography' 417 hprogram,iluout,
nsize(:,1),uss%XMIN_ZS,
'minimum orography' 419 hprogram,iluout,
nsize(:,1),uss%XMAX_ZS,
'maximum orography' 421 iflag(:) =
nsize(:,1)
422 WHERE (
nsize(:,1)==1) iflag(:) = 0
424 hprogram,iluout,iflag,uss%XSSO_STDEV,
'standard deviation of orography' 431 uss%XAVG_ZS (:) = uss%XAVG_ZS (:) * (1. - u%XSEA(:))
432 uss%XSIL_ZS (:) = uss%XSIL_ZS (:) * (1. - u%XSEA(:))
434 WHERE (u%XSEA(:)==1.)
435 uss%XSSO_STDEV(:) =
xundef 438 WHERE (u%XWATER(:)==1.)
439 uss%XSSO_STDEV(:) = 0.
453 WHERE (uss%XAVG_ZS==
xundef) uss%XAVG_ZS = uss%XAVG_ZS + zeps
454 WHERE (uss%XSIL_ZS==
xundef) uss%XSIL_ZS = uss%XSIL_ZS + zeps
455 WHERE (uss%XMIN_ZS==
xundef) uss%XMIN_ZS = uss%XMIN_ZS + zeps
456 WHERE (uss%XMAX_ZS==
xundef) uss%XMAX_ZS = uss%XMAX_ZS + zeps
463 SELECT CASE (corogtype)
465 u%XZS(:) = uss%XAVG_ZS(:)
467 u%XZS(:) = uss%XAVG_ZS(:)
468 WHERE (u%XSEA(:)<1.) u%XZS(:) = uss%XAVG_ZS(:) + xenv * uss%XSSO_STDEV
470 u%XZS(:) = uss%XSIL_ZS(:)
472 u%XZS(:) = uss%XMAX_ZS(:)
474 CALL abor1_sfx(
'PGD_OROGRAPHY: OROGRAPHY TYPE NOT SUPPORTED '//corogtype
482 CALL sso(u, ug, uss, gsso, gsso_anis)
484 iflag(:) =
nsize(:,1)
485 WHERE(.NOT. gsso(:)) iflag(:) = 0
486 WHERE(u%XSEA(:)==1. .AND. iflag(:)==0) iflag(:) = -1
489 hprogram,iluout,iflag,uss%XSSO_DIR,
'subgrid orography direction' 491 IF (lexplicit_slope)
THEN 493 ELSEIF (len_trim(yslope)==0)
THEN 495 hprogram,iluout,iflag,uss%XSSO_SLOPE,
'subgrid orography slope' 498 iflag(:) =
nsize(:,1)
499 WHERE(.NOT. gsso_anis(:)) iflag(:) = 0
500 WHERE(u%XSEA(:)==1. .AND. iflag(:)==0) iflag(:) = -1
503 hprogram,iluout,iflag,uss%XSSO_ANIS,
'subgrid orography anisotropy' 505 WHERE (u%XSEA(:)==1.)
506 uss%XSSO_ANIS (:) =
xundef 508 uss%XSSO_SLOPE(:) =
xundef 511 WHERE (u%XWATER(:)==1.)
512 uss%XSSO_ANIS (:) = 1.
513 uss%XSSO_DIR (:) = 0.
514 uss%XSSO_SLOPE(:) = 0.
524 iflag(:) =
nsize(:,1)
525 WHERE(.NOT. gz0effi(:)) iflag(:) = 0
526 WHERE(u%XSEA(:)==1. .AND. iflag(:)==0) iflag(:) = -1
528 hprogram,iluout,iflag,uss%XAOSIP,
'subgrid orography A/S, direction i+' 530 hprogram,iluout,iflag,uss%XAOSIM,
'subgrid orography A/S, direction i-' 532 hprogram,iluout,iflag,uss%XHO2IP,
'subgrid orography h/2, direction i+' 534 hprogram,iluout,iflag,uss%XHO2IM,
'subgrid orography h/2, direction i-' 536 iflag(:) =
nsize(:,1)
537 WHERE(.NOT. gz0effj(:)) iflag(:) = 0
538 WHERE(u%XSEA(:)==1. .AND. iflag(:)==0) iflag(:) = -1
540 hprogram,iluout,iflag,uss%XAOSJP,
'subgrid orography A/S, direction j+' 542 hprogram,iluout,iflag,uss%XAOSJM,
'subgrid orography A/S, direction j-' 544 hprogram,iluout,iflag,uss%XHO2JP,
'subgrid orography h/2, direction j+' 546 hprogram,iluout,iflag,uss%XHO2JM,
'subgrid orography h/2, direction j-' 548 WHERE (u%XSEA(:)==1.)
559 WHERE (u%XWATER(:)==1.)
subroutine read_pgd_netcdf(UG, U, USS, HPROGRAM, HSCHEME, HSUBROUTINE, HFILENAME, HFIELD, PFIELD)
integer, dimension(:,:), allocatable nsize_all
real, dimension(:,:,:), allocatable xall
subroutine read_sso_n(KSIZE_FULL, PSEA, USS, HPROGRAM)
subroutine get_size_full_n(HPROGRAM, KDIM_FULL, KSIZE_FULL_IN, KSIZE
subroutine pgd_orography(DTCO, UG, U, USS, HPROGRAM, HFILE, HFILE
subroutine close_aux_io_surf(HFILE, HFILETYPE)
logical, dimension(:,:,:), allocatable lssqo
subroutine abor1_sfx(YTEXT)
subroutine explicit_slope(UG, KDIM_FULL, PZS, PSSO_SLOPE)
subroutine sso(U, UG, USS, OSSO, OSSO_ANIS)
real, dimension(:), pointer xgrid_par
real, dimension(:,:), allocatable xsumval
integer, parameter nundef
subroutine subscale_aos(U, UG, USS, OZ0EFFI, OZ0EFFJ)
real, dimension(:,:,:), allocatable xssqo
subroutine end_io_surf_n(HPROGRAM)
subroutine get_luout(HPROGRAM, KLUOUT)
integer, dimension(:,:), allocatable nsize
real, dimension(:,:), allocatable xext_all
subroutine treat_field(UG, U, USS, HPROGRAM, HSCHEME, HFILETYPE, HSUBROUTINE, HFILENAME, HFIELD, PPGDARRAY)
character(len=28), save cfilein
character(len=28), save cfilein_fa
subroutine init_io_surf_n(DTCO, U, HPROGRAM, HMASK, HSCHEME, HACTION
subroutine interpol_field(UG, U, HPROGRAM, KLUOUT, KCODE, PFIELD, HFIELD, PDE
subroutine open_aux_io_surf(HFILE, HFILETYPE, HMASK, HDIR)
character(len=28), save cfilein_lfi
subroutine read_nam_pgd_orography(HPROGRAM, HZS, HFILETYPE, PUNIF_