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) ::
88 INTEGER IPARI(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 KK, NIN, NI25, ISENS, LENT25, IERROR, ITYP,
106 . ifq, igap, intth, ilev, ivis2,
107 . i_stok_glo, i_stok, i,j, lindmax, nsnr, inacti, nadmsr,
108 . lenadd, mg, l, n, n_old_impact,
109 . p, rsiz(ninter25), isiz(ninter25), sizbufs(nspmd), iadbufr(nspmd+1),
110 . nadmax, ladmax, nslidmx, nsendtot, nsnf, nsnl, nsnrf, nsnrl,intfric ,
111 . flagremn, lremnormax, istif_msdt, ifsub_carea
112 INTEGER SIZOPT, K_STOK, I_OPT_STOK
115 INTEGER,
DIMENSION(:),
ALLOCATABLE :: INDEX2, BUFR, NADD, KADD,
116 . NSLIDE, FR_SLIDE, INDXTOSEND
118 TYPE(real_pointer),
DIMENSION(NSPMD,NINTER25) :: RBUFS,RBUFR
119 TYPE(int_pointer) ,
DIMENSION(NSPMD,NINTER25) :: IBUFS,IBUFR
123 TYPE(MPI_COMM_STRUCT) :: COMM_REAL
124 TYPE(MPI_COMM_STRUCT) :: COMM_SIZ
126 INTEGER COMM_PATTERN(NSPMD,NINTER25)
127 INTEGER SIZBUFS_GLOB(NSPMD,NINTER25)
128 INTEGER SIZBUFR_GLOB(NSPMD,)
138 nin = intlist25(ni25)
142 nsnf = nsn*(jtask-1) / nthread
143 nsnl = nsn*jtask / nthread
145 intbuf_tab(nin)%ISLIDE(4*nsnf+1:4*nsnl)=0
151 nin = intlist25(ni25)
153 nsnrf = 1 + nsnr*(jtask-1) / nthread
154 nsnrl = nsnr*jtask / nthread
166 nin = intlist25(ni25)
172 nin = intlist25(ni25)
174 1 ipari ,intbuf_tab(nin),x ,itab ,nin ,
175 2 kinet ,jtask ,nb_dst1(jtask),v ,nsensor ,
191 sizbufr_glob(1:nspmd,1:ninter25) = 0
192 sizbufs_glob(1:nspmd,1:ninter25) = 0
199 comm_pattern(1:nspmd,1:ninter25) = 0
202 nin = intlist25(ni25)
207 lent25 = iad_frnor(ni25,p+1)-iad_frnor(ni25,p)
208 IF(p /= ispmd +1 .AND. lent25 /= 0)
THEN
209 comm_pattern(p,ni25) = 1
217 nin = intlist25(ni25)
236 lent25 = iad_frnor(ni25,nspmd+1)-iad_frnor(ni25,1)
242 nslidmx =
max(nslidmx,nsn+nsnr)
243 nadmax =
max(nadmax ,nadmsr)
247 lent25 = lent25 + nsnt25
253 ALLOCATE(nadd(1),kadd(1))
254 ALLOCATE(nslide(1),fr_slide(1),indxtosend(1))
261 ALLOCATE(nadd(nadmax+1),stat=ierror)
263 CALL ancmsg(msgid=20,anmode=aninfo)
268 ALLOCATE(kadd(ladmax),stat=ierror)
270 CALL ancmsg(msgid=20,anmode=aninfo)
276 nin = intlist25(ni25)
283 . ,sizbufr_glob,comm_int,comm_real,comm_siz
284 . ,2 ,ni25, comm_pattern)
297 intfric =ipari(72,nin)
299 istif_msdt = ipari(97,nin)
301 IF(ipari(36,nin)> 0.AND.parameters%INTCAREA > 0) ifsub_carea = 1
307 1 nin ,ni25 ,nsn ,nsnr ,itab ,
308 2 nadmsr ,intbuf_tab(nin)%ADMSR ,iad_frnor ,fr_nor ,nadd ,
309 3 kadd ,intbuf_tab(nin)%ISLIDE)
313 1 nin ,ni25 ,nsn ,nsnr ,
314 3 itab ,intbuf_tab(nin)%NSV,iad_frnor,fr_nor ,nadd ,
315 4 kadd ,sizbufs,nsendtot)
317 ALLOCATE(fr_slide(4*nsendtot),indxtosend(nsendtot),stat=ierror)
319 CALL ancmsg(msgid=20,anmode=aninfo)
322 fr_slide(1:4*nsendtot)=0
326 1 nin ,ni25 ,nsn ,nsnr ,ityp ,
327 2 ifq ,inacti ,igap ,intth ,ilev ,
328 3 itab ,intbuf_tab(nin)%NSV,iad_frnor,fr_nor ,nadd ,
329 4 kadd ,rsiz(ni25) ,isiz(ni25),sizbufs,fr_slide ,
330 5 indxtosend,intfric , ivis2 ,istif_msdt,ifsub_carea)
333 NULLIFY(rbufs(p,ni25)%P)
334 NULLIFY(ibufs(p,ni25)%P)
335 IF(sizbufs(p) > 0)
THEN
336 ALLOCATE(rbufs(p,ni25)%P(rsiz(ni25)*sizbufs(p)),stat=ierror)
337 ALLOCATE(ibufs(p,ni25)%P(isiz(ni25)*sizbufs(p)),stat=ierror)
338 ibufs(p,ni25)%P(1:isiz(ni25)*sizbufs(p)) = -1
339 rbufs(p,ni25)%P(1:rsiz(ni25)*sizbufs(p)) = -1
341 sizbufs_glob(p,ni25)=sizbufs(p)
343 CALL ancmsg(msgid=20,anmode=aninfo)
351 . ,sizbufs_glob ,comm_int,comm_real,comm_siz
352 . ,0 ,ni25, comm_pattern)
357 1 nin ,ni25 ,nsn ,nsnr ,ityp ,
358 2 ifq ,inacti ,igap ,intth ,ilev ,
359 3 itab ,iad_frnor,fr_nor ,
360 4 lent25 ,nadd ,kadd ,kinet ,
361 5 nodnx_sms ,x ,v ,ms ,temp ,
362 . intbuf_tab(nin) ,rbufs, ibufs,
363 6 rsiz(ni25), isiz(ni25), sizbufs, fr_slide,indxtosend,
364 7 main_proc,intfric ,ivis2 , icodt ,iskew ,
365 8 istif_msdt,ifsub_carea,parameters%INTAREAN)
371 . ,sizbufs_glob ,comm_int,comm_real,comm_siz
372 . ,1 ,ni25, comm_pattern)
376 DEALLOCATE(indxtosend)
387 nin = intlist25(ni25)
394 . ,sizbufr_glob ,comm_int,comm_real,comm_siz
395 . ,3 ,ni25, comm_pattern)
408 intfric =ipari(72,nin)
409 flagremn =ipari(63,nin)
410 lremnormax =ipari(82,nin)
411 istif_msdt = ipari(97,nin)
413 IF(ipari(36,nin)> 0.AND.parameters%INTCAREA > 0) ifsub_carea = 1
431 sizbufs(p) = sizbufr_glob(p,ni25)
432 nb_tot = nb_tot +sizbufs(p)
434 IF(
ALLOCATED(xrem))
DEALLOCATE(xrem)
435 IF(
ALLOCATED(
irem))
DEALLOCATE(
irem)
436 ALLOCATE(xrem(rsiz(ni25),nb_tot))
437 ALLOCATE(
irem(isiz(ni25),nb_tot))
451 xrem(j,nb_tot) = rbufr(p,ni25)%P((i-1)*rsiz(ni25)+j)
454 irem(j,nb_tot) = ibufr(p,ni25)%P((i-1)*isiz(ni25)+j)
462 i_stok_glo = intbuf_tab(nin)%I_STOK(2)
469 2 igap ,nsnr ,intth ,ilev, intbuf_tab(nin),
470 3 fr_nor,iad_frnor, sizbufs, itab, h3d_data ,
471 4 intfric,flagremn,lremnormax,nrtm,ivis2 ,
472 5 istif_msdt,ifsub_carea,nodadt_therm)
490 sizopt = intbuf_tab(nin)%S_CAND_OPT_N
491 i_opt_stok = intbuf_tab(nin)%I_STOK(2)
493 1 intbuf_tab(nin)%CAND_OPT_N,intbuf_tab(nin)%CAND_OPT_E,nin ,ni25 ,nsn ,
494 2 nsnr ,nrtm ,sizopt ,k_stok ,intbuf_tab(nin)%MSEGLO,
495 3 intbuf_tab(nin)%MSEGTYP24,i_opt_stok ,itab ,intbuf_tab(nin)%IRECTM,nadmsr ,
496 4 intbuf_tab(nin)%ADMSR,intbuf_tab(nin)%ISLIDE,intbuf_tab(nin)%NSV,
497 . intbuf_tab(nin)%KNOR2MSR,intbuf_tab(nin)%NOR2MSR,
498 5 intbuf_tab(nin)%IRTLM,intbuf_tab(nin)%STFM,flagremn,intbuf_tab(nin)%KREMNOR,
499 . intbuf_tab(nin)%REMNOR)
505 IF(intbuf_tab(nin)%I_STOK(2)+k_stok > sizopt)
THEN
510 intbuf_tab(nin)%I_STOK(2)=i_opt_stok
511 IF (debug(3)>=1)
THEN
512 nb_dst1(jtask) = nb_dst1(jtask) + k_stok
513 nb_dst2(jtask) = nb_dst2(jtask) - k_stok
519 . ,sizbufr_glob ,comm_int ,comm_real,comm_siz
520 . ,4 ,ni25 ,comm_pattern)
527 nin = intlist25(ni25)
531 . ,sizbufs_glob ,comm_int,comm_real,comm_siz
532 . ,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)