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
113 . X(3,*), V(*), MS(*),TEMP(*)
114 TYPE(INTBUF_STRUCT_) INTBUF_TAB
115 TYPE(H3D_DATABASE) :: H3D_DATA
116 TYPE (PARAMETERS_) ,
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, MULNSNE, 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 . bminma_old(6),bgapemx,bsav(6)
137 my_real,
dimension(:),
allocatable :: curv_max
138 INTEGER :: NMN,NRTM,NSN,NTY
139 logical :: need_computation
143 call check_sorting_criteria( need_computation,nin,npari,nspmd,
144 . itask,ipari(1,nin),tt,intbuf_tab )
145 if( .not.need_computation )
return
146 allocate(curv_max(nrtm_t) )
160 ivis2 = ipari(14,nin)
161 noint = ipari(15,nin)
162 ncont = ipari(18,nin)
164 inacti = ipari(22,nin)
166 intth = ipari(47,nin)
167 iedge = ipari(58,nin)
168 flagremn= ipari(63,nin)
169 igsti = ipari(34,nin)
171 igap0 = ipari(53,nin)
172 flagremn =ipari(63,nin)
173 lremnormax =ipari(82,nin)
177 nsnrold = ipari(24,nin)
179 nconte = ipari(88,nin)
182 IF(ipari(36,nin)> 0.AND.parameters%INTCAREA > 0) ifsub_carea = 1
185 gap =intbuf_tab%VARIABLES(gap_index)
186 gapmin=intbuf_tab%VARIABLES(gapmin_index)
187 gapmax=intbuf_tab%VARIABLES(gapmax_index)
188 pmax_gap=intbuf_tab%VARIABLES(pmax_index)
189 vmaxdt =intbuf_tab%VARIABLES(vmaxdt_index)
192 IF(ipari(47,nin) > 0) drad =intbuf_tab%VARIABLES
194 dgapload =intbuf_tab%VARIABLES(dgapload_index)
204 marge = intbuf_tab%VARIABLES(marge_index)
216 i_sk_old = intbuf_tab%I_STOK(1)
217 intbuf_tab%I_STOK(1) = 0
218 IF(iedge /= 0)
ALLOCATE(
nsnfieold(nspmd))
227 inacti = ipari(22,nin)
232 ALLOCATE(intbuf_tab%I25_CAND_A(nedge_total + 3))
234 i_sk_old_e = intbuf_tab%I_STOK_E(1)
236 1 nedge_total ,i_sk_old_e ,intbuf_tab%CANDS_E2E ,intbuf_tab%CANDM_E2E,
237 2 intbuf_tab%CAND_P ,intbuf_tab%I25_CAND_A ,nin ,nedge,ifq ,
238 3 intbuf_tab%FTSAVX_E ,intbuf_tab%FTSAVY_E ,intbuf_tab%FTSAVZ_E ,intbuf_tab%IFPEN_E)
240 intbuf_tab%I_STOK_E(1)=i_sk_old_e
242 ALLOCATE(intbuf_tab%I25_CAND_B(nedge_total + 3))
244 i_sk_old_e = intbuf_tab%I_STOK_E(2)
247 1 nedge_total ,i_sk_old_e ,intbuf_tab%CANDS_E2S,
248 . intbuf_tab%CANDM_E2S,
249 2 intbuf_tab%CAND_PS,intbuf_tab%I25_CAND_B ,nin ,nedge,
250 3 intbuf_tab%LEDGE,ifq ,intbuf_tab%FTSAVX_E2S,
251 4 intbuf_tab%FTSAVY_E2S, intbuf_tab%FTSAVZ_E2S,intbuf_tab%IFPEN_E2S )
253 intbuf_tab%I_STOK_E(2)=i_sk_old_e
258 IF(
SIZE(intbuf_tab%I_STOK_E) > 1 )
THEN
260 intbuf_tab%I_STOK_E(1) = 0
261 intbuf_tab%I_STOK_E(2) = 0
269 1 x ,intbuf_tab%NSV,intbuf_tab%MSR,nsn ,nmn ,
270 2 itask ,intbuf_tab%XSAV,xminl ,yminl ,zminl ,
271 3 xmaxl ,ymaxl ,zmaxl ,c_maxl,curv_max,
272 4 ipari(39,nin),intbuf_tab%IRECTM(1+4*sshift),nrtm_t ,sx ,sy ,
273 5 sz ,sx2 ,sy2 ,sz2 ,nmn_l)
277 1 intbuf_tab%GAP_M ,intbuf_tab%GAPMSAV ,
278 2 intbuf_tab%MSR ,nrtm , itask)
282 bminma(1) =
max(bminma(1),xmaxl)
283 bminma(2) =
max(bminma(2),ymaxl)
284 bminma(3) =
max(bminma(3),zmaxl)
285 bminma(4) =
min(bminma(4),xminl)
286 bminma(5) =
min(bminma(5),yminl)
287 bminma(6) =
min(bminma(6),zminl)
288 curv_max_max =
max(curv_max_max,c_maxl)
289 nmn_g = nmn_g + nmn_l
291#include "lockoff.inc"
298 bsav(1:6)=bminma(1:6)
299 IF(abs(bminma(6)-bminma(3))>2*ep30.OR.
300 + abs(bminma(5)-bminma(2))>2*ep30.OR.
301 + abs(bminma(4)-bminma(1))>2*ep30)
THEN
302 CALL ancmsg(msgid=87,anmode=aninfo,
303 . i1=noint,c1=
'(I25BUCE)')
307 tzinf = marge+
max(gap+dgapload,drad)+vmaxdt
310 bgapemx=intbuf_tab%VARIABLES(bgapemx_index)
311 tzinf =
max(tzinf,marge+two*bgapemx+dgapload+vmaxdt)
314 bminma(1)=bminma(1)+tzinf
315 bminma(2)=bminma(2)+tzinf
316 bminma(3)=bminma(3)+tzinf
317 bminma(4)=bminma(4)-tzinf
318 bminma(5)=bminma(5)-tzinf
319 bminma(6)=bminma(6)-tzinf
322 CALL ancmsg(msgid=36,anmode=aninfo,
339 IF (imonm > 0 .AND. itask == 0)
CALL startime(timers,26)
340 bgapemx=intbuf_tab%VARIABLES(bgapemx_index)
343 1 x ,bminma ,nrtm_t,intbuf_tab%STFM(1+sshift),marge ,
344 2 curv_max,intbuf_tab%GAP_M(1+sshift),intbuf_tab%IRECTM(1+4*sshift),gap,
345 + intbuf_tab%VARIABLES(bgapsmx_index),
346 3 pmax_gap,vmaxdt,bgapemx,iedge,
347 . intbuf_tab%LEDGE,nedge,nledge,
348 . intbuf_tab%GAPE ,drad ,dgapload)
351 1 x ,bminma ,nrtm,intbuf_tab%STFE,marge ,
352 2 curv_max,intbuf_tab%GAP_M,intbuf_tab%IRECTM,gap,
353 + intbuf_tab%VARIABLES(bgapsmx_index),
354 3 pmax_gap,vmaxdt,bgapemx,iedge,igap0,
355 . intbuf_tab%LEDGE,nedge,nledge,
356 . intbuf_tab%GAPE,dgapload)
359 IF (imonm > 0 .AND. itask == 0)
CALL stoptime(timers,26)
367 nedge_local = intbuf_tab%NB_INTERNAL_EDGES + intbuf_tab%NB_BOUNDARY_EDGES_LOCAL
368 iedge = ipari(58,nin)
369 IF(imonm > 0)
CALL startime(timers,25)
371 1 intbuf_tab%NSV ,nsn ,x ,v ,ms ,
372 2 bminma ,weight ,intbuf_tab%STFNS,nin ,isendto ,
373 3 ircvfrom ,iad_elem ,fr_elem ,nsnr ,ipari(21,nin),
374 4 intbuf_tab%GAP_S,itab ,kinet ,ifq ,inacti ,
375 5 nsnfiold ,ipari(47,nin),intbuf_tab%IELES,intbuf_tab%AREAS,temp ,
376 6 num_imp ,nodnx_sms ,intbuf_tab%GAP_SL,nty ,intbuf_tab%IRTLM,
377 7 intbuf_tab%TIME_S,intbuf_tab%SECND_FR,intbuf_tab%PENE_OLD,intbuf_tab%STIF_OLD ,
378 8 intbuf_tab%NBINFLG,ilev ,intbuf_tab%ICONT_I,ipari(72,nin),intbuf_tab%IPARTFRICS,
379 9 itied ,ivis2 , intbuf_tab%IF_ADH,intbuf_tab%LEDGE,nedge
380 a nledge ,intbuf_tab%STFM,nedge_local,intbuf_tab%GAPE,intbuf_tab%GAP_E_L,
381 b intbuf_tab%STFE ,intbuf_tab%EDGE_BISECTOR,intbuf_tab%VTX_BISECTOR,intbuf_tab%ADMSR,
383 d intbuf_tab%EBINFLG,intbuf_tab%MVOISIN,iedge ,icodt , iskew ,
384 e intbuf_tab%IPARTFRIC_E,intbuf_tab%E2S_NOD_NORMAL,ipari(97,nin),intbuf_tab%STIFMSDT_S,
385 . intbuf_tab%STIFMSDT_EDG
386 f ifsub_carea ,parameters%INTAREAN)
387 IF(imonm > 0)
CALL stoptime(timers,25)
391 1 renum ,nin, nsn,nsnfiold ,nsnrold)
393 CALL spmd_rnum25_edge(nin,nedge,intbuf_tab%CANDS_E2E,intbuf_tab%I_STOK_E(1),
394 . intbuf_tab%CANDS_E2S,intbuf_tab%I_STOK_E(2))
402 cand_n_old = intbuf_tab%I_STOK(1)
409 IF (imonm > 0)
CALL startime(timers,30)
412 multimp = ipari(23,nin)
413 mulnsn = intbuf_tab%S_CAND_N - ncont
415 1 x ,v ,intbuf_tab%IRECTM(1+4*sshift),intbuf_tab%NSV,
417 2 nmn ,nrtm_t ,nsn ,intbuf_tab%CAND_E,intbuf_tab%CAND_N,
418 3 gap ,noint ,intbuf_tab%I_STOK(1) ,mulnsn ,bminma ,
419 4 marge ,curv_max ,pmax_gap ,vmaxdt ,
420 5 sshift ,nin ,intbuf_tab%STFM(1+sshift) ,intbuf_tab%GAP_S,
421 6 nsnr ,ncont ,intbuf_tab%GAP_M(1+sshift) ,itask ,intbuf_tab%VARIABLES(bgapsmx_index),
422 7 i_mem ,intbuf_tab%PENE_OLD,itab ,intbuf_tab%NBINFLG,intbuf_tab%MBINFLG,
423 8 ilev ,intbuf_tab%MSEGTYP24,
424 9 flagremn,intbuf_tab%KREMNODE(1+2*sshift),intbuf_tab%REMNODE,
425 a igap ,intbuf_tab%GAP_SL,intbuf_tab%GAP_ML(1+sshift),icodt,iskew ,
432#include "lockoff.inc"
440 multimp = ipari(23,nin) * 1.3
445 intbuf_tab%I_STOK(1)=cand_n_old
449 IF (imonm > 0)
CALL stoptime(timers,30)
453 IF(iedge==0)
GOTO 200
454 inacti = ipari(22,nin)
455 cand_e_old(1:2) = intbuf_tab%I_STOK_E(1:2)
456 bgapemx=intbuf_tab%VARIABLES(bgapemx_index)
466 tzinf = marge+two*bgapemx+dgapload+vmaxdt
468 bminma(1)=bminma(1)+tzinf
469 bminma(2)=bminma(2)+tzinf
470 bminma(3)=bminma(3)+tzinf
471 bminma(4)=bminma(4)-tzinf
472 bminma(5)=bminma(5)-tzinf
473 bminma(6)=bminma(6)-tzinf
481#include "lockoff.inc"
489 IF (imonm > 0)
CALL startime(timers,30)
491 mulnsne = intbuf_tab%S_CANDM_E2E
492 mulnsns = intbuf_tab%S_CANDM_E2S
493 nedge_local = intbuf_tab%NB_INTERNAL_EDGES + intbuf_tab%NB_BOUNDARY_EDGES_LOCAL
495 1 x ,v ,intbuf_tab%IRECTM,inacti ,
496 2 nsn ,nmn ,intbuf_tab%CANDM_E2E,intbuf_tab%CANDS_E2E,
497 3 gap ,noint ,intbuf_tab%I_STOK_E(1) ,mulnsne ,bminma ,
498 4 marge ,vmaxdt ,drad ,
499 5 eshift ,nedge_t ,sshift ,nrtm_t ,intbuf_tab%STFM ,
500 6 intbuf_tab%STFE ,nconte ,intbuf_tab%GAP_M ,itask ,bgapemx,
501 7 i_meme ,itab ,intbuf_tab%MBINFLG,intbuf_tab%EBINFLG,intbuf_tab%I_STOK_E(2),
502 8 mulnsns,ilev ,intbuf_tab%I25_CAND_A ,intbuf_tab%CAND_P ,igap0 ,
503 9 flagremn,intbuf_tab%KREMNODE_EDG ,intbuf_tab%REMNODE_EDG,intbuf_tab%KREMNODE_E2S,
504 . intbuf_tab%REMNODE_E2S,
505 a igap ,intbuf_tab%GAP_ML,iedge ,nedge ,intbuf_tab%MSEGTYP24,
506 b intbuf_tab%LEDGE,intbuf_tab%ADMSR,intbuf_tab%EDGE_BISECTOR,intbuf_tab%VTX_BISECTOR,
507 c intbuf_tab%CANDM_E2S,intbuf_tab%CANDS_E2S,intbuf_tab%I25_CAND_B,intbuf_tab%CAND_PS
508 d intbuf_tab%GAP_E_L,nedge_local,ifq , intbuf_tab%FTSAVX_E,intbuf_tab%FTSAVY_E,
509 e intbuf_tab%FTSAVZ_E,intbuf_tab%FTSAVX_E2S,intbuf_tab%FTSAVY_E2S, intbuf_tab%FTSAVZ_E2S,
510 f intbuf_tab%IFPEN_E,intbuf_tab%IFPEN_E2S,intbuf_tab%S_KREMNODE_EDG ,intbuf_tab%S_REMNODE_EDG,
511 g intbuf_tab%S_KREMNODE_E2S,intbuf_tab%S_REMNODE_E2S,dgapload)
514 IF (i_meme(1)/=0)
THEN
517#include "lockoff.inc"
519 IF (i_meme(2)/=0)
THEN
522#include "lockoff.inc"
528 IF(i_memg_e /=0 .OR. i_memg_s/=0)
THEN
532 multimp =
max(ipari(87,nin) +4,ipari(87,nin)+
min(20,(250000/nconte)))
537 multimp =
max(ipari(89,nin) +4,ipari(89,nin)+
min(20,(250000/nconte)))
544 intbuf_tab%I_STOK_E(1:2)=cand_e_old(1:2)
548 IF(itask==0)
DEALLOCATE(intbuf_tab%I25_CAND_A,intbuf_tab%I25_CAND_B)
550 IF (imonm > 0)
CALL stoptime(timers,30)
557 IF (imonm > 0)
CALL startime(timers,26)
558 intbuf_tab%VARIABLES(distance_index) = - one
561 1 result ,nsn ,intbuf_tab%CAND_N,intbuf_tab%I_STOK(1),nin,
562 2 ipari(21,nin),nsnr,multimp ,nty,ipari(47,nin),
563 3 ilev ,nsnfiold,ipari ,nsnrold, renum, h3d_data ,
564 4 ipari(72,nin),flagremn,lremnormax,nrtm ,intbuf_tab%KREMNODE,
565 5 intbuf_tab%REMNODE,ivis2,ipari(97,nin),ifsub_carea ,nodadt_therm)
572 1 result ,nin , nedge,intbuf_tab%CANDS_E2E,intbuf_tab%I_STOK_E(1),
573 2 intbuf_tab%CANDS_E2S,intbuf_tab%I_STOK_E(2),igap,ipari(72,nin),ipari(97,nin))
578 IF (imonm > 0)
CALL stoptime(timers,26)
592 if(
allocated(curv_max))
deallocate(curv_max)