34 2 NIN ,V ,GAPE ,IGAP ,ITASK ,
35 3 STF ,GAP_E_L,COUNT_REMSLVE,DRAD ,
36 4 IEDGE ,NEDGE ,LEDGE ,MVOISIN,NSV,
38 6 S_STFM, S_STFE,IFQ ,IFPEN ,
39 7 CAND_FX,CAND_FY,CAND_FZ,DGAPLOAD)
49#include "implicit_f.inc"
58 INTEGER,
INTENT(IN) :: S_STFM, S_STFE,IFQ
59 INTEGER IRECT(4,*),CAND_M(*), CAND_S(*),
60 . I_STOK, NIN,IGAP ,ITASK, COUNT_REMSLVE(*),
61 . IEDGE, NEDGE, IGAP0, LEDGE(NLEDGE,*), MVOISIN(4,*), NSV(*),
63 my_real ,
INTENT(IN) :: DGAPLOAD ,DRAD
65 . x(3,*),gape(*),v(3,*),stf(s_stfm),gap_e_l(*), stfe(s_stfe),
66 . cand_fx(*),cand_fy(*),cand_fz(*)
74#include "i25edge_c.inc"
79 INTEGER I , L, E, IE, JE, NN1, NN2, IL, JL, I1, I2, SOL_EDGE, SH_EDGE, SHFT_EDGE
81 . XI,X1,X2,X3,X4,YI,Y1,Y2,Y3,Y4,ZI,Z1,Z2,Z3,Z4,
82 . XMINS,XMAXS,YMINS,YMAXS,ZMINS,ZMAXS,
83 . XMINM,XMAXM,YMINM,YMAXM,ZMINM,ZMAXM,
84 . V12,V22,V32,V42,VV,GAPVD
87 . gapv(mvsiz),dtti(mvsiz),s
88 INTEGER LIST(MVSIZ), LISTI(MVSIZ)
89 INTEGER IS,JS,LS,NLS,NLT,NSEG,NLF,II,NLS2
91 INTEGER SG, FIRST, LAST,COUNT_CAND
98 sh_edge =iedge-10*sol_edge
103 first = 1 + i_stok*itask / nthread
104 last = i_stok*(itask+1) / nthread
107 DO sg = first,last,mseg
108 nseg =
min(mseg,last-js)
120 IF(sh_edge==1.AND.ledge(3,cand_m(i))/=0) cycle
122 IF(cand_s(i)<=nedge)
THEN
124 IF(sh_edge==1.AND.ledge(3,cand_s(i))/=0) cycle
127 . ledge(3,cand_m(i))/=0 .AND.
128 . ledge(3,cand_s(i))/=0) cycle
130 debug_e2e(ledge(8,cand_m(i)) == d_em .AND. ledge(8,cand_s(i)) == d_es,stfe(cand_s(i)))
131 debug_e2e(ledge(8,cand_m(i)) == d_em .AND. ledge(8,cand_s(i)) == d_es,cand_s(i))
137 IF(sh_edge==1.AND.
ledge_fie(nin)%P(e_right_seg,cand_s(i)-nedge)/=0) cycle
141 . ledge(3,cand_m(i))/=0 .AND.
142 .
ledge_fie(nin)%P(e_right_seg,cand_s(i)-nedge)/=0) cycle
143 debug_e2e(ledge(8,cand_m(i))==d_em.AND.
ledge_fie(nin)%P(1,cand_s(i)-nedge)==d_es,
stifie(nin)%P(cand_s(i)-nedge))
160 gapv(is)=two*gape(ie)+gape(je)
162 gapv(is)=two*(gape(ie)+gape(je))
166 . gapv(is)=
min(gapv(is),gap_e_l(ie)+gap_e_l(je))
177 IF(sh_edge==1.AND.ledge(3,cand_m(i))/=0) cycle
179 IF(sh_edge==1.AND.ledge(3,cand_s(i))/=0) cycle
182 . ledge(3,cand_m(i))/=0 .AND.
183 . ledge(3,cand_s(i))/=0) cycle
185 eid = ledge(8,cand_s(i))
186 debug_e2e(ledge(8,cand_m(i)) == d_em .AND.ledge(8,cand_s(i))==d_es,stfe(cand_s(i)))
187 debug_e2e(ledge(8,cand_m(i)) == d_em .AND. ledge(8,cand_s(i)) == d_es,cand_s(i))
201 gapv(is)=two*gape(ie)+gape(je)
203 gapv(is)=two*(gape(ie)+gape(je))
207 . gapv(is)=
min(gapv(is),gap_e_l(ie)+gap_e_l(je))
218 l = ledge(1,cand_s(i))
226 n1= ledge(5,cand_s(i))
228 n2= ledge(6,cand_s(i))
238 m1= ledge(5,cand_m(i))
240 m2= ledge(6,cand_m(i))
243 zmins =
min(z1,z2)-gapvd
244 zmaxs =
max(z1,z2)+gapvd
245 zminm =
min(z3,z4)-gapvd
246 zmaxm =
max(z3,z4)+gapvd
247 IF (zmaxs>=zminm.AND.zmaxm>=zmins)
THEN
260 n1= ledge(5,cand_s(i))
262 n2= ledge(6,cand_s(i))
264 m1= ledge(5,cand_m(i))
266 m2= ledge(6,cand_m(i))
268 gapvd =
max(gapv(is),drad)
269 ymins =
min(y1,y2)-gapvd
270 ymaxs =
max(y1,y2)+gapvd
271 yminm =
min(y3,y4)-gapvd
272 ymaxm =
max(y3,y4)+gapvd
273 IF (ymaxs>=yminm.AND.ymaxm>=ymins)
THEN
282 n1= ledge(5,cand_s(i))
284 n2= ledge(6,cand_s(i))
286 m1= ledge(5,cand_m(i))
288 m2= ledge(6,cand_m(i))
290 gapvd =
max(gapv(is)+dgapload,drad)
291 xmins =
min(x1,x2)-gapvd
292 xmaxs =
max(x1,x2)+gapvd
293 xminm =
min(x3,x4)-gapvd
294 xmaxm =
max(x3,x4)+gapvd
295 IF (xmaxs>=xminm.AND.xmaxm>=xmins)
THEN
296 cand_s(i) = -cand_s(i)
297 count_cand = count_cand+1
310 gapv(is)=two*gape(ie)+
gapfie(nin)%P(cand_s(i)-nedge)
312 gapv(is)=two*(gape(ie)+
gapfie(nin)%P(cand_s(i)-nedge))
316 . gapv(is)=
min(gapv(is),
gape_l_fie(nin)%P(cand_s(i)-nedge)+gap_e_l(ie))
331 IF (
stifie(nin)%P(ii)/=zero)
THEN
334 z1=
xfie(nin)%P(3,nn1)
335 z2=
xfie(nin)%P(3,nn2)
336 l = ledge(1,cand_m(i))
344 m1= ledge(5,cand_m(i))
346 m2= ledge(6,cand_m(i))
348 gapvd =
max(gapv(is)+dgapload,drad)
349 zmins =
min(z1,z2)-gapvd
350 zmaxs =
max(z1,z2)+gapvd
351 zminm =
min(z3,z4)-gapvd
352 zmaxm =
max(z3,z4)+gapvd
353 IF (zmaxs>=zminm.AND.zmaxm>=zmins)
THEN
370 y1=
xfie(nin)%P(2,nn1)
371 y2=
xfie(nin)%P(2,nn2)
372 m1= ledge(5,cand_m(i))
374 m2= ledge(6,cand_m(i))
376 gapvd =
max(gapv(is)+dgapload,drad)
377 ymins =
min(y1,y2)-gapvd
378 ymaxs =
max(y1,y2)+gapvd
379 yminm =
min(y3,y4)-gapvd
380 ymaxm =
max(y3,y4)+gapvd
381 IF (ymaxs>=yminm.AND.ymaxm>=ymins)
THEN
393 x1=
xfie(nin)%P(1,nn1)
394 x2=
xfie(nin)%P(1,nn2)
395 m1= ledge(5,cand_m(i))
397 m2= ledge(6,cand_m(i))
399 gapvd =
max(gapv(is)+dgapload,drad)
400 xmins =
min(x1,x2)-gapvd
401 xmaxs =
max(x1,x2)+gapvd
402 xminm =
min(x3,x4)-gapvd
403 xmaxm =
max(x3,x4)+gapvd
404 IF (xmaxs>=xminm.AND.xmaxm>=xmins)
THEN
405 cand_s(i) = -cand_s(i)
406 count_cand = count_cand+1
416 IF (ifpen(i) == 0 )
THEN
426 lskyi_count=lskyi_count+count_cand*5
427 count_remslve(nin)=count_remslve(nin)+ct
428#include "lockoff.inc"
subroutine i25optcd_edg(cand_m, cand_s, x, i_stok, irect, nin, v, gape, igap, itask, stf, gap_e_l, count_remslve, drad, iedge, nedge, ledge, mvoisin, nsv, igap0, stfe, s_stfm, s_stfe, ifq, ifpen, cand_fx, cand_fy, cand_fz, dgapload)