59 USE modi_open_namelist
60 USE modi_close_namelist
62 USE modi_sum_on_all_procs
67 USE yomhook
,ONLY : lhook, dr_hook
68 USE parkind1
,ONLY : jprb
83 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
84 LOGICAL,
INTENT(OUT) :: oecoclimap
96 REAL,
DIMENSION(NL) :: zsum
101 LOGICAL :: lecoclimap
109 CHARACTER(LEN=28) :: cfnam_sea
110 CHARACTER(LEN=28) :: cfnam_water
111 CHARACTER(LEN=28) :: cfnam_nature
112 CHARACTER(LEN=28) :: cfnam_town
116 CHARACTER(LEN=6) :: cftyp_sea
117 CHARACTER(LEN=6) :: cftyp_water
118 CHARACTER(LEN=6) :: cftyp_nature
119 CHARACTER(LEN=6) :: cftyp_town
125 REAL(KIND=JPRB) :: zhook_handle
128 namelist/nam_frac/ lecoclimap, &
129 xunif_sea, xunif_water, xunif_nature, xunif_town, &
130 cfnam_sea, cfnam_water, cfnam_nature, cfnam_town, &
131 cftyp_sea, cftyp_water, cftyp_nature, cftyp_town
137 IF (lhook) CALL dr_hook(
'PGD_FRAC',0,zhook_handle)
140 xunif_nature = xundef
162 CALL
posnam(ilunam,
'NAM_FRAC',gfound,iluout)
163 IF (gfound)
READ(unit=ilunam,nml=nam_frac)
169 IF ((len_trim(cfnam_sea)/=0 .OR. xunif_sea/=xundef) .AND. (len_trim(cfnam_water)/=0 .OR. xunif_water/=xundef) .AND. &
170 (len_trim(cfnam_nature)/=0 .OR. xunif_nature/=xundef) .AND. (len_trim(cfnam_town)/=0 .OR. xunif_town/=xundef))
THEN
172 ALLOCATE(u%XSEA (nl))
173 ALLOCATE(u%XWATER (nl))
174 ALLOCATE(u%XNATURE(nl))
175 ALLOCATE(u%XTOWN (nl))
180 IF (xunif_sea/=xundef .AND. xunif_water/=xundef .AND. xunif_nature/=xundef .AND. xunif_town/=xundef)
THEN
185 IF (abs(xunif_sea+xunif_water+xunif_nature+xunif_town-1.)>1.e-6)
THEN
187 WRITE(iluout,*)
'*********************************************************'
188 WRITE(iluout,*)
'* Error in fractions preparation *'
189 WRITE(iluout,*)
'* The prescribed fractions do not fit *'
190 WRITE(iluout,*)
'* The sum of all 4 fractions must be equal to 1 exactly *'
191 WRITE(iluout,*)
'*********************************************************'
193 CALL
abor1_sfx(
'PGD_FRAC: SUM OF ALL FRACTIONS MUST BE 1.')
201 u%XWATER = xunif_water
202 u%XNATURE = xunif_nature
213 IF (xunif_sea==xundef)
THEN
215 hprogram,
'XSEA: sea fraction ',
'ALL', cfnam_sea , &
216 cftyp_sea , xunif_sea , u%XSEA(:) )
218 u%XSEA(:) = xunif_sea
220 IF (xunif_water==xundef)
THEN
222 hprogram,
'XWATER: water fraction ',
'ALL', cfnam_water , &
223 cftyp_water , xunif_water , u%XWATER(:) )
225 u%XWATER(:) = xunif_water
227 IF (xunif_nature==xundef)
THEN
229 hprogram,
'XNATURE: nature fraction',
'ALL', cfnam_nature, &
230 cftyp_nature, xunif_nature, u%XNATURE(:))
232 u%XNATURE(:) = xunif_nature
234 IF (xunif_town==xundef)
THEN
236 hprogram,
'XTOWN: town fraction ',
'ALL', cfnam_town , &
237 cftyp_town , xunif_town , u%XTOWN(:) )
239 u%XTOWN(:) = xunif_town
248 IF (lhook) CALL dr_hook(
'PGD_FRAC',1,zhook_handle)
256 zsum(:) = u%XSEA(:) + u%XNATURE(:) + u%XWATER(:) + u%XTOWN(:)
258 u%XSEA(:) = u%XSEA(:) / zsum(:)
259 u%XNATURE(:) = u%XNATURE(:) / zsum(:)
260 u%XWATER(:) = u%XWATER(:) / zsum(:)
261 u%XTOWN(:) = u%XTOWN(:) / zsum(:)
268 oecoclimap = lecoclimap
273 IF (.NOT.lecoclimap)
THEN
275 ALLOCATE(u%LCOVER(jpcover))
276 u%LCOVER(:) = .false.
295 u%LCOVER(151) = .true.
299 ALLOCATE(u%XCOVER (nl,icover))
302 IF (u%LCOVER(1))
THEN
304 u%XCOVER(:,icpt) = u%XSEA(:)
306 IF (u%LCOVER(2))
THEN
308 u%XCOVER(:,icpt) = u%XWATER(:)
310 IF (u%LCOVER(4))
THEN
312 u%XCOVER(:,icpt) = u%XNATURE(:)
314 IF (u%LCOVER(151))
THEN
316 u%XCOVER(:,icpt) = u%XTOWN(:)
329 u%NSIZE_NATURE = count(u%XNATURE(:) > 0.0)
330 u%NSIZE_WATER = count(u%XWATER (:) > 0.0)
331 u%NSIZE_SEA = count(u%XSEA (:) > 0.0)
332 u%NSIZE_TOWN = count(u%XTOWN (:) > 0.0)
341 IF (lhook) CALL dr_hook(
'PGD_FRAC',1,zhook_handle)
subroutine pgd_field(DTCO, UG, U, USS, HPROGRAM, HFIELD, HAREA, HFILE, HFILETYPE, PUNIF, PFIELD, OPRESENT)
integer function sum_on_all_procs(HPROGRAM, HGRID, OIN, HNAME)
subroutine abor1_sfx(YTEXT)
subroutine pgd_frac(DTCO, UG, U, USS, HPROGRAM, OECOCLIMAP)
subroutine close_namelist(HPROGRAM, KLUNAM)
subroutine posnam(KULNAM, HDNAML, OFOUND, KLUOUT)
subroutine get_luout(HPROGRAM, KLUOUT)
subroutine open_namelist(HPROGRAM, KLUNAM, HFILE)