7 ODVECT,KLUOUT,OGLOBS,OGLOBN,OGLOBLON,KP,&
8 PARIN0_OUT,PARIN_OUT,KLSMIN_OUT,KLSMIN,KLSMOUT,KMASK )
117 INTEGER,
INTENT(IN) :: KINLA
118 INTEGER,
DIMENSION(:),
INTENT(IN) :: KINLO
119 INTEGER,
INTENT(IN) :: KILEN
120 REAL,
DIMENSION(:,:),
INTENT(IN) :: PARIN
121 INTEGER,
INTENT(IN) :: KOLEN
122 LOGICAL,
INTENT(IN) :: ODVECT
123 INTEGER,
INTENT(IN) :: KLUOUT
124 LOGICAL,
INTENT(IN) :: OGLOBS
125 LOGICAL,
INTENT(IN) :: OGLOBN
126 LOGICAL,
INTENT(IN) :: OGLOBLON
127 INTEGER,
DIMENSION(:,:),
INTENT(IN) :: KP
128 REAL,
DIMENSION(:,:),
POINTER :: PARIN0_OUT
129 REAL,
DIMENSION(:,:,:),
INTENT(OUT) :: PARIN_OUT
130 INTEGER,
DIMENSION(:,:,:),
INTENT(OUT) :: KLSMIN_OUT
131 INTEGER,
DIMENSION(:),
POINTER,
OPTIONAL :: KMASK
132 INTEGER,
DIMENSION(:,:),
INTENT(IN),
OPTIONAL :: KLSMIN
133 INTEGER,
DIMENSION(:),
INTENT(IN),
OPTIONAL :: KLSMOUT
137 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZARIN
138 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: ZOUT
141 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: ILSMIN
142 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: IP
143 INTEGER,
DIMENSION(:,:,:),
ALLOCATABLE :: IOUT
145 INTEGER,
DIMENSION(MPI_STATUS_SIZE) :: ISTATUS
147 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZDARIN
148 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: IDLS
149 INTEGER,
DIMENSION(2) :: IEXT
157 INTEGER :: JL, JI, JI2, JL2, JT, INL, JC
158 INTEGER :: ID1, ID2, ISIZE
159 INTEGER :: INFOMPI, I, J
164 REAL(KIND=JPRB) :: ZHOOK_HANDLE, ZHOOK_HANDLE_OMP
170 IF (
lhook)
CALL dr_hook(
'HORIBL_SURF_GRIDIN_1',0,zhook_handle)
172 IF (
PRESENT(kmask))
NULLIFY(kmask)
174 inl =
SIZE(parin_out,2)
177 IF (
PRESENT(klsmin) .AND.
PRESENT(klsmout)) ldlsm = .true.
182 IF (odvect) zvect=-1.
187 IF (oglobs ) ibigsize=ibigsize+(4+kinlo( 1))+(4+kinlo( 2))
188 IF (oglobn ) ibigsize=ibigsize+(4+kinlo(kinla))+(4+kinlo(kinla-1))
189 IF (ogloblon) ibigsize=ibigsize+ 4*kinla
191 ALLOCATE (zarin(ibigsize,inl))
192 ALLOCATE (ilsmin(ibigsize,inl))
193 ALLOCATE (kmask(ibigsize))
214 IF (oglobs) jop = jop + (4+kinlo(1)) + (4+kinlo(2))
220 id2 = jop+2+kinlo(jl)
225 kmask(ji) = jip + ji - (jop+2)
230 zarin(jop ,jt) = parin(id1-2,jt)
231 zarin(jop+1,jt) = parin(id1-1,jt)
232 zarin(jop+2:id2-1,jt) = parin(jip:id1-1,jt)
233 zarin(id2 ,jt) = parin(jip ,jt)
234 zarin(id2+1,jt) = parin(jip+1,jt)
237 ilsmin(jop ,jt) = klsmin(id1-2,jt)
238 ilsmin(jop+1,jt) = klsmin(id1-1,jt)
239 ilsmin(jop+2:id2-1,jt) = klsmin(jip:id1-1,jt)
240 ilsmin(id2 ,jt) = klsmin(jip ,jt)
241 ilsmin(id2+1,jt) = klsmin(jip+1,jt)
244 jip = jip + kinlo(jl)
245 jop = jop + kinlo(jl) + 4
251 DO ji = jop,jop+kilen-1
252 kmask(ji) = jip + ji - jop
255 zarin(jop:jop+kilen-1,jt) = parin(jip:jip+kilen-1,jt)
257 ilsmin(jop:jop+kilen-1,jt) = klsmin(jip:jip+kilen-1,jt)
274 IF (jc<3.AND.oglobs.OR.jc>2.AND.oglobn)
THEN 278 iof2 = iof1 + 4 + kinlo(1)
279 imid = (kinlo(1)+4) / 2
283 iof2 = iof2 + 4 + kinlo(2)
284 imid = (kinlo(2)+4) / 2
287 iof1 = ibigsize - (4+kinlo(kinla-1)) - (4+kinlo(kinla))
288 iof2 = iof1 - (4+kinlo(kinla))
289 imid = (kinlo(kinla)+4) / 2
290 ikinlo = kinlo(kinla)
292 iof1 = iof1 + (4+kinlo(kinla))
293 iof2 = iof2 - (4+kinlo(kinla-1))
294 imid = (kinlo(kinla-1)+4) / 2
295 ikinlo = kinlo(kinla-1)
299 kmask(iof1+ji) = iof2 + imid + ji - 2
301 DO ji = imid+1,ikinlo+4
302 kmask(iof1+ji) = iof2 + 1 + 2 + ji - (imid + 1)
305 zarin(iof1+1:iof1+imid,jt) = zvect*zarin(iof2+1+imid-2:iof2+2*imid-2,jt)
306 zarin(iof1+imid+1:iof1+ikinlo+4,jt) = zvect*zarin(iof2+1+2:iof2+ikinlo+4-imid+2,jt)
308 ilsmin(iof1+1:iof1+imid,jt) = ilsmin(iof2+1+imid-2:iof2+2*imid-2,jt)
309 ilsmin(iof1+imid+1:iof1+ikinlo+4,jt) = ilsmin(iof2+1+2:iof2+ikinlo+4-imid+2,jt)
322 CALL mpi_bcast(ibigsize,kind(ibigsize)/4,mpi_integer,
npio,
ncomm,infompi)
323 IF (
nrank/=
npio)
ALLOCATE(kmask(ibigsize))
324 CALL mpi_bcast(kmask,
SIZE(kmask)*kind(kmask)/4,mpi_integer,
npio,
ncomm,infompi)
328 IF (
nrank==
npio .AND. (ogloblon.OR.oglobn.OR.oglobs))
THEN 330 ALLOCATE(parin0_out(
SIZE(zarin,1),
SIZE(zarin,2)))
335 ALLOCATE(parin0_out(0,0))
339 IF (
lhook)
CALL dr_hook(
'HORIBL_SURF_GRIDIN_1',1,zhook_handle)
342 IF (
lhook)
CALL dr_hook(
'HORIBL_SURF_GRIDIN_3',0,zhook_handle)
347 CALL mpi_send(iext,2*kind(iext)/4,mpi_integer,
npio,
idx_i,
ncomm,infompi)
349 IF (
lhook)
CALL dr_hook(
'HORIBL_SURF_GRIDIN_3',1,zhook_handle)
350 IF (
lhook)
CALL dr_hook(
'HORIBL_SURF_GRIDIN_4',0,zhook_handle)
351 isize = iext(2)-iext(1)+1
352 ALLOCATE(zdarin(isize,inl))
353 ALLOCATE(idls(isize,inl))
356 CALL mpi_recv(zdarin,
SIZE(zdarin)*kind(zdarin)/4,mpi_real,
npio,
idx_i,
ncomm,istatus,infompi)
360 CALL mpi_recv(idls,
SIZE(idls)*kind(idls)/4,mpi_integer,
npio,
idx_i,
ncomm,istatus,infompi)
362 IF (
lhook)
CALL dr_hook(
'HORIBL_SURF_GRIDIN_4',1,zhook_handle)
368 IF (
lhook)
CALL dr_hook(
'HORIBL_SURF_GRIDIN_2',0,zhook_handle_omp)
371 CALL mpi_recv(iext,2*kind(iext)/4,mpi_integer,j,
idx_i+1,
ncomm,istatus,infompi)
377 IF (
lhook)
CALL dr_hook(
'HORIBL_SURF_GRIDIN_2',1,zhook_handle_omp)
378 IF (
lhook)
CALL dr_hook(
'HORIBL_SURF_GRIDIN_30',0,zhook_handle_omp)
379 isize = iext(2)-iext(1)+1
380 ALLOCATE(zdarin(isize,inl))
381 ALLOCATE(idls(isize,inl))
383 DO jl = iext(1),iext(2)
384 zdarin(jl-iext(1)+1,jt) = zarin(jl,jt)
385 idls(jl-iext(1)+1,jt) = ilsmin(jl,jt)
388 IF (
lhook)
CALL dr_hook(
'HORIBL_SURF_GRIDIN_30',1,zhook_handle_omp)
389 IF (
lhook)
CALL dr_hook(
'HORIBL_SURF_GRIDIN_40',0,zhook_handle_omp)
392 CALL mpi_send(zdarin,
SIZE(zdarin)*kind(zdarin)/4,mpi_real,j,
idx_i+2,
ncomm,infompi)
393 CALL mpi_send(idls,
SIZE(idls)*kind(idls)/4,mpi_integer,j,
idx_i+3,
ncomm,infompi)
399 id1 = kp(jl,jl2) - iext(1) + 1
400 parin_out(jl,jt,jl2) = zdarin(id1,jt)
401 klsmin_out(jl,jt,jl2) = idls(id1,jt)
406 DEALLOCATE(zdarin,idls)
407 IF (
lhook)
CALL dr_hook(
'HORIBL_SURF_GRIDIN_40',1,zhook_handle_omp)
415 IF (
lhook)
CALL dr_hook(
'HORIBL_SURF_GRIDIN_5',0,zhook_handle)
420 id1 = kp(jl,jl2) - iext(1) + 1
421 parin_out(jl,jt,jl2) = zdarin(id1,jt)
422 klsmin_out(jl,jt,jl2) = idls(id1,jt)
428 IF (
lhook)
CALL dr_hook(
'HORIBL_SURF_GRIDIN_5',1,zhook_handle)
subroutine horibl_surf_gridin(KINLA, KINLO, KILEN, PARIN, KOLEN, ODVECT, KLUOUT, OGLOBS, OGLOBN, OGLOBLON, KP, PARIN0_OUT, PARIN_OUT, KLSMIN_OUT, KLSMIN, KLSMOUT, KMASK)