35
36
37
38#include "implicit_f.inc"
39#include "comlock.inc"
40
41
42
43#include "com01_c.inc"
44#include "com04_c.inc"
45#include "task_c.inc"
46
47
48
49 INTEGER NSN,NMN,ITASK,IEDGE, NIN,
50 . NSV(*),MSR(*),ISEADD(*) ,ISEDGE(*),INTPLY,DELTA_PMAX_GAP_NODE,ITAB(*)
52 . x(3,*), v(3,*), xsav(3,*), stfn(*),pene_old(5,nsn),
53 . xslv_g(*),xmsr_g(*), vslv_g(*), vmsr_g(*),gap_s(*),gapn_m(*),
54 . edge_l2(*),delta_pmax_gap,pmax_gap,dgap_m(*),delta_pmax_dgap
55
56
57
58 INTEGER NSNF,NMNF,NSNL,NMNL,I, J, K, II, N,IAD,NES,JG,DELTA_PMAX_GAP_NODE_L
60 . xslv(18),xmsr(12), vslv(6), vmsr(6),delta_pmax_gap_l,pmax_gap_l,
61 . edge_l2_old,edge_l2_new,aaa,delta_l
62
63
64
65
66
67
68
69 delta_pmax_gap_l = zero
70 pmax_gap_l = zero
71 delta_pmax_gap_node_l=0
72
73 xslv(1) = -ep30
74 xslv(2) = -ep30
75 xslv(3) = -ep30
76 xslv(4) = ep30
77 xslv(5) = ep30
78 xslv(6) = ep30
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94 xmsr(1) = -ep30
95 xmsr(2) = -ep30
96 xmsr(3) = -ep30
97 xmsr(4) = ep30
98 xmsr(5) = ep30
99 xmsr(6) = ep30
100
101
102
103
104
105
106
107
108 vslv(1) = -ep30
109 vslv(2) = -ep30
110 vslv(3) = -ep30
111 vslv(4) = ep30
112 vslv(5) = ep30
113 vslv(6) = ep30
114
115 vmsr(1) = -ep30
116 vmsr(2) = -ep30
117 vmsr(3) = -ep30
118 vmsr(4) = ep30
119 vmsr(5) = ep30
120 vmsr(6) = ep30
121
122 nsnf = 1 + itask*nsn / nthread
123 nsnl = (itask+1)*nsn / nthread
124 nmnf = 1 + itask*nmn / nthread
125 nmnl = (itask+1)*nmn / nthread
126
127
128 IF(nsn+nmn < numnod)THEN
129
130#include "vectorize.inc"
131 DO i=nsnf,nsnl
132 j=nsv(i)
133 IF(stfn(i)/=zero .AND. j<=numnod) THEN
134
135 edge_l2_new = zero
136 edge_l2_old = zero
137 IF(iedge/=0)THEN
138
139 iad = iseadd(i)
140 nes = isedge(iad)
141 IF(nes/=0)THEN
142 DO k=1,nes
143 jg = isedge(iad+k)
144 aaa = (x(1,jg)-x(1,j))*(x(1,jg)-x(1,j))
145 . + (x(2,jg)-x(2,j))*(x(2,jg)-x(2,j))
146 . + (x(3,jg)-x(3,j))*(x(3,jg)-x(3,j))
147 edge_l2_new =
max(edge_l2_new, aaa )
148 ENDDO
149 edge_l2_new = (half+em3)*sqrt(edge_l2_new)
150 edge_l2_old = edge_l2(i)
151 ENDIF
152 edge_l2(i) = edge_l2_new
153 ENDIF
154
155 delta_l=
max(pene_old(3,i),edge_l2_new)
156 . -
max(pene_old(4,i),edge_l2_old)
157
158 IF(delta_l > delta_pmax_gap_l) THEN
159 delta_pmax_gap_node_l = j
160 delta_pmax_gap_l = delta_l
161 ENDIF
162
163
164
165
166
167
168 pmax_gap_l =
max(pmax_gap_l,edge_l2_new)
169
170 xslv(1) =
max(xslv(1),x(1,j)-xsav(1,i))
171 xslv(2) =
max(xslv(2),x(2,j)-xsav(2,i))
172 xslv(3) =
max(xslv(3),x(3,j)-xsav(3,i))
173 xslv(4) =
min(xslv(4),x(1,j)-xsav(1,i))
174 xslv(5) =
min(xslv(5),x(2,j)-xsav(2,i))
175 xslv(6) =
min(xslv(6),x(3,j)-xsav(3,i))
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191 vslv(1)=
max(vslv(1),v(1,j))
192 vslv(2)=
max(vslv(2),v(2,j))
193 vslv(3)=
max(vslv(3),v(3,j))
194 vslv(4)=
min(vslv(4),v(1,j))
195 vslv(5)=
min(vslv(5),v(2,j))
196 vslv(6)=
min(vslv(6),v(3,j))
197 ENDIF
198 END DO
199#include "vectorize.inc"
200 DO i=nmnf,nmnl
201 ii = i+nsn
202 j=msr(i)
203 IF(j>0) THEN
204
205 xmsr(1) =
max(xmsr(1),x(1,j)-xsav(1,ii))
206 xmsr(2) =
max(xmsr(2),x(2,j)-xsav(2,ii))
207 xmsr(3) =
max(xmsr(3),x(3,j)-xsav(3,ii))
208 xmsr(4) =
min(xmsr(4),x(1,j)-xsav(1,ii))
209 xmsr(5) =
min(xmsr(5),x(2,j)-xsav(2,ii))
210 xmsr(6) =
min(xmsr(6),x(3,j)-xsav(3,ii))
211
212
213
214
215
216
217
218
219 vmsr(1)=
max(vmsr(1),v(1,j))
220 vmsr(2)=
max(vmsr(2),v(2,j))
221 vmsr(3)=
max(vmsr(3),v(3,j))
222 vmsr(4)=
min(vmsr(4),v(1,j))
223 vmsr(5)=
min(vmsr(5),v(2,j))
224 vmsr(6)=
min(vmsr(6),v(3,j))
225 ENDIF
226 END DO
227 ELSE
228
229#include "vectorize.inc"
230 DO i=nsnf,nsnl
231 j=nsv(i)
232 IF(stfn(i)/=zero .AND. j<=numnod) THEN
233
234 edge_l2_new = zero
235 edge_l2_old = zero
236 IF(iedge/=0)THEN
237
238 iad = iseadd(i)
239 nes = isedge(iad)
240 IF(nes/=0)THEN
241 DO k=1,nes
242 jg = isedge(iad+k)
243 aaa = (x(1,jg)-x(1,j))*(x(1,jg)-x(1,j))
244 . + (x(2,jg)-x(2,j))*(x(2,jg)-x(2,j))
245 . + (x(3,jg)-x(3,j))*(x(3,jg)-x(3,j))
246 edge_l2_new =
max(edge_l2_new, aaa )
247 ENDDO
248 edge_l2_new = (half+em3)*sqrt(edge_l2_new)
249 edge_l2_old = edge_l2(i)
250 ENDIF
251 edge_l2(i) = edge_l2_new
252 ENDIF
253
254 delta_l=
max(pene_old(3,i),edge_l2_new)
255 . -
max(pene_old(4,i),edge_l2_old)
256 IF(delta_l > delta_pmax_gap_l) THEN
257 delta_pmax_gap_node_l = j
258 delta_pmax_gap_l = delta_l
259 ENDIF
260
261
262
263
264
265
266 pmax_gap_l =
max(pmax_gap_l,edge_l2_new)
267
268 xslv(1)=
max(xslv(1),x(1,j)-xsav(1,j))
269 xslv(2)=
max(xslv(2),x(2,j)-xsav(2,j))
270 xslv(3)=
max(xslv(3),x(3,j)-xsav(3,j))
271 xslv(4)=
min(xslv(4),x(1,j)-xsav(1,j))
272 xslv(5)=
min(xslv(5),x(2,j)-xsav(2,j))
273 xslv(6)=
min(xslv(6),x(3,j)-xsav(3,j))
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289 vslv(1)=
max(vslv(1),v(1,j))
290 vslv(2)=
max(vslv(2),v(2,j))
291 vslv(3)=
max(vslv(3),v(3,j))
292 vslv(4)=
min(vslv(4),v(1,j))
293 vslv(5)=
min(vslv(5),v(2,j))
294 vslv(6)=
min(vslv(6),v(3,j))
295
296
297 ENDIF
298 END DO
299#include "vectorize.inc"
300 DO i=nmnf,nmnl
301 j=msr(i)
302 IF(j>0) THEN
303
304 xmsr(1)=
max(xmsr(1),x(1,j)-xsav(1,j))
305 xmsr(2)=
max(xmsr(2),x(2,j)-xsav(2,j))
306 xmsr(3)=
max(xmsr(3),x(3,j)-xsav(3,j))
307 xmsr(4)=
min(xmsr(4),x(1,j)-xsav(1,j))
308 xmsr(5)=
min(xmsr(5),x(2,j)-xsav(2,j))
309 xmsr(6)=
min(xmsr(6),x(3,j)-xsav(3,j))
310
311
312
313
314
315
316
317
318 vmsr(1)=
max(vmsr(1),v(1,j))
319 vmsr(2)=
max(vmsr(2),v(2,j))
320 vmsr(3)=
max(vmsr(3),v(3,j))
321 vmsr(4)=
min(vmsr(4),v(1,j))
322 vmsr(5)=
min(vmsr(5),v(2,j))
323 vmsr(6)=
min(vmsr(6),v(3,j))
324 ENDIF
325 ENDDO
326 ENDIF
327
328
329 IF(nspmd==1) THEN
330
331 DO i=nsnf,nsnl
332 stfn(i)=
max(stfn(i),zero)
333 ENDDO
334 ENDIF
335
336#include "lockon.inc"
337
338 IF(delta_pmax_gap_l > delta_pmax_gap)THEN
339 delta_pmax_gap=delta_pmax_gap_l
340 delta_pmax_gap_node=itab(delta_pmax_gap_node_l)
341 ENDIF
342
343
344
345 IF(intply > 0) delta_pmax_gap = delta_pmax_gap + delta_pmax_dgap
346
347 pmax_gap =
max(pmax_gap,pmax_gap_l)
348
349 xslv_g(1)=
max(xslv_g(1),xslv(1))
350 xslv_g(2)=
max(xslv_g(2),xslv(2))
351 xslv_g(3)=
max(xslv_g(3),xslv(3))
352 xslv_g(4)=
min(xslv_g(4),xslv(4))
353 xslv_g(5)=
min(xslv_g(5),xslv(5))
354 xslv_g(6)=
min(xslv_g(6),xslv(6))
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370 xmsr_g(1)=
max(xmsr_g(1),xmsr(1))
371 xmsr_g(2)=
max(xmsr_g(2),xmsr(2))
372 xmsr_g(3)=
max(xmsr_g(3),xmsr(3))
373 xmsr_g(4)=
min(xmsr_g(4),xmsr(4))
374 xmsr_g(5)=
min(xmsr_g(5),xmsr(5))
375 xmsr_g(6)=
min(xmsr_g(6),xmsr(6))
376
377
378
379
380
381
382
383
384 vslv_g(1)=
max(vslv_g(1),vslv(1))
385 vslv_g(2)=
max(vslv_g(2),vslv(2))
386 vslv_g(3)=
max(vslv_g(3),vslv(3))
387 vslv_g(4)=
min(vslv_g(4),vslv(4))
388 vslv_g(5)=
min(vslv_g(5),vslv(5))
389 vslv_g(6)=
min(vslv_g(6),vslv(6))
390 vmsr_g(1)=
max(vmsr_g(1),vmsr(1))
391 vmsr_g(2)=
max(vmsr_g(2),vmsr(2))
392 vmsr_g(3)=
max(vmsr_g(3),vmsr(3))
393 vmsr_g(4)=
min(vmsr_g(4),vmsr(4))
394 vmsr_g(5)=
min(vmsr_g(5),vmsr(5))
395 vmsr_g(6)=
min(vmsr_g(6),vmsr(6))
396
397#include "lockoff.inc"
398
399 RETURN