62 1 IPARI ,X ,V ,INTBUF_TAB,
63 2 MS ,NIN ,ITASK ,WEIGHT ,
64 3 ISENDTO ,IRCVFROM,RETRI ,IAD_ELEM,FR_ELEM ,
65 4 ITAB ,KINET ,TEMP ,RENUM ,
66 5 NSNFIOLD,NUM_IMP ,IND_IMP ,NODNX_SMS,
67 6 H3D_DATA,ESHIFT ,NEDGE_T ,SSHIFT ,NRTM_T ,
68 7 ICODT ,ISKEW ,PARAMETERS,NODADT_THERM)
80 use check_sorting_criteria_mod ,
only : check_sorting_criteria
84#include "implicit_f.inc"
94#include "timeri_c.inc"
95 COMMON /i25mainc/bminma,curv_max_max,result,nsnr,nsnrold,i_memg,i_memg_e,i_memg_s,nmn_g
96 INTEGER RESULT,NSNR,NSNROLD,I_MEMG,I_MEMG_E,I_MEMG_S,NMN_G
98 . BMINMA(6),CURV_MAX_MAX
102 TYPE(timer_) :: TIMERS
103 INTEGER NIN ,ITASK, RETRI, NEDGE_T, NRTM_T, SSHIFT, ESHIFT,
104 . num_imp ,ind_imp(*),
106 . ipari(npari,ninter),
107 . isendto(ninter+1,*),ircvfrom(ninter+1,*),
108 . weight(*), iad_elem(2,*) ,fr_elem(*),
109 . renum(*), nsnfiold(nspmd), nodnx_sms(*), icodt(*), iskew(*)
110 INTEGER ,
INTENT(IN) :: NODADT_THERM
114TYPE(INTBUF_STRUCT_) INTBUF_TAB
116 TYPE () ,
INTENT(IN):: PARAMETERS
120 INTEGER LOC_PROC,IEDGE,NEDGE,IGSTI,ITIED,
121 . i,j, ip0, ip1, ip2, ip21, k11_t, i_sk_old, i_sk_old_e, i_stok1
122 . add1, noint, inacti, multimp, igap, ifq,
123 . n, nsnf, nsnl, nsnrf, nsnrl,nmn_l, ivis2, igap0, ifsub_carea
125 . NCONT, NCONTE, MULNSN, , MULNSNS, INACTII, INACIMP, INTTH,
126 . I_MEM,I_MEME(2),CAND_N_OLD,CAND_E_OLD(2),ILEV,FLAGREMN, LREMNORMAX,
129 INTEGER NEDGE_TOTAL,NEDGE_LOCAL
134 . xmaxl, ymaxl, zmaxl, xminl, yminl, zminl, gapmin, gapmax,drad,
135 . c_maxl,pmax_gap,vmaxdt,marge,tzinf,sx,sy,sz,sx2,sy2,sz2,dgapload,
136 . curv_max(nrtm_t),bminma_old(6),bgapemx,bsav(6)
137 INTEGER :: NMN,NRTM,NSN,NTY
138 logical :: need_computation
142 call check_sorting_criteria( need_computation,nin,npari,nspmd,
143 . itask,ipari(1,nin),tt,intbuf_tab )
144 if( .not.need_computation )
return
158 ivis2 = ipari(14,nin)
159 noint = ipari(15,nin)
160 ncont = ipari(18,nin)
162 inacti = ipari(22,nin)
164 intth = ipari(47,nin)
165 iedge = ipari(58,nin)
166 flagremn= ipari(63,nin)
167 igsti = ipari(34,nin)
169 igap0 = ipari(53,nin)
171 lremnormax =ipari(82,nin)
172 nedge = ipari(68,nin)
175 nsnrold = ipari(24,nin)
177 nconte = ipari(88,nin)
180 IF(ipari(36,nin)> 0.AND.parameters%INTCAREA > 0) ifsub_carea = 1
183 gap =intbuf_tab%VARIABLES(gap_index)
184 gapmin=intbuf_tab%VARIABLES(gapmin_index)
185 gapmax=intbuf_tab%VARIABLES(gapmax_index)
186 pmax_gap=intbuf_tab%VARIABLES(pmax_index)
187 vmaxdt =intbuf_tab%VARIABLES(vmaxdt_index)
190 IF(ipari(47,nin) > 0) drad =intbuf_tab%VARIABLES(drad_index)
192 dgapload =intbuf_tab%VARIABLES(dgapload_index)
202 marge = intbuf_tab%VARIABLES(marge_index)
214 i_sk_old = intbuf_tab%I_STOK(1)
215 intbuf_tab%I_STOK(1) = 0
216 IF(iedge /= 0)
ALLOCATE(
nsnfieold(nspmd))
225 inacti = ipari(22,nin)
230 ALLOCATE(intbuf_tab%I25_CAND_A(nedge_total + 3))
232 i_sk_old_e = intbuf_tab%I_STOK_E(1)
234 1 nedge_total ,i_sk_old_e ,intbuf_tab%CANDS_E2E ,intbuf_tab%CANDM_E2E,
235 2 intbuf_tab%CAND_P ,intbuf_tab%I25_CAND_A ,nin ,nedge,ifq ,
236 3 intbuf_tab%FTSAVX_E ,intbuf_tab%FTSAVY_E ,intbuf_tab%FTSAVZ_E ,intbuf_tab%IFPEN_E)
238 intbuf_tab%I_STOK_E(1)=i_sk_old_e
240 ALLOCATE(intbuf_tab%I25_CAND_B(nedge_total + 3))
242 i_sk_old_e = intbuf_tab%I_STOK_E(2)
245 1 nedge_total ,i_sk_old_e ,intbuf_tab%CANDS_E2S,
246 . intbuf_tab%CANDM_E2S,
247 2 intbuf_tab%CAND_PS,intbuf_tab%I25_CAND_B ,nin ,nedge,
248 3 intbuf_tab%LEDGE,ifq ,intbuf_tab%FTSAVX_E2S,
249 4 intbuf_tab%FTSAVY_E2S, intbuf_tab%FTSAVZ_E2S,intbuf_tab%IFPEN_E2S )
251 intbuf_tab%I_STOK_E(2)=i_sk_old_e
256 IF(
SIZE(intbuf_tab%I_STOK_E) > 1 )
THEN
258 intbuf_tab%I_STOK_E(1) = 0
259 intbuf_tab%I_STOK_E(2) = 0
266 1 x ,intbuf_tab%NSV,intbuf_tab%MSR,nsn ,nmn ,
267 2 itask ,intbuf_tab%XSAV,xminl ,yminl ,zminl ,
268 3 xmaxl ,ymaxl ,zmaxl ,c_maxl,curv_max,
269 4 ipari(39,nin),intbuf_tab%IRECTM(1+4*sshift),nrtm_t ,sx ,sy ,
270 5 sz ,sx2 ,sy2 ,sz2 ,nmn_l)
274 1 intbuf_tab%GAP_M ,intbuf_tab%GAPMSAV ,
275 2 intbuf_tab%MSR ,nrtm , itask)
279 bminma(1) =
max(bminma(1),xmaxl)
280 bminma(2) =
max(bminma(2),ymaxl)
281 bminma(3) =
max(bminma(3),zmaxl)
282 bminma(4) =
min(bminma(4),xminl)
283 bminma(5) =
min(bminma(5),yminl)
284 bminma(6) =
min(bminma(6),zminl)
285 curv_max_max =
max(curv_max_max,c_maxl)
286 nmn_g = nmn_g + nmn_l
288#include "lockoff.inc"
295 bsav(1:6)=bminma(1:6)
296 IF(abs(bminma(6)-bminma(3))>2*ep30.OR.
297 + abs(bminma(5)-bminma(2))>2*ep30.OR.
298 + abs(bminma(4)-bminma(1))>2*ep30)
THEN
299 CALL ancmsg(msgid=87,anmode=aninfo,
300 . i1=noint,c1=
'(I25BUCE)')
304 tzinf = marge+
max(gap+dgapload,drad)+vmaxdt
307 bgapemx=intbuf_tab%VARIABLES(bgapemx_index)
308 tzinf =
max(tzinf,marge+two*bgapemx+dgapload+vmaxdt)
311 bminma(1)=bminma(1)+tzinf
312 bminma(2)=bminma(2)+tzinf
313 bminma(3)=bminma(3)+tzinf
314 bminma(4)=bminma(4)-tzinf
315 bminma(5)=bminma(5)-tzinf
316 bminma(6)=bminma(6)-tzinf
319 CALL ancmsg(msgid=36,anmode=aninfo,
336 IF (imonm > 0 .AND. itask == 0)
CALL startime(timers,26)
337 bgapemx=intbuf_tab%VARIABLES(bgapemx_index)
340 1 x ,bminma ,nrtm_t,intbuf_tab%STFM(1+sshift),marge ,
341 2 curv_max,intbuf_tab%GAP_M(1+sshift),intbuf_tab%IRECTM(1+4*sshift),gap,
342 + intbuf_tab%VARIABLES(bgapsmx_index),
343 3 pmax_gap,vmaxdt,bgapemx,iedge,
344 . intbuf_tab%LEDGE,nedge,nledge,
345 . intbuf_tab%GAPE ,drad ,dgapload)
348 1 x ,bminma ,nrtm,intbuf_tab%STFE,marge ,
349 2 curv_max,intbuf_tab%GAP_M,intbuf_tab%IRECTM,gap,
350 + intbuf_tab%VARIABLES(bgapsmx_index),
351 3 pmax_gap,vmaxdt,bgapemx,iedge,igap0,
352 . intbuf_tab%LEDGE,nedge,nledge,
353 . intbuf_tab%GAPE,dgapload)
356 IF (imonm > 0 .AND. itask == 0)
CALL stoptime(timers,26)
364 nedge_local = intbuf_tab%NB_INTERNAL_EDGES + intbuf_tab%NB_BOUNDARY_EDGES_LOCAL
365 iedge = ipari(58,nin)
366 IF(imonm > 0)
CALL startime(timers,25)
368 1 intbuf_tab%NSV ,nsn ,x
369 2 bminma ,weight ,intbuf_tab%STFNS,nin ,isendto ,
370 3 ircvfrom ,iad_elem ,fr_elem ,nsnr ,ipari(21,nin),
371 4 intbuf_tab%GAP_S,itab ,kinet ,ifq ,inacti ,
372 5 nsnfiold ,ipari(47,nin),intbuf_tab%IELES,intbuf_tab%AREAS,temp ,
373 6 num_imp ,nodnx_sms ,intbuf_tab%GAP_SL,nty ,intbuf_tab%IRTLM,
374 7 intbuf_tab%TIME_S,intbuf_tab%SECND_FR,intbuf_tab%PENE_OLD,intbuf_tab%STIF_OLD ,
375 8 intbuf_tab%NBINFLG,ilev ,intbuf_tab%ICONT_I,ipari(72,nin),intbuf_tab%IPARTFRICS,
376 9 itied ,ivis2 , intbuf_tab%IF_ADH,intbuf_tab%LEDGE,nedge ,
377 a nledge ,intbuf_tab%STFM,nedge_local,intbuf_tab%GAPE,intbuf_tab%GAP_E_L,
378 b intbuf_tab%STFE ,intbuf_tab%EDGE_BISECTOR,intbuf_tab%VTX_BISECTOR,intbuf_tab%ADMSR,
380 d intbuf_tab%EBINFLG,intbuf_tab%MVOISIN,iedge ,icodt , iskew ,
381 e intbuf_tab%IPARTFRIC_E,intbuf_tab%E2S_NOD_NORMAL,ipari(97,nin),intbuf_tab%STIFMSDT_S,
382 . intbuf_tab%STIFMSDT_EDG,
383 f ifsub_carea ,parameters%INTAREAN)
384 IF(imonm > 0)
CALL stoptime(timers,25)
388 1 renum ,nin, nsn,nsnfiold ,nsnrold)
390 CALL spmd_rnum25_edge(nin,nedge,intbuf_tab%CANDS_E2E,intbuf_tab%I_STOK_E(1),
391 . intbuf_tab%CANDS_E2S,intbuf_tab%I_STOK_E(2))
399 cand_n_old = intbuf_tab%I_STOK(1)
406 IF (imonm > 0)
CALL startime(timers,30)
409 multimp = ipari(23,nin)
410 mulnsn = intbuf_tab%S_CAND_N - ncont
412 1 x ,v ,intbuf_tab%IRECTM(1+4*sshift),intbuf_tab%NSV,
414 2 nmn ,nrtm_t ,nsn ,intbuf_tab%CAND_E,intbuf_tab%CAND_N,
415 3 gap ,noint ,intbuf_tab%I_STOK(1) ,mulnsn ,bminma ,
417 5 sshift ,nin ,intbuf_tab%STFM(1+sshift) ,intbuf_tab%GAP_S,
418 6 nsnr ,ncont ,intbuf_tab%GAP_M(1+sshift) ,itask ,intbuf_tab%VARIABLES(bgapsmx_index),
419 7 i_mem ,intbuf_tab%PENE_OLD,itab ,intbuf_tab%NBINFLG,intbuf_tab%MBINFLG,
420 8 ilev ,intbuf_tab%MSEGTYP24,
421 9 flagremn,intbuf_tab%KREMNODE(1+2*sshift),intbuf_tab%REMNODE,
422 a igap ,intbuf_tab%GAP_SL,intbuf_tab%GAP_ML(1+sshift),icodt,iskew ,
429#include "lockoff.inc"
437 multimp = ipari(23,nin) * 1.3
442 intbuf_tab%I_STOK(1)=cand_n_old
446 IF (imonm > 0)
CALL stoptime(timers,30)
450 IF(iedge==0)
GOTO 200
451 inacti = ipari(22,nin)
452 cand_e_old(1:2) = intbuf_tab%I_STOK_E(1:2)
453 bgapemx=intbuf_tab%VARIABLES(bgapemx_index)
463 tzinf = marge+two*bgapemx+dgapload+vmaxdt
465 bminma(1)=bminma(1)+tzinf
467 bminma(3)=bminma(3)+tzinf
470 bminma(6)=bminma(6)-tzinf
484 IF (imonm > 0)
CALL startime(timers,30)
486 mulnsne = intbuf_tab%S_CANDM_E2E
487 mulnsns = intbuf_tab%S_CANDM_E2S
488 nedge_local = intbuf_tab%NB_INTERNAL_EDGES + intbuf_tab%NB_BOUNDARY_EDGES_LOCAL
490 1 x ,v ,intbuf_tab%IRECTM,inacti ,
491 2 nsn ,nmn ,intbuf_tab%CANDM_E2E,intbuf_tab%CANDS_E2E,
492 3 gap ,noint ,intbuf_tab%I_STOK_E(1) ,mulnsne ,bminma ,
493 4 marge ,vmaxdt ,drad ,
494 5 eshift ,nedge_t ,sshift ,nrtm_t ,intbuf_tab%STFM ,
495 6 intbuf_tab%STFE ,nconte ,intbuf_tab%GAP_M
496 7 i_meme ,itab ,intbuf_tab%MBINFLG,intbuf_tab%EBINFLG,intbuf_tab%I_STOK_E
497 8 mulnsns,ilev ,intbuf_tab%I25_CAND_A ,intbuf_tab%CAND_P ,igap0 ,
498 9 flagremn,intbuf_tab%KREMNODE_EDG ,intbuf_tab%REMNODE_EDG,intbuf_tab%KREMNODE_E2S,
499 . intbuf_tab%REMNODE_E2S,
500 a igap ,intbuf_tab%GAP_ML,iedge ,nedge ,intbuf_tab%MSEGTYP24,
501 b intbuf_tab%LEDGE,intbuf_tab%ADMSR,intbuf_tab%EDGE_BISECTOR,intbuf_tab%VTX_BISECTOR,
502 c intbuf_tab%CANDM_E2S,intbuf_tab%CANDS_E2S,intbuf_tab%I25_CAND_B,intbuf_tab%CAND_PS,intbuf_tab%GAPE,
503 d intbuf_tab%GAP_E_L,nedge_local,ifq , intbuf_tab%FTSAVX_E,intbuf_tab%FTSAVY_E,
504 e intbuf_tab%FTSAVZ_E,intbuf_tab%FTSAVX_E2S,intbuf_tab%FTSAVY_E2S, intbuf_tab%FTSAVZ_E2S,
505 f intbuf_tab%IFPEN_E,intbuf_tab%IFPEN_E2S,intbuf_tab%S_KREMNODE_EDG ,intbuf_tab%S_REMNODE_EDG,
506 g intbuf_tab%S_KREMNODE_E2S,intbuf_tab%S_REMNODE_E2S,dgapload)
509 IF (i_meme(1)/=0)
THEN
512#include "lockoff.inc"
514 IF (i_meme(2)/=0)
THEN
517#include "lockoff.inc"
523 IF(i_memg_e /=0 .OR. i_memg_s/=0)
THEN
527 multimp =
max(ipari(87,nin) +4,ipari(87,nin)+
min(20,(250000/nconte)))
532 multimp =
max(ipari(89,nin) +4,ipari(89,nin)+
min(20,(250000/nconte)))
539 intbuf_tab%I_STOK_E(1:2)=cand_e_old(1:2)
543 IF(itask==0)
DEALLOCATE(intbuf_tab%I25_CAND_A,intbuf_tab%I25_CAND_B)
545 IF (imonm > 0)
CALL stoptime(timers,30)
552 IF (imonm > 0)
CALL startime(timers,26)
553 intbuf_tab%VARIABLES(distance_index) = - one
556 1 result ,nsn ,intbuf_tab%CAND_N,intbuf_tab%I_STOK(1),nin,
557 2 ipari(21,nin),nsnr,multimp ,nty,ipari(47,nin),
558 3 ilev ,nsnfiold,ipari ,nsnrold, renum, h3d_data ,
559 4 ipari(72,nin),flagremn,lremnormax,nrtm ,intbuf_tab%KREMNODE,
560 5 intbuf_tab%REMNODE,ivis2,ipari(97,nin),ifsub_carea ,nodadt_therm)
567 1 result ,nin , nedge,intbuf_tab%CANDS_E2E,intbuf_tab%I_STOK_E(1),
568 2 intbuf_tab%CANDS_E2S,intbuf_tab%I_STOK_E(2),igap,ipari(72,nin),ipari(97,nin))
573 IF (imonm > 0)
CALL stoptime(timers,26)