57 2 MS ,NIN ,ITASK ,MWAG ,WEIGHT ,
58 3 ISENDTO ,IRCVFROM,RETRI ,IAD_ELEM,FR_ELEM ,
59 4 ITAB ,KINET ,TEMP ,NRTM_T ,RENUM ,
60 5 NSNFIOLD,ESHIFT ,NUM_IMP ,IND_IMP ,DIAG_SMS,
61 6 NODNX_SMS,INTBUF_TAB,H3D_DATA,GLOB_THERM)
70 use check_sorting_criteria_mod ,
only : check_sorting_criteria
75#include "implicit_f.inc"
85#include "timeri_c.inc"
87 COMMON /i20mainc/bminma,bminmae,curv_max_max,
88 . result,nsnr,nsnrold,nlinsr,i_memg
89 INTEGER RESULT,NSNR,NSNROLD,NLINSR,I_MEMG
91 . BMINMA(6),BMINMAE(6),CURV_MAX_MAX
95 TYPE(timer_) :: TIMERS
96 INTEGER NIN ,ITASK, RETRI,NRTM_T,ESHIFT,
97 . NUM_IMP ,IND_IMP(*),
99 . IPARI(NPARI,NINTER),MWAG(*),
100 . ISENDTO(NINTER+1,*),IRCVFROM(NINTER+1,*),
101 . weight(*), iad_elem(2,*) ,fr_elem(*),
102 . renum(numnod), nsnfiold(nspmd), nodnx_sms(*)
105 . x(*), v(*), ms(*),temp(*),diag_sms(*)
108 TYPE(H3D_DATABASE) :: H3D_DATA
109 type (glob_therm_) ,
INTENT(IN) :: GLOB_THERM
116 . ILD, NCONT, NCONTACT,NCONTE,NCONTACTE,
117 . INACTII,INACIMP,NSNF,NSNL,NLN,CAND_N_OLD,
121 . gap,maxbox,minbox,tzinf,
122 . xmaxl, ymaxl, zmaxl, xminl, yminl, zminl, gapmin, gapmax,
123 . xmaxel, ymaxel, zmaxel, xminel, yminel, zminel, c_maxl,
124 . curv_max(nrtm_t),gap_shift,rbid
126 INTEGER :: NRTM,NSN,NMN,NTY
128 INTEGER :: NLINSA,NLINMA,NLINM,NLINS
129 logical :: need_computation
134 call check_sorting_criteria( need_computation,nin,npari,nspmd,
135 . itask,ipari(1,nin),tt,intbuf_tab )
136 if( .not.need_computation )
return
152 nlinsa =ipari(53,nin)
153 nlinma =ipari(54,nin)
161 inacti =ipari(22,nin)
162 multimp=ipari(23,nin)
165 ncontact=multimp*ncont
166 ncontacte=multimp*nconte
171 IF(inacti==5.OR.inacti==6.OR.inacti==7.OR.ifq>0.OR.
173 nsnrold = ipari(24,nin)
178 gap =intbuf_tab%VARIABLES(2)
180 gapmin=intbuf_tab%VARIABLES(13)
181 gapmax=intbuf_tab%VARIABLES(16)
188 maxbox = intbuf_tab%VARIABLES(9)
189 minbox = intbuf_tab%VARIABLES(12)
190 tzinf = intbuf_tab%VARIABLES(8)
213 IF(inacti==5.OR.inacti==6.OR.ifq>0.OR.num_imp>0.OR.
218 . (inacti/=5.AND.inacti/=6.AND.ifq<=0))
THEN
225 ip1 = ip0 + nsn + nsnrold + 3
226 i_sk_old = intbuf_tab%I_STOK(1)
228 1 nsn+nsnrold ,i_sk_old ,intbuf_tab%CAND_N ,intbuf_tab%CAND_E ,
229 2 intbuf_tab%CAND_P,intbuf_tab%CAND_FX,intbuf_tab%CAND_FY,intbuf_tab%CAND_FZ,
230 3 mwag(ip0) ,intbuf_tab%IFPEN ,inacti ,ifq ,
231 4 num_imp ,ind_imp ,intbuf_tab%STFA ,nin ,
235 intbuf_tab%I_STOK(1)=i_sk_old
241 ipari(22,nin) = inacti
247 intbuf_tab%I_STOK(1)=zero
255 1 itask ,intbuf_tab%XA,nty ,nsn ,
256 2 nmn ,nsne ,nmne ,nln ,
257 3 intbuf_tab%NSV,intbuf_tab%MSR,intbuf_tab%XSAV,
258 4 intbuf_tab%NSVL,intbuf_tab%MSRL,intbuf_tab%CRITX,
259 5 xminl ,yminl ,zminl ,xmaxl ,
260 6 ymaxl ,zmaxl ,c_maxl ,curv_max ,
261 7 ipari(39,nin),intbuf_tab%IRECTM(1+4*eshift) ,nrtm_t,xminel ,
262 8 yminel ,zminel ,xmaxel , ymaxel ,
265 bminma(1) =
max(bminma(1),xmaxl)
266 bminma(2) =
max(bminma(2),ymaxl)
267 bminma(3) =
max(bminma(3),zmaxl)
268 bminma(4) =
min(bminma
269 bminma(5) =
min(bminma(5),yminl)
270 bminma(6) =
min(bminma(6),zminl)
271 curv_max_max =
max(curv_max_max
272#include "lockoff.inc"
280 inacti = ipari(22,nin)
283 + abs(bminma(5)-bminma(2))>2*ep30.OR.
284 + abs(bminma(4)-bminma(1))>2*ep30)
THEN
290 bminma(1)=bminma(1)+tzinf+curv_max_max
291 bminma(2)=bminma(2)+tzinf+curv_max_max
292 bminma(3)=bminma(3)+tzinf+curv_max_max
293 bminma(4)=bminma(4)-tzinf-curv_max_max
294 bminma(5)=bminma(5)-tzinf-curv_max_max
295 bminma(6)=bminma(6)-tzinf-curv_max_max
302 IF(imonm > 0)
CALL startime(timers,25)
304 1 intbuf_tab%NSV,nsn ,intbuf_tab%XA,intbuf_tab%VA,ms ,
305 2 bminma ,weight ,intbuf_tab%STFA,nin ,isendto,
306 3 ircvfrom ,iad_elem,fr_elem ,nsnr ,igap ,
307 4 intbuf_tab%GAP_S,itab ,kinet ,ifq ,ipari(22,nin) ,
308 5 nsnfiold,ipari(47,nin),intbuf_tab%IELEC,intbuf_tab%AREAS,temp ,
309 6 num_imp ,intbuf_tab%NLG,intbuf_tab%PENIS,intbuf_tab%PENIA ,
311 7 nodnx_sms ,intbuf_tab%NBINFLG,intbuf_tab%AVX_ANCR(1),intbuf_tab%AVX_ANCR(1+3*nln) )
312 IF(imonm > 0)
CALL stoptime(timers,25)
317 IF(inacti==5.OR.inacti==6.OR.inacti==7.OR.ifq>0
320 CALL spmd_rnumcd20(intbuf_tab%CAND_N,renum ,intbuf_tab%I_STOK(1),
321 1 nin, nsn ,nsnfiold,nsnrold )
326 cand_n_old = intbuf_tab%I_STOK(1)
337 IF (imonm > 0)
CALL startime(timers,30)
340 1 intbuf_tab%XA,intbuf_tab%IRECTM(1+4*eshift),intbuf_tab%NSV,ipari(22,nin),
342 2 nmn ,nrtm_t ,nsn ,intbuf_tab%CAND_E,intbuf_tab%CAND_N,
343 3 gap ,noint ,intbuf_tab%I_STOK(1) ,tzinf ,maxbox ,
344 4 minbox,mwag ,curv_max ,ncontact ,bminma ,
345 5 nb_n_b,eshift ,ild ,ifq ,intbuf_tab%IFPEN,
346 6 intbuf_tab%STFA,nin ,intbuf_tab%STFM(1+eshift) ,igap ,intbuf_tab%GAP_S,
347 7 nsnr ,ncont ,renum ,nsnrold ,intbuf_tab%GAP_M(1+eshift),
348 8 gapmin,gapmax ,num_imp ,nln ,intbuf_tab%NLG,
349 9 intbuf_tab%GAP_SH,intbuf_tab%NBINFLG,intbuf_tab%MBINFLG
350 . glob_therm%INTHEAT, glob_therm%IDT_THERM, glob_therm%NODADT_THERM)
358#include "lockoff.inc"
367 multimp = ipari(23,nin) + 4
372 intbuf_tab%I_STOK(1)=cand_n_old
373 multimp=ipari(23,nin)
374 ncontact=multimp*ncont
375 ncontacte=multimp*nconte
380 IF (imonm > 0)
CALL stoptime(timers,30)
383 intbuf_tab%VARIABLES(9) =
min(maxbox,intbuf_tab%VARIABLES(9))
384 intbuf_tab%VARIABLES(12) =
min(minbox,intbuf_tab%VARIABLES(12))
385 intbuf_tab%VARIABLES(8) =
min(tzinf,intbuf_tab%VARIABLES(8))
386 intbuf_tab%VARIABLES(5) = intbuf_tab%VARIABLES(8)-gap
387 result = result + ild
388#include "lockoff.inc"
395 intbuf_tab%I_STOK(1) = i_sk_old
400 maxbox = intbuf_tab%VARIABLES(9)
401 minbox = intbuf_tab%VARIABLES(12)
402 tzinf = intbuf_tab%VARIABLES(8)
409 IF (imonm > 0)
CALL startime(timers,26)
410 intbuf_tab%VARIABLES(5) = -intbuf_tab%VARIABLES
413 1 result ,nsn ,intbuf_tab%CAND_N,intbuf_tab%I_STOK(1),nin,
414 2 igap ,nsnr,multimp ,nty ,ipari(47,nin),
415 3 ipari(22,nin),h3d_data )
421 IF (imonm > 0)
CALL stoptime(timers,26)
431 IF(nlinma /= 0.OR.nspmd>1)
THEN
432 intbuf_tab%I_STOK_E(1) = 0
437 bminmae(1) =
max(bminmae(1),xmaxel)
438 bminmae(2) =
max(bminmae(2),ymaxel)
439 bminmae(3) =
max(bminmae(3),zmaxel)
441 bminmae(5) =
min(bminmae(5),yminel)
442 bminmae(6) =
min(bminmae(6),zminel)
443#include "lockoff.inc"
448 IF(abs(bminmae(6)-bminmae(3))>2*ep30.OR.
449 + abs(bminmae(5)-bminmae(2))>2*ep30.OR.
450 + abs(bminmae(4)-bminmae(1))>2*ep30)
THEN
452 CALL ancmsg(msgid=87,anmode=aninfo,
453 . i1=noint,c1=
'(I20BUCE)')
454#include "lockoff.inc"
457 bminmae(1)=bminmae(1)+tzinf
458 bminmae(2)=bminmae(2)+tzinf
459 bminmae(3)=bminmae(3)+tzinf
460 bminmae(4)=bminmae(4)-tzinf
461 bminmae(5)=bminmae(5)-tzinf
462 bminmae(6)=bminmae(6)-tzinf
468 IF(imonm >0)
CALL startime(timers,25)
470 1 intbuf_tab%IXLINS,nlinsa ,intbuf_tab%XA,intbuf_tab%VA,ms ,
471 2 bminmae ,weight ,intbuf_tab%STFS,nin ,isendto,
472 3 ircvfrom ,iad_elem,fr_elem ,nlinsr ,ipari(22,nin),
473 4 intbuf_tab%GAP_SE,intbuf_tab%PENISE,itab ,igap ,tzinf ,
474 5 intbuf_tab%NLG,intbuf_tab%PENIA,diag_sms,nodnx_sms)
475 IF(imonm >0)
CALL stoptime(timers,25)
479 cand_n_old = intbuf_tab%I_STOK_E(1)
481 nrtm_t = nlinma/nthread
482 eshift = itask*nrtm_t
483 IF(itask==nthread-1)nrtm_t=nlinma-(nthread-1)*(nlinma/nthread)
492 gap = gap + gap_shift
497 1 intbuf_tab%XA,intbuf_tab%IXLINS,intbuf_tab%IXLINM(1+2*itask*nrtm_t),intbuf_tab%NLG,
498 2 nlinsa ,nmne ,nrtm_t ,intbuf_tab%LCAND_N,intbuf_tab%LCAND_S,
499 3 gap ,noint ,intbuf_tab%I_STOK_E(1),bminmae ,tzinf ,
500 4 maxbox ,minbox ,nb_n_b , eshift ,ild ,
501 6 ncontacte,intbuf_tab%ADCCM20(1+itask*nrtm_t) ,intbuf_tab%CHAIN20,nin ,itab ,
502 7 nlinsr ,ncont ,intbuf_tab%GAP_SE,intbuf_tab%STFS,intbuf_tab%PENISE ,
503 8 igap ,intbuf_tab%STF(1+itask*nrtm_t),ipari(42,nin) , i_mem )
507 IF (i_mem == 1 .OR. i_mem == 2)
THEN
510#include "lockoff.inc"
520 multimp = ipari(23,nin) + 4
525 intbuf_tab%I_STOK_E(1)=cand_n_old
526 multimp=ipari(23,nin)
527 ncontact=multimp*ncont
528 ncontacte=multimp*nconte
533 intbuf_tab%VARIABLES(9) =
min(maxbox,intbuf_tab%VARIABLES(9))
534 intbuf_tab%VARIABLES(12) =
min(minbox,intbuf_tab%VARIABLES(12))
535 intbuf_tab%VARIABLES(8) =
min(tzinf,intbuf_tab%VARIABLES(8))
536 intbuf_tab%VARIABLES(5) = intbuf_tab%VARIABLES(8)-gap
537 result = result + ild
538#include "lockoff.inc"
545 intbuf_tab%I_STOK_E(1) = i_sk_old
550 maxbox = intbuf_tab%VARIABLES(9)
551 minbox = intbuf_tab%VARIABLES(12)
552 tzinf = intbuf_tab%VARIABLES(8)
559 IF (imonm > 0)
CALL startime(timers,26)
561 IF(intbuf_tab%VARIABLES(5)>=zero) intbuf_tab%VARIABLES(5)= -intbuf_tab%VARIABLES(5)
563 1 result ,nlinsa,intbuf_tab%LCAND_S,intbuf_tab%I_STOK_E(1),nin,
564 2 ipari(22,nin),nlinsr,multimp ,igap )
565 ipari(57,nin) = nlinsr
567 IF (imonm > 0)
CALL stoptime(timers,26)