60
61
62
63 USE sfor_nsn2seg_mod, ONLY : sfor_4n2s4
64
65
66
67#include "implicit_f.inc"
68
69
70
71#include "mvsiz_p.inc"
72
73
74
75
76
77
78 INTEGER, INTENT(IN) :: NEL
79 INTEGER, DIMENSION(MVSIZ), INTENT(IN) :: ISTAB
80 my_real,
DIMENSION(NEL),
INTENT(IN) :: sti_c
81 my_real,
INTENT(IN) :: mu,fqmax,dt1
82 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: fld,ll,
83 1 x1, x2, x3, x4,
84 2 x5, x6, x7, x8,
85 3 y1, y2, y3, y4,
86 4 y5, y6, y7, y8,
87 5 z1, z2, z3, z4,
88 6 z5, z6, z7, z8,
89 4 vx1, vx2, vx3, vx4,
90 5 vx5, vx6, vx7, vx8,
91 6 vy1, vy2, vy3, vy4,
92 7 vy5, vy6, vy7, vy8,
93 8 vz1, vz2, vz3, vz4,
94 9 vz5, vz6, vz7, vz8
95 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: sti,
96 4 f11, f12, f13, f14,
97 5 f15, f16, f17, f18,
98 6 f21, f22, f23, f24,
99 7 f25, f26, f27, f28,
100 8 f31, f32, f33, f34,
101 9 f35, f36, f37, f38
102 my_real,
DIMENSION(NEL),
INTENT(INOUT) :: e_distor
103
104
105
107 . xc(mvsiz),yc(mvsiz),zc(mvsiz),stif(mvsiz),
108 . vc(mvsiz,3),forc_n(mvsiz,3),for_t1(mvsiz,3),
109 . for_t2(mvsiz,3),for_t3(mvsiz,3),for_t4(mvsiz,3),
110 . for_t5(mvsiz,3),for_t6(mvsiz,3),for_t7(mvsiz,3),
111 . for_t8(mvsiz,3),fcx,fcy,fcz,fac,gap_max,gap_min,
112 . penmin(mvsiz),penref(mvsiz),marge(mvsiz),
113 . tol_t,tol_c,tol_v
114 INTEGER I,J,NCTL,IFCTL,IFC1(MVSIZ)
115
116
117
118
119
120
121 tol_c= zep2
122 tol_v = ten
123 DO i=1,nel
124 vc(i,1) = one_over_8*(vx1(i)+vx2(i)+vx3(i)+vx4(i)+
125 . vx5(i)+vx6(i)+vx7(i)+vx8(i))
126 vc(i,2) = one_over_8*(vy1(i)+vy2(i)+vy3(i)+vy4(i)+
127 . vy5(i)+vy6(i)+vy7(i)+vy8(i))
128 vc(i,3) = one_over_8*(vz1(i)+vz2(i)+vz3(i)+vz4(i)+
129 . vz5(i)+vz6(i)+vz7(i)+vz8(i))
130 stif(i) = sti_c(i)
131 ifc1(i) = istab(i)
132 ENDDO
133
134 nctl = 0
135 forc_n = zero
136 for_t1 = zero
137 for_t2 = zero
138 for_t3 = zero
139 for_t4 = zero
140 for_t5 = zero
141 for_t6 = zero
142 for_t7 = zero
143 for_t8 = zero
145 . vx1, vx2, vx3, vx4,
146 . vx5, vx6, vx7, vx8,
147 . vy1, vy2, vy3, vy4,
148 . vy5, vy6, vy7, vy8,
149 . vz1, vz2, vz3, vz4,
150 . vz5, vz6, vz7, vz8,
151 . for_t1, for_t2, for_t3, for_t4,
152 . for_t5, for_t6, for_t7, for_t8,
153 . ifctl, stif , mu , nel ,
154 . e_distor, dt1 )
155 IF (ifctl >0) THEN
156 nctl = nctl + ifctl
157
158 DO i=1,nel
159 xc(i) = one_over_8*(x1(i)+x2(i)+x3(i)+x4(i)+
160 . x5(i)+x6(i)+x7(i)+x8(i))
161 yc(i) = one_over_8*(y1(i)+y2(i)+y3(i)+y4(i)+
162 . y5(i)+y6(i)+y7(i)+y8(i))
163 zc(i) = one_over_8*(z1(i)+z2(i)+z3(i)+z4(i)+
164 . z5(i)+z6(i)+z7(i)+z8(i))
165 ENDDO
166
167 gap_min = tol_c*em02
168 gap_max = five*gap_min
169 penmin(1:nel) = gap_min*ll(1:nel)
170 penref(1:nel) = gap_max*ll(1:nel)
171 marge(1:nel) = two*gap_max*ll(1:nel)
172
174 . x2, x1, x4, x3,
175 . y2, y1, y4, y3,
176 . z2, z1, z4, z3,
177 . vx2, vx1, vx4, vx3,
178 . vy2, vy1, vy4, vy3,
179 . vz2, vz1, vz4, vz3,
180 . for_t2, for_t1, for_t4, for_t3,
181 . forc_n, ll , ifctl, ifc1 ,
182 . penmin, penref, marge, fqmax,
183 . sti_c, nel , vc ,e_distor,
184 . dt1)
185 nctl = nctl + ifctl
186
188 . x1, x2, x6, x5,
189 . y1, y2, y6, y5,
190 . z1, z2, z6, z5,
191 . vx1, vx2, vx6, vx5,
192 . vy1, vy2, vy6, vy5,
193 . vz1, vz2, vz6, vz5,
194 . for_t1, for_t2, for_t6, for_t5,
195 . forc_n, ll , ifctl, ifc1 ,
196 . penmin, penref, marge, fqmax,
197 . sti_c, nel , vc ,e_distor,
198 . dt1)
199 nctl = nctl + ifctl
200
202 . x2, x3, x7, x6,
203 . y2, y3, y7, y6,
204 . z2, z3, z7, z6,
205 . vx2, vx3, vx7, vx6,
206 . vy2, vy3, vy7, vy6,
207 . vz2, vz3, vz7, vz6,
208 . for_t2, for_t3, for_t7, for_t6,
209 . forc_n, ll , ifctl, ifc1 ,
210 . penmin, penref, marge, fqmax,
211 . sti_c, nel , vc ,e_distor,
212 . dt1)
213 nctl = nctl + ifctl
214
216 . x1, x5, x8, x4,
217 . y1, y5, y8, y4,
218 . z1, z5, z8, z4,
219 . vx1, vx5, vx8, vx4,
220 . vy1, vy5, vy8, vy4,
221 . vz1, vz5, vz8, vz4,
222 . for_t1, for_t5, for_t8, for_t4,
223 . forc_n, ll , ifctl, ifc1 ,
224 . penmin, penref, marge, fqmax,
225 . sti_c, nel , vc ,e_distor,
226 . dt1)
227 nctl = nctl + ifctl
228
230 . x4, x8, x7, x3,
231 . y4, y8, y7, y3,
232 . z4, z8, z7, z3,
233 . vx4, vx8, vx7, vx3,
234 . vy4, vy8, vy7, vy3,
235 . vz4, vz8, vz7, vz3,
236 . for_t4, for_t8, for_t7, for_t3,
237 . forc_n, ll , ifctl, ifc1 ,
238 . penmin, penref, marge, fqmax,
239 . sti_c, nel , vc ,e_distor,
240 . dt1)
241 nctl = nctl + ifctl
242
244 . x5, x6, x7, x8,
245 . y5, y6, y7, y8,
246 . z5, z6, z7, z8,
247 . vx5, vx6, vx7, vx8,
248 . vy5, vy6, vy7, vy8,
249 . vz5, vz6, vz7, vz8,
250 . for_t5, for_t6, for_t7, for_t8,
251 . forc_n, ll , ifctl, ifc1 ,
252 . penmin, penref, marge, fqmax,
253 . sti_c, nel , vc ,e_distor,
254 . dt1)
255 nctl = nctl + ifctl
256
257
258 CALL sfor_4n2s4(
259 . x5, x8, x7, x6,
260 . y5, y8, y7, y6,
261 . z5, z8, z7, z6,
262 . vx5, vx8, vx7, vx6,
263 . vy5, vy8, vy7, vy6,
264 . vz5, vz8, vz7, vz6,
265 . for_t5, for_t8, for_t7, for_t6,
266 . x1, x4, x3, x2,
267 . y1, y4, y3, y2,
268 . z1, z4, z3, z2,
269 . vx1, vx4, vx3, vx2,
270 . vy1, vy4, vy3, vy2,
271 . vz1, vz4, vz3, vz2,
272 . for_t1, for_t4, for_t3, for_t2,
273 . stif, ll , nctl, ifc1 ,
274 . penmin, penref, marge, fqmax,
275 . sti_c,e_distor, dt1, nel )
276
277 CALL sfor_4n2s4(
278 . x4, x3, x7, x8,
279 . y4, y3, y7, y8,
280 . z4, z3, z7, z8,
281 . vx4, vx3, vx7, vx8,
282 . vy4, vy3, vy7, vy8,
283 . vz4, vz3, vz7, vz8,
284 . for_t4, for_t3, for_t7, for_t8,
285 . x1, x2, x6, x5,
286 . y1, y2, y6, y5,
287 . z1, z2, z6, z5,
288 . vx1, vx2, vx6, vx5,
289 . vy1, vy2, vy6, vy5,
290 . vz1, vz2, vz6, vz5,
291 . for_t1, for_t2, for_t6, for_t5,
292 . stif, ll , nctl, ifc1 ,
293 . penmin, penref, marge, fqmax,
294 . sti_c,e_distor, dt1, nel )
295
296 CALL sfor_4n2s4(
297 . x1, x4
298 . y1, y4, y8, y5,
299 . z1, z4, z8, z5,
300 . vx1, vx4, vx8, vx5,
301 . vy1, vy4, vy8, vy5,
302 . vz1, vz4, vz8, vz5,
303 . for_t1, for_t4, for_t8, for_t5,
304 . x2, x3, x7, x6,
305 . y2, y3, y7, y6,
306 . z2, z3, z7, z6,
307 . vx2, vx3, vx7, vx6,
308 . vy2, vy3, vy7, vy6,
309 . vz2, vz3, vz7, vz6,
310 . for_t2, for_t3, for_t7, for_t6,
311 . stif, ll , nctl, ifc1 ,
312 . penmin, penref, marge, fqmax,
313 . sti_c,e_distor, dt1, nel )
314!---- 2,6,7,3 to seg 4 : 1,5,8,4
315 CALL sfor_4n2s4(
316 . x2, x6, x7, x3,
317 . y2, y6, y7, y3,
318 . z2, z6, z7, z3,
319 . vx2, vx6, vx7, vx3,
320 . vy2, vy6, vy7, vy3,
321 . vz2, vz6, vz7, vz3,
322 . for_t2, for_t6, for_t7, for_t3,
323 . x1, x5, x8, x4,
324 . y1, y5, y8, y4,
325 . z1, z5, z8, z4,
326 . vx1, vx5, vx8, vx4,
327 . vy1, vy5, vy8, vy4,
328 . vz1, vz5, vz8, vz4,
329 . for_t1, for_t5, for_t8, for_t4,
330 . stif, ll , nctl, ifc1 ,
331 . penmin, penref, marge, fqmax,
332 . sti_c,e_distor, dt1, nel )
333
334 CALL sfor_4n2s4(
335 . x1, x5, x6, x2,
336 . y1, y5, y6, y2,
337 . z1, z5, z6, z2,
338 . vx1, vx5, vx6, vx2,
339 . vy1, vy5, vy6, vy2,
340 . vz1, vz5, vz6, vz2,
341 . for_t1, for_t5, for_t6, for_t2,
342 . x4, x8, x7, x3,
343 . y4, y8, y7, y3,
344 . z4, z8, z7, z3,
345 . vx4, vx8, vx7, vx3,
346 . vy4, vy8, vy7, vy3,
347 . vz4, vz8, vz7, vz3,
348 . for_t4, for_t8, for_t7, for_t3,
349 . stif, ll , nctl, ifc1 ,
350 . penmin, penref, marge, fqmax,
351 . sti_c,e_distor, dt1, nel )
352
353 CALL sfor_4n2s4(
354 . x1, x2, x3, x4,
355 . y1, y2, y3, y4,
356 . z1, z2, z3, z4,
357 . vx1, vx2, vx3, vx4,
358 . vy1, vy2, vy3, vy4,
359 . vz1, vz2, vz3, vz4,
360 . for_t1, for_t2, for_t3, for_t4,
361 . x5, x6, x7, x8,
362 . y5, y6, y7, y8,
363 . z5, z6, z7, z8,
364 . vx5, vx6, vx7, vx8,
365 . vy5, vy6, vy7, vy8,
366 . vz5, vz6, vz7, vz8,
367 . for_t5, for_t6, for_t7, for_t8,
368 . stif, ll , nctl, ifc1 ,
369 . penmin, penref, marge, fqmax,
370 . sti_c,e_distor, dt1, nel )
371
372 DO i=1,nel
373 fcx = one_over_8*forc_n(i,1)
374 fcy = one_over_8*forc_n(i,2)
375 fcz = one_over_8*forc_n(i,3)
376 f11(i)=f11(i) + for_t1(i,1) + fcx
377 f21(i)=f21(i) + for_t1(i,2) + fcy
378 f31(i)=f31(i) + for_t1(i,3) + fcz
379 f12(i)=f12(i) + for_t2(i,1) + fcx
380 f22(i)=f22(i) + for_t2(i,2) + fcy
381 f32(i)=f32(i) + for_t2(i,3) + fcz
382 f13(i)=f13(i) + for_t3(i,1) + fcx
383 f23(i)=f23(i) + for_t3(i,2) + fcy
384 f33(i)=f33(i) + for_t3(i,3) + fcz
385 f14(i)=f14(i) + for_t4(i,1) + fcx
386 f24(i)=f24(i) + for_t4(i,2) + fcy
387 f34(i)=f34(i) + for_t4(i,3) + fcz
388 f15(i)=f15(i) + for_t5(i,1) + fcx
389 f25(i)=f25(i) + for_t5(i,2) + fcy
390 f35(i)=f35(i) + for_t5(i,3) + fcz
391 f16(i)=f16(i) + for_t6(i,1) + fcx
392 f26(i)=f26(i) + for_t6(i,2) + fcy
393 f36(i)=f36(i) + for_t6(i,3) + fcz
394 f17(i)=f17(i) + for_t7(i,1) + fcx
395 f27(i)=f27(i) + for_t7(i,2) + fcy
396 f37(i)=f37(i) + for_t7(i,3) + fcz
397 f18(i)=f18(i) + for_t8(i,1) + fcx
398 f28(i)=f28(i) + for_t8(i,2) + fcy
399 f38(i)=f38(i) + for_t8(i,3) + fcz
400
401 IF (stif(i)>sti_c(i)) sti(i) =
max(sti(i),stif(i))
402 END DO
403 ENDIF
404
405
406 RETURN
subroutine sfor_n2s4(xi, yi, zi, stif, x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4, vx1, vx2, vx3, vx4, vy1, vy2, vy3, vy4, vz1, vz2, vz3, vz4, for_t1, for_t2, for_t3, for_t4, forc_n, ll, ifctl, ifc1, penmin, penref, marge, fqmax, stif0, nel, vc, e_distor, dt1)
subroutine sfor_visn8(vc, fld, tol_v, ifc1, vx1, vx2, vx3, vx4, vx5, vx6, vx7, vx8, vy1, vy2, vy3, vy4, vy5, vy6, vy7, vy8, vz1, vz2, vz3, vz4, vz5, vz6, vz7, vz8, for_t1, for_t2, for_t3, for_t4, for_t5, for_t6, for_t7, for_t8, ifctl, stif, mu, nel, e_distor, dt1)