37 2 NIN ,V ,GAP_M,IGAP ,ITASK ,
38 3 STF ,GAP_M_L,COUNT_REMSLVE,DRAD ,
39 4 IEDGE ,NEDGE ,LEDGE ,MVOISIN,NSV,
40 5 NRTM ,GAPE ,GAP_E_L,IGAP0,
41 6 STFE, S_STFE ,IFQ ,IFPEN,
42 7 CAND_FX,CAND_FY,CAND_FZ,DGAPLOAD)
54#include "implicit_f.inc"
61#include "i25edge_c.inc"
65 INTEGER,
INTENT(IN) :: S_STFE
66 INTEGER IRECT(4,*),CAND_M(*), CAND_S(*), IFPEN(*),
67 . I_STOK, NIN,IGAP ,ITASK, COUNT_REMSLVE(*),
68 . IEDGE, NEDGE, LEDGE(NLEDGE,*), MVOISIN(4,*), NSV(*), NRTM, IGAP0,IFQ
69 my_real ,
INTENT(IN) :: DGAPLOAD ,DRAD
71 . x(3,*),gap_m(*),v(3,*),stf(*),gap_m_l(*), gape(*), gap_e_l(*),
72 . stfe(s_stfe), cand_fx(4,*),cand_fy(4,*),cand_fz(4,*)
84 INTEGER I , L, IE, JE, NN1, NN2, SOL_EDGE, SH_EDGE,
87 . X1S,X2S,Y1S,Y2S,Z1S,Z2S,
94 . xmins,xmaxs,ymins,ymaxs,zmins,zmaxs,
95 . xminm,xmaxm,yminm,ymaxm,zminm,zmaxm,
102 INTEGER LIST(MVSIZ), LISTI(MVSIZ)
103 INTEGER IS,JS,LS,NLS,NLT,NSEG,NLF,II,NLS2
104 INTEGER N1(MVSIZ),N2(MVSIZ)
105 INTEGER SG, FIRST, LAST,COUNT_CAND
106 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TAGM
108 .
DIMENSION(:,:),
ALLOCATABLE :: boxm
112 INTEGER,
DIMENSION(:),
ALLOCATABLE :: LIST_REAL_CANDIDATE
116 sh_edge =iedge-10*sol_edge ! shells
121 first = 1 + i_stok*itask / nthread
122 last = i_stok*(itask+1) / nthread
123 my_size = last - first + 1
124 ALLOCATE( list_real_candidate(my_size) )
129 ALLOCATE(tagm(nrtm),boxm(6,nrtm))
137 IF(stf(l)/=zero)tagm(l)=1
142 nrtmft=1 + nrtm*itask / nthread
143 nrtmlt=nrtm*(itask+1) / nthread
169 xminm =
min(x1,x2,x3,x4)
170 xmaxm =
max(x1,x2,x3,x4)
171 dxm = em02*(xmaxm-xminm)
175 yminm =
min(y1,y2,y3,y4)
176 ymaxm =
max(y1,y2,y3,y4)
177 dym = em02*(ymaxm-yminm)
181 zminm =
min(z1,z2,z3,z4)
182 zmaxm =
max(z1,z2,z3,z4)
183 dzm = em02*(zmaxm-zminm)
202 DO sg = first,last,mseg
203 nseg =
min(mseg,last-js)
215 IF(cand_s(i)<=nedge)
THEN
218 . ledge(7,cand_s(i))/=1.AND.
219 . ledge(3,cand_s(i))/=0) cycle
229 debug_e2e(
int_checksum(ids,4,1)==d_em .AND. ledge(8,cand_s(i)) == d_es,i)
234 .
ledge_fie(nin)%P(e_type,cand_s(i)-nedge)/=1.AND.
235 .
ledge_fie(nin)%P(e_right_seg,cand_s(i)-nedge)/=0) cycle
273 . ledge(7,cand_s(i))/=1.AND.
274 . ledge(3,cand_s(i))/=0) cycle
282 debug_e2e(
int_checksum(ids,4,1)==d_em.AND.ledge(8,cand_s(i)) == d_es,i)
292#include "vectorize.inc"
299 IF(sh_edge /= 0 .AND. igap0 /= 0) gapv(is)=two*gapv(is)
301 . gapv(is)=
min(gapv(is),gap_m_l(ie)+gap_e_l(je))
302 gapv(is)=
max(gapv(is)+dgapload,drad)
316 l = ledge(1,cand_s(i))
323 debug_e2e(
int_checksum(ids,4,1)==d_em .AND. ledge(8,cand_s(i)) == d_es,l)
324 debug_e2e(
int_checksum(ids,4,1)==d_em .AND. ledge(8,cand_s(i)) == d_es,ledge(ledge_weight,cand_s(i)))
338 debug_e2e(
int_checksum(ids,4,1)==d_em .AND. ledge(8,cand_s(i)) == d_es,s)
342 n1(is)= ledge(5,cand_s(i))
343 n2(is)= ledge(6,cand_s(i))
347 zmins =
min(z1s,z2s)-gapvd
348 zmaxs =
max(z1s,z2s)+gapvd
349 zminm = boxm(5,cand_m(i))
350 zmaxm = boxm(6,cand_m(i))
358 debug_e2e(
int_checksum(ids,4,1)==d_em .AND. ledge(8,cand_s(i)) == d_es,zmaxs)
359 debug_e2e(
int_checksum(ids,4,1)==d_em .AND. ledge(8,cand_s(i)) == d_es,zmins)
360 debug_e2e(
int_checksum(ids,4,1)==d_em .AND. ledge(8,cand_s(i)) == d_es,zmaxm)
361 debug_e2e(
int_checksum(ids,4,1)==d_em .AND. ledge(8,cand_s(i)) == d_es,zminm)
364 IF (zmaxs>=zminm.AND.zmaxm>=zmins)
THEN
380 ymins =
min(y1s,y2s)-gapvd
381 ymaxs =
max(y1s,y2s)+gapvd
382 yminm = boxm(3,cand_m(i))
383 ymaxm = boxm(4,cand_m(i))
391 debug_e2e(
int_checksum(ids,4,1)==d_em .AND. ledge(8,cand_s(i)) == d_es,ymaxs)
392 debug_e2e(
int_checksum(ids,4,1)==d_em .AND. ledge(8,cand_s(i)) == d_es,ymins)
393 debug_e2e(
int_checksum(ids,4,1)==d_em .AND. ledge(8,cand_s(i)) == d_es,ymaxm)
394 debug_e2e(
int_checksum(ids,4,1)==d_em .AND. ledge(8,cand_s(i)) == d_es,yminm)
397 IF (ymaxs>=yminm.AND.ymaxm>=ymins)
THEN
412 xmins =
min(x1s,x2s)-gapvd
413 xmaxs =
max(x1s,x2s)+gapvd
414 xminm = boxm(1,cand_m(i))
415 xmaxm = boxm(2,cand_m(i))
423 debug_e2e(
int_checksum(ids,4,1)==d_em .AND. ledge(8,cand_s(i)) == d_es,xmaxs)
424 debug_e2e(
int_checksum(ids,4,1)==d_em .AND. ledge(8,cand_s(i)) == d_es,xmins)
425 debug_e2e(
int_checksum(ids,4,1)==d_em .AND. ledge(8,cand_s(i)) == d_es,xmaxm)
426 debug_e2e(
int_checksum(ids,4,1)==d_em .AND. ledge(8,cand_s(i)) == d_es,xminm)
429 IF (xmaxs>=xminm.AND.xmaxm>=xmins)
THEN
430 cand_s(i) = -cand_s(i)
431 count_cand = count_cand+1
432 list_real_candidate(count_cand) = i
444 gapv(is)=
gapfie(nin)%P(cand_s(i)-nedge)
445 IF(sh_edge /= 0 .AND. igap0 /= 0) gapv(is)=two*gapv(is)
448 . gapv(is)=
min(gapv(is),
gape_l_fie(nin)%P(cand_s(i)-nedge)+gap_m_l(ie))
449 gapv(is)=
max(gapv(is)+dgapload,drad)
467 IF (
stifie(nin)%P(ii)/=zero)
THEN
470 z1s=
xfie(nin)%P(3,nn1)
471 z2s=
xfie(nin)%P(3,nn2)
475 zmins =
min(z1s,z2s)-gapvd
476 zmaxs =
max(z1s,z2s)+gapvd
477 zminm = boxm(5,cand_m(i))
478 zmaxm = boxm(6,cand_m(i))
486 debug_e2e(
int_checksum(ids,4,1)==d_em .AND.
ledge_fie(nin)%P(e_global_id,cand_s(i)-nedge) == d_es,zmaxs)
488 debug_e2e(
int_checksum(ids,4,1)==d_em .AND.
ledge_fie(nin)%P(e_global_id,cand_s(i)-nedge) == d_es,zmaxm)
489 debug_e2e(
int_checksum(ids,4,1)==d_em .AND.
ledge_fie(nin)%P(e_global_id,cand_s(i)-nedge) == d_es,zminm)
492 IF (zmaxs>=zminm.AND.zmaxm>=zmins)
THEN
510 y1s=
xfie(nin)%P(2,nn1)
511 y2s=
xfie(nin)%P(2,nn2)
515 ymins =
min(y1s,y2s)-gapvd
516 ymaxs =
max(y1s,y2s)+gapvd
517 yminm = boxm(3,cand_m(i))
518 ymaxm = boxm(4,cand_m(i))
527 debug_e2e(
int_checksum(ids,4,1)==d_em .AND.
ledge_fie(nin)%P(e_global_id,cand_s(i)-nedge) == d_es,ymaxs)
529 debug_e2e(
int_checksum(ids,4,1)==d_em .AND.
ledge_fie(nin)%P(e_global_id,cand_s(i)-nedge) == d_es,ymaxm)
530 debug_e2e(
int_checksum(ids,4,1)==d_em .AND.
ledge_fie(nin)%P(e_global_id,cand_s(i)-nedge) == d_es,yminm)
533 IF (ymaxs>=yminm.AND.ymaxm>=ymins)
THEN
545 x1s=
xfie(nin)%P(1,nn1)
546 x2s=
xfie(nin)%P(1,nn2)
548 xmins =
min(x1s,x2s)-gapvd
549 xmaxs =
max(x1s,x2s)+gapvd
550 xminm = boxm(1,cand_m(i))
551 xmaxm = boxm(2,cand_m(i))
559 debug_e2e(
int_checksum(ids,4,1)==d_em .AND.
ledge_fie(nin)%P(e_global_id,cand_s(i)-nedge) == d_es,xmaxs)
560 debug_e2e(
int_checksum(ids,4,1)==d_em .AND.
ledge_fie(nin)%P(e_global_id,cand_s(i)-nedge) == d_es,xmins)
561 debug_e2e(
int_checksum(ids,4,1)==d_em .AND.
ledge_fie(nin)%P(e_global_id,cand_s(i)-nedge) == d_es,xmaxm)
562 debug_e2e(
int_checksum(ids,4,1)==d_em .AND.
ledge_fie(nin)%P(e_global_id,cand_s(i)-nedge) == d_es,xminm)
565 IF (xmaxs>=xminm.AND.xmaxm>=xmins)
THEN
567 cand_s(i) = -cand_s(i)
568 count_cand = count_cand+1
570 list_real_candidate(count_cand) = i
579#include "vectorize.inc"
581 i = list_real_candidate(j)
582 IF(ifpen(i) == 0 )
THEN
583 cand_fx(1:4,i) = zero
584 cand_fy(1:4,i) = zero
585 cand_fz(1:4,i) = zero
594 lskyi_count=lskyi_count+count_cand*5
595 count_remslve(nin)=count_remslve(nin)+ct
596#include "lockoff.inc"
604 IF(itask==0)
DEALLOCATE(tagm,boxm)
608 DEALLOCATE( list_real_candidate )