OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
s8for_distor.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| s8for_distor ../engine/source/elements/solid/solide/s8for_distor.F
25!||--- called by ------------------------------------------------------
26!|| s8cforc3 ../engine/source/elements/thickshell/solide8c/s8cforc3.f
27!|| s8eforc3 ../engine/source/elements/solid/solide8e/s8eforc3.F
28!|| scforc3 ../engine/source/elements/thickshell/solidec/scforc3.F
29!|| sforc3 ../engine/source/elements/solid/solide/sforc3.F
30!|| szforc3 ../engine/source/elements/solid/solidez/szforc3.F
31!||--- calls -----------------------------------------------------
32!|| sfor_4n2s4 ../engine/source/elements/solid/solide/sfor_4n2s4.F90
33!|| sfor_n2s4 ../engine/source/elements/solid/solide/sfor_n2s4.F
34!|| sfor_visn8 ../engine/source/elements/solid/solide/sfor_visn8.F
35!||--- uses -----------------------------------------------------
36!|| sfor_nsn2seg_mod ../engine/source/elements/solid/solide/sfor_4n2s4.F90
37!||====================================================================
38 SUBROUTINE s8for_distor(
39 . X1, X2, X3, X4,
40 . X5, X6, X7, X8,
41 . Y1, Y2, Y3, Y4,
42 . Y5, Y6, Y7, Y8,
43 . Z1, Z2, Z3, Z4,
44 . Z5, Z6, Z7, Z8,
45 . VX1, VX2, VX3, VX4,
46 . VX5, VX6, VX7, VX8,
47 . VY1, VY2, VY3, VY4,
48 . VY5, VY6, VY7, VY8,
49 . VZ1, VZ2, VZ3, VZ4,
50 . VZ5, VZ6, VZ7, VZ8,
51 . F11, F12, F13, F14,
52 . F15, F16, F17, F18,
53 . F21, F22, F23, F24,
54 . F25, F26, F27, F28,
55 . F31, F32, F33, F34,
56 . F35, F36, F37, F38,
57 . STI, STI_C, FLD, MU ,
58 . LL , ISTAB, FQMAX, NEL,
59 . E_DISTOR, DT1)
60C-----------------------------------------------
61C M o d u l e s
62C-----------------------------------------------
63 USE sfor_nsn2seg_mod, ONLY : sfor_4n2s4
64C-----------------------------------------------
65C I m p l i c i t T y p e s
66C-----------------------------------------------
67#include "implicit_f.inc"
68C-----------------------------------------------
69C G l o b a l P a r a m e t e r s
70C-----------------------------------------------
71#include "mvsiz_p.inc"
72C-----------------------------------------------
73C C o m m o n B l o c k s
74C-----------------------------------------------
75C-----------------------------------------------
76C D u m m y A r g u m e n t s
77C-----------------------------------------------
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
103C-----------------------------------------------
104C L o c a l V a r i a b l e s
105C-----------------------------------------------
106 my_real
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)
115C-----------------------------------------------
116C P r e - C o n d i t i o n s
117C-----------------------------------------------
118C-----------------------------------------------
119C S o u r c e C o d e
120C-----------------------------------------------
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
133C
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
144 CALL sfor_visn8(vc , fld, tol_v, ifc1,
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
157C---- element center
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! IFC1 is used for contact
167 gap_min = tol_c*em02 !percentage
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)
172C---- seg 1 : 2,1,4, 3 normal towards outside like tetra
173 CALL sfor_n2s4( xc, yc, zc, stif,
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
186C---- seg 2 : 1,2,6,5
187 CALL sfor_n2s4( xc, yc, zc, stif,
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
200C---- seg 3 : 2,3,7,6
201 CALL sfor_n2s4( xc, yc, zc, stif,
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
214C---- seg 4 : 1,5,8,4
215 CALL sfor_n2s4( xc, yc, zc, stif,
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
228C---- seg 5 : 4,8,7,3
229 CALL sfor_n2s4( xc, yc, zc, stif,
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
242C---- seg 6 : 5,6,7,8
243 CALL sfor_n2s4( xc, yc, zc, stif,
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! add corner nodes as 2nd to self-contact
257!---- 5,8,7,6 to seg 1 : 1,4, 3 2,
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!---- 4,3,7,8 to seg 2 : 1,2,6,5
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!---- 1,4,8,5 to seg 3 : 2,3,7,6
296 CALL sfor_4n2s4(
297 . x1, x4, x8, x5,
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!---- 1,5,6,2 to seg 5 : 4,8,7,3
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!---- 1,2,3,4 to seg 6 : 5,6,7,8
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 )
371C---- force assemblage and STI update (dt)
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
400C
401 IF (stif(i)>sti_c(i)) sti(i) = max(sti(i),stif(i))
402 END DO
403 ENDIF !(IFCTL >0) THEN
404
405
406 RETURN
407 END
408
#define max(a, b)
Definition macros.h:21
subroutine s8cforc3(timers, output, elbuf_tab, ng, pm, geo, ixs, x, a, v, ms, w, flux, flu1, veul, fv, ale_connect, iparg, tf, npf, bufmat, partsav, nloc_dmg, dt2t, neltst, ityptst, stifn, fsky, iads, offset, eani, iparts, f11, f21, f31, f12, f22, f32, f13, f23, f33, f14, f24, f34, f15, f25, f35, f16, f26, f36, f17, f27, f37, f18, f28, f38, nel, icp, icsig, smr, sms, smt, mfxx, mfxy, mfxz, mfyx, mfyy, mfyz, mfzx, mfzy, mfzz, nvc, ipm, itask, istrain, temp, fthe, fthesky, iexpan, igeo, nnpt, gresav, grth, igrth, mssa, dmels, table, xdp, voln, condn, condnsky, sensors, ioutprt, mat_elem, h3d_strain, dt, nodadt, dtfac1, dtmin1, idtmin, snpc, stf, sbufmat, svis, nsvois, idtmins, iresp, maxfunc, userl_avail, glob_therm, impl_s, idyna)
Definition s8cforc3.F:110
subroutine s8for_distor(x1, x2, x3, x4, x5, x6, x7, x8, y1, y2, y3, y4, y5, y6, y7, y8, z1, z2, z3, z4, z5, z6, z7, z8, vx1, vx2, vx3, vx4, vx5, vx6, vx7, vx8, vy1, vy2, vy3, vy4, vy5, vy6, vy7, vy8, vz1, vz2, vz3, vz4, vz5, vz6, vz7, vz8, f11, f12, f13, f14, f15, f16, f17, f18, f21, f22, f23, f24, f25, f26, f27, f28, f31, f32, f33, f34, f35, f36, f37, f38, sti, sti_c, fld, mu, ll, istab, fqmax, nel, e_distor, dt1)
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)
Definition sfor_n2s4.F:43
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)
Definition sfor_visn8.F:39