6 SUBROUTINE pgd_frac (DTCO, UG, U, USS, HPROGRAM)
53 USE modd_data_cover_par
, ONLY : jpcover, ncover, ntype
58 USE modi_open_namelist
59 USE modi_close_namelist
61 USE modi_sum_on_all_procs
80 TYPE(
sso_t),
INTENT(INOUT) :: USS
82 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
93 REAL,
DIMENSION(NL) :: ZSUM
107 CHARACTER(LEN=28) :: CFNAM_SEA
108 CHARACTER(LEN=28) :: CFNAM_WATER
109 CHARACTER(LEN=28) :: CFNAM_NATURE
110 CHARACTER(LEN=28) :: CFNAM_TOWN
114 CHARACTER(LEN=6) :: CFTYP_SEA
115 CHARACTER(LEN=6) :: CFTYP_WATER
116 CHARACTER(LEN=6) :: CFTYP_NATURE
117 CHARACTER(LEN=6) :: CFTYP_TOWN
119 INTEGER,
DIMENSION(4) :: ID_COV
124 REAL(KIND=JPRB) :: ZHOOK_HANDLE
127 NAMELIST/nam_frac/ lecoclimap, lecosg, &
128 xunif_sea, xunif_water, xunif_nature, xunif_town, &
129 cfnam_sea, cfnam_water, cfnam_nature, cfnam_town, &
130 cftyp_sea, cftyp_water, cftyp_nature, cftyp_town
152 u%LECOCLIMAP = .true.
163 CALL posnam(ilunam,
'NAM_FRAC',gfound,iluout)
164 IF (gfound)
READ(unit=ilunam,nml=nam_frac)
172 IF ((len_trim(cfnam_sea)/=0 .OR. xunif_sea/=
xundef) .AND. (len_trim(cfnam_water
175 ALLOCATE(u%XSEA (
nl))
176 ALLOCATE(u%XWATER (
nl))
177 ALLOCATE(u%XNATURE(
nl))
178 ALLOCATE(u%XTOWN (
nl))
188 IF (abs(xunif_sea+xunif_water+xunif_nature+xunif_town-1.)>1.e-6)
THEN 190 WRITE(iluout,*)
'*********************************************************' 191 WRITE(iluout,*)
'* Error in fractions preparation *' 192 WRITE(iluout,*)
'* The prescribed fractions do not fit *' 193 WRITE(iluout,*)
'* The sum of all 4 fractions must be equal to 1 exactly *' 194 WRITE(iluout,*)
'*********************************************************' 196 CALL abor1_sfx(
'PGD_FRAC: SUM OF ALL FRACTIONS MUST BE 1.')
204 u%XWATER = xunif_water
205 u%XNATURE = xunif_nature
216 IF (xunif_sea==
xundef)
THEN 218 hprogram,
'XSEA: sea fraction ',
'ALL', cfnam_sea
221 u%XSEA(:) = xunif_sea
223 IF (xunif_water==
xundef)
THEN 225 hprogram,
'XWATER: water fraction ',
'ALL', cfnam_water
228 u%XWATER(:) = xunif_water
230 IF (xunif_nature==
xundef)
THEN 232 hprogram,
'XNATURE: nature fraction',
'ALL', cfnam_nature
235 u%XNATURE(:) = xunif_nature
237 IF (xunif_town==
xundef)
THEN 239 hprogram,
'XTOWN: town fraction ',
'ALL', cfnam_town
242 u%XTOWN(:) = xunif_town
259 zsum(:) = u%XSEA(:) + u%XNATURE(:) + u%XWATER(:) + u%XTOWN(:)
261 u%XSEA(:) = u%XSEA(:) / zsum(:)
262 u%XNATURE(:) = u%XNATURE(:) / zsum(:)
263 u%XWATER(:) = u%XWATER(:) / zsum(:)
264 u%XTOWN(:) = u%XTOWN(:) / zsum(:)
271 u%LECOCLIMAP = lecoclimap
276 IF (.NOT.lecoclimap)
THEN 278 IF (.NOT.lecosg)
THEN 292 ALLOCATE(u%LCOVER(jpcover))
293 u%LCOVER(:) = .false.
297 u%LCOVER(id_cov(1)) = .true.
302 u%LCOVER(id_cov(2)) = .true.
307 u%LCOVER(id_cov(3)) = .true.
312 u%LCOVER(id_cov(4)) = .true.
316 ALLOCATE(u%XCOVER (
nl,icover))
319 IF (u%LCOVER(id_cov(1)))
THEN 321 u%XCOVER(:,icpt) = u%XSEA(:)
323 IF (u%LCOVER(id_cov(2)))
THEN 325 u%XCOVER(:,icpt) = u%XWATER(:)
327 IF (u%LCOVER(id_cov(3)))
THEN 329 u%XCOVER(:,icpt) = u%XNATURE(:)
331 IF (u%LCOVER(id_cov(4)))
THEN 333 u%XCOVER(:,icpt) = u%XTOWN(:)
346 u%NSIZE_NATURE =
count(u%XNATURE(:) > 0.0)
347 u%NSIZE_WATER =
count(u%XWATER (:) > 0.0)
348 u%NSIZE_SEA =
count(u%XSEA (:) > 0.0)
349 u%NSIZE_TOWN =
count(u%XTOWN (:) > 0.0)
subroutine pgd_frac(DTCO, UG, U, USS, HPROGRAM)
integer function sum_on_all_procs(HPROGRAM, HGRID, OIN, HNAME)
subroutine posnam(KULNAM, HDNAML, OFOUND, KLUOUT)
subroutine abor1_sfx(YTEXT)
subroutine close_namelist(HPROGRAM, KLUNAM)
subroutine get_luout(HPROGRAM, KLUOUT)
intent(out) overrides sub arrays one Sort by the least significant key first sum(iindex(1:n))
subroutine open_namelist(HPROGRAM, KLUNAM, HFILE)