52 1 IPARI ,IAD_ELEM ,FR_ELEM ,ITAB ,SENSOR_TAB,
53 2 NSENSOR ,INTLIST25,INTBUF_TAB ,IAD_FRNOR,FR_NOR ,
54 3 X ,V ,MS ,TEMP ,KINET ,
55 4 NODNX_SMS,JTASK ,NB_DST2, MAIN_PROC,
56 5 NEWFRONT ,ISENDTO ,IRCVFROM ,NBINTC,
57 6 INTLIST ,ISLEN7 ,IRLEN7 ,IRLEN7T ,ISLEN7T,
58 7 NB_DST1 ,H3D_DATA, ICODT, ISKEW,PARAMETERS,NODADT_THERM)
72#include "implicit_f.inc"
86 INTEGER ,
INTENT(IN) :: NSENSOR
87 INTEGER ,
INTENT(IN) :: NODADT_THERM
88 INTEGER (NPARI,*), ITAB(*), INTLIST25(*), JTASK,
89 . IAD_ELEM(2,*) ,FR_ELEM(*), IAD_FRNOR(NINTER25,NSPMD+1), FR_NOR(*),
90 . KINET(*), NODNX_SMS(*), NB_DST1(PARASIZ), NB_DST2(PARASIZ)
91 INTEGER,
INTENT(IN) :: ICODT(*),ISKEW(*)
92 my_real :: X(3,*), V(3,*), MS(*), TEMP(*)
93 TYPE(intbuf_struct_),
DIMENSION(NINTER) :: INTBUF_TAB
94 INTEGER MAIN_PROC(NUMNOD)
95 INTEGER NBINTC,ISLEN7,IRLEN7,
97 . NEWFRONT(*), INTLIST(*),
98 . isendto(ninter+1,*) ,ircvfrom(ninter+1,*)
100 TYPE (SENSOR_STR_) ,
DIMENSION(NSENSOR) ,
INTENT(IN) :: SENSOR_TAB
101 TYPE (PARAMETERS_) ,
INTENT(IN):: PARAMETERS
105 INTEGER NIN, NI25, LENT25, IERROR, ITYP,
106 . ifq, igap, intth, ilev, ivis2,
107 . i_stok_glo, i,j, nsnr, inacti, nadmsr,
109 . p, rsiz(ninter25), isiz(ninter25), sizbufs(nspmd),
110 . nadmax, ladmax, nslidmx, nsendtot, nsnf, nsnl, nsnrf, nsnrl,intfric ,
111 . flagremn, lremnormax, istif_msdt
112 INTEGER SIZOPT, K_STOK, I_OPT_STOK
113 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NADD, KADD,
114 . NSLIDE, FR_SLIDE, INDXTOSEND
116 TYPE(real_pointer),
DIMENSION(NSPMD,NINTER25) :: RBUFS,RBUFR
117 TYPE(int_pointer) ,
DIMENSION(NSPMD,NINTER25) :: IBUFS,IBUFR
121 TYPE(MPI_COMM_STRUCT) ::
122 TYPE(MPI_COMM_STRUCT) :: COMM_SIZ
124 INTEGER COMM_PATTERN(NSPMD,NINTER25)
125 INTEGER SIZBUFS_GLOB(NSPMD,NINTER25)
126 INTEGER SIZBUFR_GLOB(NSPMD,NINTER25)
136 nin = intlist25(ni25)
140 nsnf = nsn*(jtask-1) / nthread
141 nsnl = nsn*jtask / nthread
143 intbuf_tab(nin)%ISLIDE(4*nsnf+1:4*nsnl)=0
149 nin = intlist25(ni25)
151 nsnrf = 1 + nsnr*(jtask-1) / nthread
152 nsnrl = nsnr*jtask / nthread
164 nin = intlist25(ni25)
170 nin = intlist25(ni25)
172 1 ipari ,intbuf_tab(nin),x ,itab ,nin ,
173 2 kinet ,jtask ,nb_dst1(jtask),v ,nsensor ,
189 sizbufr_glob(1:nspmd,1:ninter25) = 0
190 sizbufs_glob(1:nspmd,1:ninter25) = 0
195! : fill comm_pattern such that comm_pattern(p, nin) = 1 => comm between ispmd and p
197 comm_pattern(1:nspmd,1:ninter25) = 0
200 nin = intlist25(ni25)
205 lent25 = iad_frnor(ni25,p+1)-iad_frnor(ni25,p)
206 IF(p /= ispmd +1 .AND. lent25 /= 0)
THEN
207 comm_pattern(p,ni25) = 1
215 nin = intlist25(ni25)
234 lent25 = iad_frnor(ni25,nspmd+1)-iad_frnor(ni25,1)
240 nslidmx =
max(nslidmx,nsn+nsnr)
241 nadmax =
max(nadmax ,nadmsr)
245 lent25 = lent25 + nsnt25
251 ALLOCATE(nadd(1),kadd(1))
252 ALLOCATE(nslide(1),fr_slide(1),indxtosend(1))
259 ALLOCATE(nadd(nadmax+1),stat=ierror)
261 CALL ancmsg(msgid=20,anmode=aninfo)
266 ALLOCATE(kadd(ladmax),stat=ierror)
268 CALL ancmsg(msgid=20,anmode=aninfo)
274 nin = intlist25(ni25)
281 . ,sizbufr_glob,comm_int,comm_real,comm_siz
282 . ,2 ,ni25, comm_pattern)
295 intfric =ipari(72,nin)
297 istif_msdt = ipari(97,nin)
299 IF(ipari(36,nin)> 0.AND.parameters%INTCAREA > 0) ifsub_carea = 1
305 1 nin ,ni25 ,nsn ,nsnr ,itab ,
306 2 nadmsr ,intbuf_tab(nin)%ADMSR ,iad_frnor ,fr_nor ,nadd ,
307 3 kadd ,intbuf_tab(nin)%ISLIDE)
311 1 nin ,ni25 ,nsn ,nsnr ,
312 3 itab ,intbuf_tab(nin)%NSV,iad_frnor,fr_nor ,nadd ,
313 4 kadd ,sizbufs,nsendtot)
315 ALLOCATE(fr_slide(4*nsendtot),indxtosend(nsendtot),stat=ierror)
317 CALL ancmsg(msgid=20,anmode=aninfo)
320 fr_slide(1:4*nsendtot)=0
324 1 nin ,ni25 ,nsn ,nsnr ,ityp ,
325 2 ifq ,inacti ,igap ,intth ,ilev ,
326 3 itab ,intbuf_tab(nin)%NSV,iad_frnor,fr_nor ,nadd ,
327 4 kadd ,rsiz(ni25) ,isiz(ni25),sizbufs,fr_slide ,
328 5 indxtosend,intfric , ivis2 ,istif_msdt,ifsub_carea)
331 NULLIFY(rbufs(p,ni25)%P)
332 NULLIFY(ibufs(p,ni25)%P)
333 IF(sizbufs(p) > 0)
THEN
334 ALLOCATE(rbufs(p,ni25)%P(rsiz(ni25)*sizbufs(p)),stat=ierror)
335 ALLOCATE(ibufs(p,ni25)%P(isiz(ni25)*sizbufs(p)),stat=ierror)
336 ibufs(p,ni25)%P(1:isiz(ni25)*sizbufs(p)) = -1
337 rbufs(p,ni25)%P(1:rsiz(ni25)*sizbufs(p)) = -1
339 sizbufs_glob(p,ni25)=sizbufs(p)
341 CALL ancmsg(msgid=20,anmode=aninfo)
349 . ,sizbufs_glob ,comm_int,comm_real,comm_siz
350 . ,0 ,ni25, comm_pattern)
355 1 nin ,ni25 ,nsn ,nsnr ,ityp ,
356 2 ifq ,inacti ,igap ,intth ,ilev ,
357 3 itab ,iad_frnor,fr_nor ,
358 4 lent25 ,nadd ,kadd ,kinet ,
359 5 nodnx_sms ,x ,v ,ms ,temp ,
360 . intbuf_tab(nin) ,rbufs, ibufs,
361 6 rsiz(ni25), isiz(ni25), sizbufs, fr_slide,indxtosend,
363 8 istif_msdt,ifsub_carea,parameters%INTAREAN)
369 . ,sizbufs_glob ,comm_int,comm_real,comm_siz
370 . ,1 ,ni25, comm_pattern)
374 DEALLOCATE(indxtosend)
385 nin = intlist25(ni25)
392 . ,sizbufr_glob ,comm_int,comm_real,comm_siz
393 . ,3 ,ni25, comm_pattern)
406 intfric =ipari(72,nin)
407 flagremn =ipari(63,nin)
408 lremnormax =ipari(82,nin)
409 istif_msdt = ipari(97,nin)
411 IF(ipari(36,nin)> 0.AND.parameters%INTCAREA > 0) ifsub_carea = 1
429 sizbufs(p) = sizbufr_glob(p,ni25)
430 nb_tot = nb_tot +sizbufs(p)
432 IF(
ALLOCATED(xrem))
DEALLOCATE(xrem)
433 IF(
ALLOCATED(
irem))
DEALLOCATE(
irem)
434 ALLOCATE(xrem(rsiz(ni25),nb_tot))
435 ALLOCATE(
irem(isiz(ni25),nb_tot))
449 xrem(j,nb_tot) = rbufr(p,ni25)%P((i-1)*rsiz(ni25)+j)
452 irem(j,nb_tot) = ibufr(p,ni25)%P((i-1)*isiz(ni25)+j)
460 i_stok_glo = intbuf_tab(nin)%I_STOK(2)
467 2 igap ,nsnr ,intth ,ilev, intbuf_tab(nin),
468 3 fr_nor,iad_frnor, sizbufs, itab, h3d_data ,
469 4 intfric,flagremn,lremnormax,nrtm,ivis2 ,
470 5 istif_msdt,ifsub_carea,nodadt_therm)
488 sizopt = intbuf_tab(nin)%S_CAND_OPT_N
489 i_opt_stok = intbuf_tab(nin)%I_STOK(2)
491 1 intbuf_tab(nin)%CAND_OPT_N,intbuf_tab(nin)%CAND_OPT_E,nin ,ni25 ,nsn ,
492 2 nsnr ,nrtm ,sizopt ,k_stok ,intbuf_tab(nin)%MSEGLO,
493 3 intbuf_tab(nin)%MSEGTYP24,i_opt_stok ,itab ,intbuf_tab(nin)%IRECTM,nadmsr ,
494 4 intbuf_tab(nin)%ADMSR,intbuf_tab(nin)%ISLIDE,intbuf_tab(nin)%NSV,
495 . intbuf_tab(nin)%KNOR2MSR,intbuf_tab(nin)%NOR2MSR,
496 5 intbuf_tab(nin)%IRTLM,intbuf_tab(nin)%STFM,flagremn,intbuf_tab(nin)%KREMNOR,
497 . intbuf_tab(nin)%REMNOR)
503 IF(intbuf_tab(nin)%I_STOK(2)+k_stok > sizopt)
THEN
508 intbuf_tab(nin)%I_STOK(2)=i_opt_stok
509 IF (debug(3)>=1)
THEN
510 nb_dst1(jtask) = nb_dst1(jtask) + k_stok
511 nb_dst2(jtask) = nb_dst2(jtask) - k_stok
517 . ,sizbufr_glob ,comm_int ,comm_real,comm_siz
518 . ,4 ,ni25 ,comm_pattern)
525 nin = intlist25(ni25)
529 . ,sizbufs_glob ,comm_int,comm_real,comm_siz
530 . ,5 ,ni25, comm_pattern)
subroutine i25main_slid(ipari, iad_elem, fr_elem, itab, sensor_tab, nsensor, intlist25, intbuf_tab, iad_frnor, fr_nor, x, v, ms, temp, kinet, nodnx_sms, jtask, nb_dst2, main_proc, newfront, isendto, ircvfrom, nbintc, intlist, islen7, irlen7, irlen7t, islen7t, nb_dst1, h3d_data, icodt, iskew, parameters, nodadt_therm)