42
43
44
46
47
48
49#include "implicit_f.inc"
50#include "comlock.inc"
51
52
53
54#include "mvsiz_p.inc"
55
56
57
58#include "scr05_c.inc"
59#include "com01_c.inc"
60#include "com08_c.inc"
61#include "param_c.inc"
62#include "task_c.inc"
63#include "parit_c.inc"
64
65
66
67 INTEGER NSNR,I_STOK,NIN ,ITASK, NSN, ICURV, I_OPT_STOK, NRTM,
68 . IGAP, IRECT(4,*), NSV(*), CAND_E(*), CAND_N(*),
69 . IRTLM(4,NSN),MSEGLO(*),COUNT_REMSLV(*), ITAB(*),
70 . MSEGTYP(*), CAND_OPT_E(*), CAND_OPT_N(*), SIZOPT
71 INTEGER , INTENT(INOUT) :: ICONT_I(NSN)
72 my_real ,
INTENT(IN) :: dgapload ,drad
74 . gap,pmax_gap,
75 . x(3,*),gap_s(*),gap_m(*),stfn(*),stf(*),
76 . v(3,*),secnd_fr(6,*),time_s(*),
77 . pene_old(5,nsn),stif_old(2,nsn),
78 . gap_s_l(*),gap_m_l(*)
79
80
81
82 INTEGER I,L,IS,JS,LS,NLS,NLT,NSEG,NLS2,SG,FIRST,LAST,MSEG,NLF,
83 . MG,II,N,KLEAVE, ISH, NSNRF,NSNRL,NSNF,NSNL
84 INTEGER LIST(MVSIZ),IG(MVSIZ),IX1(MVSIZ),IX2(MVSIZ),IX3(MVSIZ),
85 . IX4(MVSIZ), LISTI(MVSIZ)
87 . xi,x1,x2,x3,x4,yi,y1,y2,y3,y4,zi,z1,z2,z3,z4,
88 . xmin,xmax,ymin,
ymax,zmin,zmax,v12,v22,v32,v42
90 . gapv(mvsiz),prec
92 . x0,y0,z0,xxx,yyy,zzz,curv_max,tzinf,vx,vy,vz,vv,
93 . vxi,vyi,vzi,
94 . vx1,vx2,vx3,vx4,vy1,vy2,vy3,vy4,vz1,vz2,vz3,vz4
95
96
97 IF (iresp.EQ.1) THEN
98 prec = (seven+half)*em06
99 ELSE
100 prec = em8
101 ENDIF
102
103
104
105
106
107 nsnf = 1 + itask*nsn / nthread
108 nsnl = (itask+1)*nsn / nthread
109 DO i = nsnf,nsnl
110 IF(irtlm(1,i)/=0) icont_i(i)=0
111 ENDDO
112
113 nsnrf = 1 + itask*nsnr / nthread
114 nsnrl = (itask+1)*nsnr / nthread
115
116 DO i=nsnrf,nsnrl
118 ENDDO
119
120 mseg = nvsiz
121 first = 1 + i_stok*itask / nthread
122 last = i_stok*(itask+1) / nthread
123 js = first-1
124 DO sg = first,last,mseg
125 nseg =
min(mseg,last-js)
126 nls=0
127
128 IF(nspmd>1) THEN
129
130
131
132 nls = 0
133 nls2 = nseg+1
134 DO is = 1, nseg
135 i=js+is
136 IF(cand_n(i)<=nsn)THEN
137 nls=nls+1
138 listi(nls)=is
139 ELSE
140 nls2=nls2-1
141 listi(nls2) = is
142 ENDIF
143 ENDDO
144 DO ls = 1, nls
145 is = listi(ls)
146 i=js+is
147 gapv(is)=gap_s(cand_n(i)) + gap_m(cand_e(i))
148 IF(igap==3)
149 . gapv(is)=
min(gapv(is),
150 . gap_s_l(cand_n(i))+gap_m_l(cand_e(i)))
151 ENDDO
152 ELSE
153 nls = nseg
154 DO is=1,nseg
155 i=js+is
156 gapv(is)=gap_s(cand_n(i)) + gap_m(cand_e(i))
157 IF(igap==3)
158 . gapv(is)=
min(gapv(is),
159 . gap_s_l(cand_n(i))+gap_m_l(cand_e(i)))
160 listi(is)=is
161 ENDDO
162 ENDIF
163
164 nlf = 1
165 nlt = nls
166 nls=0
167 DO ls = nlf, nlt
168
169 is = listi(ls)
170 i=js+is
171 l = cand_e(i)
172 n = cand_n(i)
173 mg = irtlm(1,n)
174 kleave=irtlm(3,n)
175 IF(stfn(n)/=zero.AND.stf(l)>zero.AND.mg==0.AND.kleave/=-1)THEN
176
177 ig(is) = nsv(cand_n(i))
178 zi = x(3,ig(is))
179 ix1(is)=irect(1,l)
180 z1=x(3,ix1(is))
181 ix2(is)=irect(2,l)
182 z2=x(3,ix2(is))
183 ix3(is)=irect(3,l)
184 z3=x(3,ix3(is))
185 ix4(is)=irect(4,l)
186 z4=x(3,ix4(is))
187 vzi = v(3,ig(is))
188 vz1=v(3,ix1(is))
189 vz2=v(3,ix2(is))
190 vz3=v(3,ix3(is))
191 vz4=v(3,ix4(is))
192 vz=
max(
max(vz1,vz2,vz3,vz4)-vzi,vzi-
min(vz1,vz2,vz3,vz4))
193
194 tzinf =
max(
max(gapv(is)+dgapload,drad),onep01*vz*dt1)
195 tzinf =
max(prec,tzinf)
196 zmin =
min(z1,z2,z3,z4)-tzinf
197 zmax =
max(z1,z2,z3,z4)+tzinf
198 IF (zmin<=zi.AND.zmax>=zi) THEN
199 nls=nls+1
200 list(nls)=is
201 ENDIF
202 ENDIF
203 ENDDO
204
205 nlt=nls
206 nls=0
207 DO ls=nlf,nlt
208 is=list(ls)
209 i=js+is
210 yi=x(2,ig(is))
211 y1=x(2,ix1(is))
212 y2=x(2,ix2(is))
213 y3=x(2,ix3(is))
214 y4=x(2,ix4(is))
215 vyi = v(2,ig(is))
216 vy1=v(2,ix1(is))
217 vy2=v(2,ix2(is))
218 vy3=v(2,ix3(is))
219 vy4=v(2,ix4(is))
220 vy=
max(
max(vy1,vy2,vy3,vy4)-vyi,vyi
221
222 tzinf =
max(
max(gapv(is)+dgapload,drad),onep01*vy*dt1)
223 tzinf =
max(prec,tzinf)
224 ymin =
min(y1,y2,y3,y4)-tzinf
226 IF (ymin<=yi.AND.
ymax>=yi)
THEN
227 nls=nls+1
228 list(nls)=is
229 ENDIF
230 ENDDO
231
232#include "vectorize.inc"
233 DO ls=nlf,nls
234 is=list(ls)
235 i=js+is
236 xi=x(1,ig(is))
237 x1=x(1,ix1(is))
238 x2=x(1,ix2(is))
239 x3=x(1,ix3(is))
240 x4=x(1,ix4(is))
241 vxi = v(1,ig(is))
242 vx1=v(1,ix1(is))
243 vx2=v(1,ix2(is))
244 vx3=v(1,ix3(is))
245 vx4=v(1,ix4(is))
246 vx=
max(
max(vx1,vx2,vx3,vx4)-vxi,vxi-
min(vx1,vx2,vx3,vx4))
247
248 tzinf =
max(
max(gapv(is)+dgapload,drad),onep01*vx*dt1)
249 tzinf =
max(prec,tzinf)
250 xmin =
min(x1,x2,x3,x4)-tzinf
251 xmax =
max(x1,x2,x3,x4)+tzinf
252 IF (xmin<=xi.AND.xmax>=xi) THEN
253 cand_n(i) = -cand_n(i)
254 ENDIF
255 ENDDO
256
257
258 IF(nspmd>1)THEN
259 nlf = nls2
260 nlt = nseg
261 DO ls = nlf, nlt
262 is = listi(ls)
263 i=js+is
264 gapv(is)=
gapfi(nin)%P(cand_n(i)-nsn) + gap_m(cand_e(i))
265 IF(igap==3)
266 . gapv(is)=
min(gapv(is),
267 .
gap_lfi(nin)%P(cand_n(i)-nsn)+gap_m_l(cand_e(i)))
268 ENDDO
269
270 nls=0
271 DO ls = nlf, nlt
272 is = listi(ls)
273 i=js+is
274 ii = cand_n(i)-nsn
275 l = cand_e(i)
278 IF(
stifi(nin)%P(ii)/=zero.AND.stf(l)>zero.AND.mg==0.AND.kleave/=-1)
THEN
279 zi =
xfi(nin)%P(3,ii)
280 ix1(is)=irect(1,l)
281 z1=x(3,ix1(is))
282 ix2(is)=irect(2,l)
283 z2=x(3,ix2(is))
284 ix3(is)=irect(3,l)
285 z3=x(3,ix3(is))
286 ix4(is)=irect(4,l)
287 z4=x(3,ix4(is))
288 vzi =
vfi(nin)%P(3,ii)
289 vz1=v(3,ix1(is))
290 vz2=v(3,ix2(is))
291 vz3=v(3,ix3(is))
292 vz4=v(3,ix4(is))
293 vz=
max(
max(vz1,vz2,vz3,vz4)-vzi,vzi-
min(vz1,vz2,vz3,vz4))
294
295 tzinf =
max(
max(gapv(is)+dgapload,drad),onep01*vz*dt1)
296 tzinf =
max(prec,tzinf)
297 zmin =
min(z1,z2,z3,z4)-tzinf
298 zmax =
max(z1,z2,z3,z4)+tzinf
299 IF (zmin<=zi.AND.zmax>=zi) THEN
300 nls=nls+1
301 list(nls)=is
302 ENDIF
303 ENDIF
304 ENDDO
305
306 nlf=1
307 nlt=nls
308 nls=0
309 DO ls=nlf,nlt
310 is=list(ls)
311 i=js+is
312 ii = cand_n(i)-nsn
314 y1=x(2,ix1(is))
315 y2=x(2,ix2(is))
316 y3=x(2,ix3(is))
317 y4=x(2,ix4(is))
318 vyi =
vfi(nin)%P(2,ii)
319 vy1=v(2,ix1(is))
320 vy2=v(2,ix2(is))
321 vy3=v(2,ix3(is))
322 vy4=v(2,ix4(is))
323 vy=
max(
max(vy1,vy2,vy3,vy4)-vyi,vyi-
min(vy1,vy2,vy3,vy4))
324
325 tzinf =
max(
max(gapv(is)+dgapload,drad),onep01*vy*dt1)
326 tzinf =
max(prec,tzinf)
327 ymin =
min(y1,y2,y3,y4)-tzinf
329 IF (ymin<=yi.AND.
ymax>=yi)
THEN
330 nls=nls+1
331 list(nls)=is
332 ENDIF
333 ENDDO
334
335#include "vectorize.inc"
336 DO ls=nlf,nls
337 is=list(ls)
338 i=js+is
339 ii = cand_n(i)-nsn
340 xi =
xfi(nin)%P(1,ii)
341 x1=x(1,ix1(is))
342 x2=x(1,ix2(is))
343 x3=x(1,ix3(is))
344 x4=x(1,ix4(is))
345 vxi =
vfi(nin)%P(1,ii)
346 vx1=v(1,ix1(is))
347 vx2=v(1,ix2(is))
348 vx3=v(1,ix3(is))
349 vx4=v(1,ix4(is))
350 vx=
max(
max(vx1,vx2,vx3,vx4)-vxi,vxi-
min(vx1,vx2,vx3,vx4))
351
352 tzinf =
max(
max(gapv(is)+dgapload,drad),onep01*vx*dt1)
353 tzinf =
max(prec,tzinf)
354 xmin =
min(x1,x2,x3,x4)-tzinf
355 xmax =
max(x1,x2,x3,x4)+tzinf
356 IF (xmin<=xi.AND.xmax>=xi) THEN
357 cand_n(i) = -cand_n(i)
358 ENDIF
359 ENDDO
360 ELSE
362 ENDIF
363 js = js + nseg
364 ENDDO
365
366
367
369
370
371 DO i=1,i_stok
372 IF(cand_n(i)<0)THEN
373 cand_n(i) = -cand_n(i)
374 i_opt_stok= i_opt_stok + 1
375 IF(i_opt_stok <= sizopt)THEN
376 cand_opt_n(i_opt_stok)= cand_n(i)
377 cand_opt_e(i_opt_stok)= cand_e(i)
378 END IF
379 END IF
380 END DO
381 IF(i_opt_stok <= sizopt)THEN
382 lskyi_count=lskyi_count+i_opt_stok*5
383 count_remslv(nin)=count_remslv(nin)+i_opt_stok
384 END IF
385
386 pmax_gap = zero
387
388
389
390 RETURN
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
type(real_pointer2), dimension(:), allocatable vfi
type(int_pointer2), dimension(:), allocatable irtlm_fi
type(real_pointer), dimension(:), allocatable stifi
type(real_pointer), dimension(:), allocatable gap_lfi
type(real_pointer), dimension(:), allocatable gapfi
type(real_pointer2), dimension(:), allocatable xfi
type(int_pointer), dimension(:), allocatable icont_i_fi