15 SUBROUTINE read_surf_cov (HPROGRAM,HREC,PFIELD,OFLAG,KRESP,HCOMMENT,HDIR)
36 USE modi_read_surfx2cov_mnh
44 USE modi_read_surfx1_aro
60 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
61 CHARACTER(LEN=*),
INTENT(IN) :: HREC
62 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PFIELD
63 LOGICAL,
DIMENSION(:),
INTENT(IN) :: OFLAG
64 INTEGER,
INTENT(OUT) :: KRESP
65 CHARACTER(LEN=*),
OPTIONAL,
INTENT(OUT) :: HCOMMENT
66 CHARACTER(LEN=1),
OPTIONAL,
INTENT(IN) :: HDIR
73 INTEGER,
DIMENSION(MPI_STATUS_SIZE,NPROC-1) :: ISTATUS
76 REAL,
DIMENSION(:),
ALLOCATABLE :: ZWORKR
77 REAL,
DIMENSION(:),
ALLOCATABLE :: ZFIELD
78 INTEGER,
DIMENSION(:),
POINTER :: IMASKF
79 INTEGER,
DIMENSION(COUNT(OFLAG)) :: IMASK
80 CHARACTER(LEN=100) :: YCOMMENT
81 CHARACTER(LEN=12) :: YREC
82 CHARACTER(LEN=16) :: YREC2
83 CHARACTER(LEN=1) :: YDIR
84 CHARACTER(LEN=4) :: YLVL
86 INTEGER :: IPIO_SAVE, IPAS, JP, IDEB, IFIN, JJ
87 INTEGER :: JCOVER, JPROC, IPROC
88 INTEGER :: IL1, IL2, IDX_SAVE, IDX, IVAL
89 INTEGER :: INFOMPI, IREQ, JPROC2, IFULL
90 REAL(KIND=JPRB) :: ZHOOK_HANDLE, ZHOOK_HANDLE_OMP
92 IF (
lhook)
CALL dr_hook(
'READ_SURF_COV_1',0,zhook_handle)
98 IF (
PRESENT(hdir)) ydir = hdir
103 IF (
lhook)
CALL dr_hook(
'READ_SURF_COV_1',1,zhook_handle)
105 IF (hprogram==
'MESONH')
THEN 108 CALL read_surfx2cov_mnh(yrec2,il1,il2,pfield,oflag,kresp,ycomment,ydir)
112 IF (
lhook)
CALL dr_hook(
'READ_SURF_COV_2',0,zhook_handle)
116 DO jj = 1,
SIZE(oflag)
124 IF (hprogram==
'LFI ')
THEN 127 ALLOCATE(zfield(nfull_lfi))
130 ELSEIF (hprogram==
'ASCII ')
THEN 133 ALLOCATE(zfield(nfull_asc))
136 ELSEIF (hprogram==
'FA ')
THEN 139 ALLOCATE(zfield(nfull_fa))
142 ELSEIF (hprogram==
'NC ')
THEN 145 ALLOCATE(zfield(nfull_nc))
153 ALLOCATE(zworkr(
nsize))
155 ALLOCATE(zworkr(ifull))
161 IF (
nproc>1 .AND. ydir==
'H')
THEN 165 IF (
ALLOCATED(
nindex))
THEN 166 IF (
SIZE(
nindex)==ifull) iflag=1
178 ipas = ceiling(il2*1./
nproc)
185 IF (
lhook)
CALL dr_hook(
'READ_SURF_COV_2',1,zhook_handle)
189 IF (
lhook)
CALL dr_hook(
'READ_SURF_COV_3',0,zhook_handle)
194 IF (jcover<=il2)
THEN 199 IF (
trim(hrec)==
'COVER')
THEN 200 WRITE(yrec,
'(A5,I3.3)')
trim(hrec),jj
202 WRITE(ylvl,
'(I4)') jj
203 yrec =
trim(hrec)//adjustl(ylvl(:len_trim(ylvl)))
205 ycomment=
'X_Y_'//yrec
208 IF (hprogram==
'AROME ')
THEN 210 CALL read_surfx1_aro(yrec,il1,pfield(:,jcover),kresp,ycomment,ydir)
220 CALL read_surf(hprogram,yrec,zfield,kresp,ycomment,
'A')
231 ELSEIF (ydir==
'A' .OR. ydir==
'E')
THEN 237 CALL mpi_send(zfield,
SIZE(zfield)*kind(zfield)/4,mpi_real,
npio,idx,
ncomm,infompi)
244 CALL abor1_sfx(
"READ_SURFX2COV:HDIR MUST BE H OR A OR E")
251 IF (
lhook)
CALL dr_hook(
'READ_SURF_COV_3',1,zhook_handle)
259 IF (
lhook)
CALL dr_hook(
'READ_SURF_COV_4',0,zhook_handle_omp)
266 IF (ipas*jproc + jp<=il2)
THEN 274 IF (jproc/=
nrank)
THEN 275 idx = idx_save + jp + 1
279 CALL mpi_recv(zworkr(:),
SIZE(zworkr)*kind(zworkr)/4,&
280 mpi_real,jproc,idx,
ncomm,istatus,infompi)
282 ival = ipas*jproc + jp
293 IF (
lhook)
CALL dr_hook(
'READ_SURF_COV_4',1,zhook_handle_omp)
297 IF (
lhook)
CALL dr_hook(
'READ_SURF_COV_5',0,zhook_handle)
301 IF (ydir==
'H' .AND. ipas*
nrank+jp<=il2 .AND.
nproc>1)
THEN 306 IF (
lhook)
CALL dr_hook(
'READ_SURF_COV_5',1,zhook_handle)
328 IF (
lhook)
CALL dr_hook(
'READ_SURF_COV_7',0,zhook_handle)
330 IF (
nrank/=
npio .AND. ydir==
'H' .AND. iflag==0)
THEN 337 IF (hprogram /=
'AROME ')
THEN 342 IF (
lhook)
CALL dr_hook(
'READ_SURF_COV_7',1,zhook_handle)
346 IF (
lhook)
CALL dr_hook(
'READ_SURF_COV_8',0,zhook_handle)
349 IF (
PRESENT(hcomment)) hcomment = ycomment
351 IF (
lhook)
CALL dr_hook(
'READ_SURF_COV_8',1,zhook_handle)
static const char * trim(const char *name, int *n)
integer, dimension(:), allocatable nreq
integer, dimension(:), pointer nmask
subroutine read_surf_cov(HPROGRAM, HREC, PFIELD, OFLAG, KRESP, HCOMMENT, HDIR)
subroutine abor1_sfx(YTEXT)
integer, dimension(:), pointer nmask
integer, dimension(:), allocatable nindex