34 SUBROUTINE i21optcd(TIMERS, CAND_E ,CAND_N ,XLOC ,I_STOK ,IRECT ,
35 2 GAP ,GAP_S ,IGAP ,NSN ,STFN ,
36 3 ITASK ,STF ,INACTI ,IFPEN ,FTXSAV ,
37 4 FTYSAV ,FTZSAV ,PENI ,NIN ,GAPMAX ,
38 5 ICURV ,IRTLM ,CSTS ,DEPTH ,NOD_NORMAL,
39 6 XM0 ,DRAD ,NB_STOK_N,NB_JLT,DGAPLOAD)
44#include "implicit_f.inc"
57#include "timeri_c.inc"
61 TYPE(timer_) :: TIMERS
62 INTEGER IRECT(4,*), CAND_E(*), CAND_N(*), IFPEN(*),
63 . I_STOK,NIN,IGAP ,ITASK, NSN, INACTI,ICURV,
64 . IRTLM(2,*),NB_STOK_N(*),NB_JLT(*)
66 . xloc(3,*),gap,gap_s(*),stfn(*),stf(*),
67 . ftxsav(*), ftysav(*), ftzsav(*), peni(*),
68 . gapmax, csts(2,*), depth, nod_normal(3,*),
70 my_real ,
INTENT(IN) :: dgapload,drad
74 INTEGER I,L,IS,JS,LS,,NLT,NSEG,SG,FIRST,LAST,MSEG,NLF,II,J
75 INTEGER LIST(MVSIZ),IG(MVSIZ),IX1(),IX2(MVSIZ),IX3(),
76 . IX4(MVSIZ), LISTI(MVSIZ),COUNT_CAND
79 . xi,x1,x2,x3,x4,yi,y1,y2,y3,y4,zi,z1,z2,z3,z4,
80 . xmin,xmax,ymin,
ymax,zmin,zmax,v12,v22,v32,v42
82 . gapv(mvsiz),nod_normal_l
83 . xi_l(mvsiz), yi_l(mvsiz), zi_l(mvsiz),
84 . x1_l(mvsiz), x2_l(mvsiz), x3_l(mvsiz), x4_l(mvsiz),
85 . y1_l(mvsiz), y2_l(mvsiz), y3_l(mvsiz), y4_l(mvsiz),
86 . z1_l(mvsiz), z2_l(mvsiz), z3_l(mvsiz), z4_l(mvsiz),
87 . nnx1(mvsiz), nnx2(mvsiz), nnx3(mvsiz), nnx4(mvsiz),
88 . nny1(mvsiz), nny2(mvsiz), nny3(mvsiz), nny4(mvsiz),
89 . nnz1(mvsiz), nnz2(mvsiz), nnz3(mvsiz), nnz4(mvsiz)
91 . x0,y0,z0,xxx,yyy,zzz,curv_max,depth2,drad2,
92 . xx1 ,xx2 ,xx3 ,xx4 ,xx5 ,xx6 ,xx7 ,xx8 ,
93 . yy1 ,yy2 ,yy3 ,yy4 ,yy5 ,yy6 ,yy7 ,yy8 ,
95 . nx1 ,nx2 ,nx3 ,nx4 , ny1 ,ny2 ,ny3 ,ny4 ,
96 . nz1 ,nz2 ,nz3 ,nz4 ,gapf, marj
103 DO j=itask+1,nsn,nthread
111 first = 1 + i_stok*itask / nthread
112 last = i_stok*(itask+1) / nthread
114 DO sg = first,last,mseg
115 nseg =
min(mseg,last-js)
126 gapv(is)=gap_s(cand_n(i))
127 IF(gapmax/=zero)gapv(is)=
min(gapv(is),gapmax)
128 gapv(is)=
max(gapv(is),gap)
133 IF (debug(3)>=1) nb_jlt(itask+1) = nb_jlt(itask+1) + nls
143 IF(stf(l)/=zero.AND.stfn(cand_n(i))/=zero)
THEN
164 x0 = fourth*(x1+x2+x3+x4)
165 y0 = fourth*(y1+y2+y3+y4)
166 z0 = fourth*(z1+z2+z3+z4)
167 xxx=
max(x1,x2,x3,x4)-
min(x1,x2,x3,x4)
168 yyy=
max(y1,y2,y3,y4)-
min(y1,y2,y3,y4)
169 zzz=
max(z1,z2,z3,z4)-
min(z1,z2,z3,z4)
170 curv_max = half *
max(xxx,yyy,zzz)
171 xmin = x0-curv_max-gapv(is)
172 ymin = y0-curv_max-gapv(is)
173 zmin = z0-curv_max-gapv(is)
174 xmax = x0+curv_max+gapv(is)
175 ymax = y0+curv_max+gapv(is)
176 zmax = z0+curv_max+gapv(is)
177 IF (xmin <= xi.AND.xmax >= xi.AND.
178 . ymin <= yi.AND.
ymax >= yi.AND.
179 . zmin <= zi.AND.zmax >= zi)
THEN
180 cand_n(i) = -cand_n(i)
181 count_cand = count_cand+1
186#include "vectorize.inc"
192 IF(stf(l)/=zero.AND.stfn(cand_n(i))/=zero)
THEN
194 gapf =
max(gapv(is)+dgapload,drad)
220 nx1 = nod_normal(1,ix1(is))
221 ny1 = nod_normal(2,ix1(is))
222 nz1 = nod_normal(3,ix1(is))
224 nx2 = nod_normal(1,ix2(is))
225 ny2 = nod_normal(2,ix2(is))
226 nz2 = nod_normal(3,ix2(is))
228 nx3 = nod_normal(1,ix3(is))
229 ny3 = nod_normal(2,ix3(is))
230 nz3 = nod_normal(3,ix3(is))
232 nx4 = nod_normal(1,ix4(is))
233 ny4 = nod_normal(2,ix4(is))
234 nz4 = nod_normal(3,ix4(is))
263 xmin =
min(xx1,xx2,xx3,xx4,xx5,xx6,xx7,xx8)
264 ymin =
min(yy1,yy2,yy3,yy4,yy5,yy6,yy7,yy8)
265 zmin =
min(zz1,zz2,zz3,zz4,zz5,zz6,zz7,zz8)
266 xmax =
max(xx1,xx2,xx3,xx4,xx5,xx6,xx7,xx8)
267 ymax =
max(yy1,yy2,yy3,yy4,yy5,yy6,yy7,yy8)
268 zmax =
max(zz1,zz2,zz3,zz4,zz5,zz6,zz7,zz8)
270 marj = em02*(xmax-xmin)
273 marj = em02*(
ymax-ymin)
276 marj = em02*(zmax-zmin)
280 IF (xmin <= xi.AND.xmax >= xi.AND.
281 . ymin <= yi.AND.
ymax >= yi.AND.
282 . zmin <= zi.AND.zmax >= zi)
THEN
325 IF (debug(3)>=1) nb_stok_n(itask+1) = nb_stok_n(itask+1) + nls
327 IF (imonm > 0 .AND. itask+1 == 1)
CALL startime(timers,77)
332 . nlt ,list ,cand_n(js+1) ,cand_e(js+1) , ix1_l ,
333 . ix2_l ,ix3_l ,ix4_l ,gapv ,xi_l ,
334 . yi_l ,zi_l ,irtlm ,csts ,depth2 ,
335 . nnx1 ,nny1 ,nnz1 ,nnx2 ,nny2 ,
336 . nnz2 ,nnx3 ,nny3 ,nnz3 ,nnx4 ,
337 . nny4 ,nnz4 ,x1_l ,y1_l ,z1_l ,
338 . x2_l ,y2_l ,z2_l ,x3_l ,y3_l ,
339 . z3_l ,x4_l ,y4_l ,z4_l ,drad2 ,
349 DO j=itask+1,nsn,nthread
350 IF(irtlm(1,j) > 0)
THEN
354 ELSEIF(ifpen(j)/=0)
THEN
364 lskyi_count=lskyi_count+count_cand*5
365#include "lockoff.inc"