7 HPROGRAM,HSCHEME,HFILETYPE, &
8 HSUBROUTINE,HFILENAME,HFIELD, &
70 USE modd_data_cover_par
, ONLY : jpcover
75 USE modi_read_direct_gauss
78 USE modi_read_binllvfast
81 USE modi_read_pgd_netcdf
82 USE modi_average2_mesh
85 USE modi_average2_cover
88 USE modi_average2_orography
105 TYPE(
sso_t),
INTENT(INOUT) :: USS
107 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
108 CHARACTER(LEN=6),
INTENT(IN) :: HSCHEME
109 CHARACTER(LEN=6),
INTENT(IN) :: HFILETYPE
110 CHARACTER(LEN=6),
INTENT(IN) :: HSUBROUTINE
111 CHARACTER(LEN=28),
INTENT(IN) :: HFILENAME
112 CHARACTER(LEN=20),
INTENT(IN) :: HFIELD
113 REAL,
DIMENSION(:,:),
INTENT(INOUT),
OPTIONAL :: PPGDARRAY
118 INTEGER,
DIMENSION(:,:,:),
ALLOCATABLE :: I3D_ALL
119 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IMASK
120 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: ZVALLIST, ZVAL
121 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZEXTVAL
122 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: ISIZE0
123 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: IVALNBR
124 INTEGER,
DIMENSION(:,:,:),
ALLOCATABLE :: IVALCOUNT
125 INTEGER,
DIMENSION(:,:,:),
ALLOCATABLE :: ISIZE
130 INTEGER,
DIMENSION(MPI_STATUS_SIZE) :: ISTATUS
131 INTEGER,
DIMENSION(MPI_STATUS_SIZE,NPROC-1) :: ISTATUS2
133 INTEGER,
DIMENSION(0:NPROC-1) :: ITCOV
134 INTEGER :: ILUOUT, IS2, INFOMPI, JP, ICPT, JCOV, JI, JL, IREQ, IDX,&
136 LOGICAL :: GMULTITYPE
137 REAL(KIND=JPRB) :: ZHOOK_HANDLE, ZHOOK_HANDLE_OMP
147 IF (hfiletype==
'DIRTYP') gmultitype = .true.
149 SELECT CASE (hfiletype)
151 CASE (
'DIRECT',
'DIRTYP')
152 IF(ug%G%CGRID==
"GAUSS " .OR. ug%G%CGRID==
"IGN " .OR. ug%G%CGRID
"LONLAT REG"THEN 154 hprogram,hscheme,hsubroutine,hfilename,hfield
157 hprogram,hscheme,hsubroutine,hfilename,hfield,gmultitype
163 hprogram,hsubroutine,hfilename)
168 hprogram,hsubroutine,hfilename)
173 hprogram,hsubroutine,hfilename)
178 hprogram,hscheme,hsubroutine,hfilename)
183 hprogram,hscheme,hsubroutine,hfilename,hfield
186 CALL abor1_sfx(
'TREAT_FIELD: FILE TYPE NOT SUPPORTED: '//hfiletype)
199 IF (hfiletype==
'DIRECT'.OR.hfiletype==
'DIRTYP')
THEN 201 IF (
lhook)
CALL dr_hook(
'TREAT_FIELD_21',0,zhook_handle)
204 ALLOCATE(isize0(nsize_max,
SIZE(
nsize_all,2)))
207 idx = idx_save +
nrank 212 IF (
lhook)
CALL dr_hook(
'TREAT_FIELD_21',1,zhook_handle)
215 IF (
lhook)
CALL dr_hook(
'TREAT_FIELD_22',0,zhook_handle_omp)
232 CALL mpi_isend(isize(:,:,jp+1),
SIZE(isize,1)*
SIZE(isize,2)*kind(isize
238 IF (
lhook)
CALL dr_hook(
'TREAT_FIELD_22',1,zhook_handle_omp)
241 IF (
lhook)
CALL dr_hook(
'TREAT_FIELD_23',0,zhook_handle)
252 CALL mpi_recv(isize0,nsize_max*
SIZE(isize0,2)*kind(isize0)/4,mpi_integer
275 DEALLOCATE(isize,isize0)
279 IF (
lhook)
CALL dr_hook(
'TREAT_FIELD_23',1,zhook_handle)
302 IF (hsubroutine==
'A_COVR')
THEN 304 ELSEIF (hsubroutine==
'A_LDBS')
THEN 306 ELSEIF (hsubroutine==
'A_LDBD')
THEN 308 ELSEIF (hsubroutine==
'A_OROG')
THEN 310 ELSEIF (hsubroutine==
'A_CTI ')
THEN 315 SELECT CASE (hsubroutine)
324 ALLOCATE(imask(
SIZE(u%LCOVER)))
327 DO jcov = 1,
SIZE(u%LCOVER)
328 IF (u%LCOVER(jcov))
THEN 338 CALL mpi_allgather(is2,kind(is2)/4,mpi_integer,&
339 itcov,kind(itcov)/4,mpi_integer,
ncomm,infompi)
351 ALLOCATE(zval(u%NSIZE_FULL,maxval(itcov),2))
358 jcov = nint(zval(ji,jl,1))
368 DO jl = 1,
SIZE(
xall,2)
370 jcov = nint(
xall(ji,jl,1))
377 DEALLOCATE(
xall,imask)
380 CASE (
'A_LDBD',
'A_LDBS',
'A_OROG',
'A_CTI ')
384 ALLOCATE(
xsumval(u%NSIZE_FULL,is2))
387 ALLOCATE(zval(u%NSIZE_FULL,is2,1))
400 IF (hsubroutine==
'A_OROG' .OR. hsubroutine==
'A_CTI ')
THEN 404 IF (hsubroutine==
'A_CTI ')
THEN 407 ALLOCATE(zextval(u%NSIZE_FULL,1))
422 ELSEIF (hsubroutine==
'A_OROG')
THEN 425 ALLOCATE(zextval(u%NSIZE_FULL,1))
428 uss%XMAX_ZS(:) = max(uss%XMAX_ZS,zextval(:,1))
432 uss%XMIN_ZS(:) = min(uss%XMIN_ZS,zextval(:,1))
444 ALLOCATE(zval(u%NSIZE_FULL,
nsso,
nsso))
456 lssqo(:,:,:) = .false.
458 ALLOCATE(i3d_all(u%NSIZE_FULL,
nsso,
nsso))
461 WHERE (i3d_all(:,:,:)==1)
lssqo(:,:,:) = .true.
481 ALLOCATE(zval(u%NSIZE_FULL,
SIZE(
xall,2),1))
494 ALLOCATE(
xsumval(u%NSIZE_FULL,1))
495 IF (hfiletype==
'DIRECT' .AND.
nproc>1)
THEN 496 CALL abor1_sfx(
"TREAT_FIELD: MAJ is not possible with DIRECT filetype and NPROC>1" 498 ALLOCATE(ivalnbr(u%NSIZE_FULL,
SIZE(
nvalnbr,2)),ivalcount(u%NSIZE_FULL
SIZE 510 DO jt=1,
SIZE(
nsize,2)
511 DO ji=1,
SIZE(
nsize,1)
512 IF(
nsize(ji,jt)==0) cycle
516 DO jl=1,ivalnbr(ji,jt)
517 IF (ivalcount(ji,jl,jt)>imax)
THEN 518 imax = ivalcount(ji,jl,jt)
523 xsumval(ji,jt)=zvallist(ji,ival,jt)
526 DEALLOCATE(ivalnbr,ivalcount,zvallist)
540 SELECT CASE (hsubroutine)
558 IF (.NOT.
PRESENT(ppgdarray))
THEN 559 WRITE(iluout,*)
'You asked to average a PGD field with A_MESH option,' 560 WRITE(iluout,*)
'but you did not give the array to store this field' 561 CALL abor1_sfx(
'TREAT_FIELD: ARRAY IS MISSING')
real, dimension(:,:,:), allocatable xvallist
subroutine average2_cover(U, HPROGRAM)
subroutine read_pgd_netcdf(UG, U, USS, HPROGRAM, HSCHEME, HSUBROUTINE, HFILENAME, HFIELD, PFIELD)
subroutine average2_ldb(PPGDARRAY, HTYPE, KSTAT)
subroutine average2_orography(USS)
integer, dimension(:), allocatable nreq
integer, dimension(:,:), allocatable nsize_all
integer, parameter ngraddepth_ldb
real, dimension(:,:,:), allocatable xall
subroutine read_direct(UG, U, USS, HPROGRAM, HSCHEME, HSUBROUTINE, HFILENAME, HFI
real, dimension(:), allocatable xmax_work
subroutine read_binllv(UG, U, USS, HPROGRAM, HSUBROUTINE, HFILENAME)
logical, dimension(:,:,:), allocatable lssqo
subroutine read_direct_gauss(UG, U, USS, HPROGRAM, HSCHEME, HSUBROUTINE, HFILENA
subroutine abor1_sfx(YTEXT)
subroutine read_latlon(UG, U, USS, HPROGRAM, HSCHEME, HSUBROUTINE, HFILENAME)
integer, dimension(:,:,:), allocatable nsso_all
integer, dimension(:,:), allocatable nvalnbr
real, dimension(:,:), allocatable xsumval
subroutine ini_ssowork(PMESHLENGTH, PDLAT, PDLON)
subroutine read_binllvfast(UG, U, USS, HPROGRAM, HSUBROUTINE, HFILENAME)
subroutine read_ascllv(UG, U, USS, HPROGRAM, HSUBROUTINE, HFILENAME)
real, dimension(:,:,:), allocatable xssqo
subroutine average2_mesh(PPGDARRAY)
subroutine get_luout(HPROGRAM, KLUOUT)
integer, dimension(:), allocatable nsize_task
integer, dimension(:,:), allocatable nsize
integer, dimension(:,:,:), allocatable nvalcount
integer, parameter ngradstatus_ldb
real, dimension(:,:,:), allocatable xsso_all
real, dimension(:,:), allocatable xext_all
real, dimension(:), allocatable xmin_work
integer, dimension(:), allocatable nindex
subroutine treat_field(UG, U, USS, HPROGRAM, HSCHEME, HFILETYPE, HSUBROUTINE, HFILENAME, HFIELD, PPGDARRAY)
subroutine make_lcover(OCOVER)
integer, parameter jpvalmax