OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
s6cderi3.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!|| s6cderi3 ../engine/source/elements/thickshell/solide6c/s6cderi3.f
25!||--- called by ------------------------------------------------------
26!|| s6cforc3 ../engine/source/elements/thickshell/solide6c/s6cforc3.F
27!|| s6cke3 ../engine/source/elements/thickshell/solide6c/s6cke3.F
28!||--- calls -----------------------------------------------------
29!|| ancmsg ../engine/source/output/message/message.F
30!||--- uses -----------------------------------------------------
31!|| message_mod ../engine/share/message_module/message_mod.F
32!||====================================================================
33 SUBROUTINE s6cderi3(
34 1 OFF, DET, NGL, X1,
35 2 X2, X3, X4, X5,
36 3 X6, Y1, Y2, Y3,
37 4 Y4, Y5, Y6, Z1,
38 5 Z2, Z3, Z4, Z5,
39 6 Z6, PX1, PX2, PX3,
40 7 PX4, PY1, PY2, PY3,
41 8 PY4, PZ1, PZ2, PZ3,
42 9 PZ4, PX1H, PX2H, PX3H,
43 A PY1H, PY2H, PY3H, PZ1H,
44 B PZ2H, PZ3H, JACOB5, JACOB6,
45 C JACOB4, JACOB8, JACOB9, JACOB7,
46 D JACI33, B1X, B1Y, B2Y,
47 E B2X, B1122, B1221, B2212,
48 F B1121, B1XH, B1YH, B2XH,
49 G B2YH, B1122H, B1221H, B2212H,
50 H B1121H, VZL, VOLG, SAV,
51 I OFFG, NEL, ISMSTR)
52C-----------------------------------------------
53C M o d u l e s
54C-----------------------------------------------
55 USE message_mod
56C-----------------------------------------------
57C I m p l i c i t T y p e s
58C-----------------------------------------------
59#include "implicit_f.inc"
60#include "comlock.inc"
61C-----------------------------------------------
62C G l o b a l P a r a m e t e r s
63C-----------------------------------------------
64#include "mvsiz_p.inc"
65C-----------------------------------------------
66C C o m m o n B l o c k s
67C-----------------------------------------------
68#include "com06_c.inc"
69#include "units_c.inc"
70#include "scr07_c.inc"
71#include "scr17_c.inc"
72#include "scr18_c.inc"
73C-----------------------------------------------
74C D u m m y A r g u m e n t s
75C-----------------------------------------------
76 INTEGER, INTENT(IN) :: ISMSTR
77 INTEGER :: NEL, NGL(*)
78C
79 my_real
80 . OFF(*),DET(*),
81 . X1(*), X2(*), X3(*), X4(*), X5(*), X6(*),
82 . Y1(*), Y2(*), Y3(*), Y4(*), Y5(*), Y6(*),
83 . Z1(*), Z2(*), Z3(*), Z4(*), Z5(*), Z6(*),
84 . PX1(*), PX2(*), PX3(*), PX4(*),
85 . PY1(*), PY2(*), PY3(*), PY4(*),
86 . PZ1(*), PZ2(*), PZ3(*), PZ4(*),
87 . PX1H(*), PX2H(*), PX3H(*),
88 . PY1H(*), PY2H(*), PY3H(*),
89 . PZ1H(*), PZ2H(*), PZ3H(*),
90 . JACOB7(*),JACOB8(*),JACOB9(*),
91 . JACOB4(*),JACOB5(*),JACOB6(*),
92 . JACI33(*),B1X(MVSIZ,2),B1Y(MVSIZ,2),B2X(MVSIZ,2),B2Y(MVSIZ,2),
93 . B1XH(MVSIZ,2),B1YH(MVSIZ,2),B2XH(MVSIZ,2),B2YH(MVSIZ,2),
94 . b1122(*),b1221(*),b2212(*),b1121(*),
95 . b1122h(*),b1221h(*),b2212h(*),b1121h(*),
96 . vzl(*),volg(*),offg(*)
97 double precision
98 . sav(nel,15)
99C-----------------------------------------------
100C L o c a l V a r i a b l e s
101C-----------------------------------------------
102 INTEGER :: I, J,ICOR,NNEGA,INDEX(MVSIZ)
103C 12
104 my_real
105 . DETT(MVSIZ), JAC1(MVSIZ), JAC2(MVSIZ), JAC3(MVSIZ),
106 . JAC4(MVSIZ), JAC5(MVSIZ), JAC6(MVSIZ),
107 . JAC7(MVSIZ), JAC8(MVSIZ), JAC9(MVSIZ),
108 . JACI1, JACI2, JACI3,
109 . JACI4, JACI5, JACI6,
110 . JACI7, JACI8, JACI9,
111 . X21(MVSIZ) , X31(MVSIZ) , X54(MVSIZ) , X64(MVSIZ),
112 . Y21(MVSIZ) , Y31(MVSIZ) , Y54(MVSIZ) , Y64(MVSIZ),
113 . Z21(MVSIZ) , Z31(MVSIZ) , Z54(MVSIZ) , Z64(MVSIZ),
114 . X41(MVSIZ) , Y41(MVSIZ) , Z41(MVSIZ) ,
115 . jac_59_68(mvsiz), jac_67_49(mvsiz), jac_48_57(mvsiz),
116 . jaci12, jaci45, jaci78,
117 . fac
118C-----------------------------------------------
119 nnega=0
120C
121 DO i=1,nel
122 x21(i)=x2(i)-x1(i)
123 x31(i)=x3(i)-x1(i)
124 x41(i)=x4(i)-x1(i)
125 x54(i)=x5(i)-x4(i)
126 x64(i)=x6(i)-x4(i)
127 y21(i)=y2(i)-y1(i)
128 y31(i)=y3(i)-y1(i)
129 y41(i)=y4(i)-y1(i)
130 y54(i)=y5(i)-y4(i)
131 y64(i)=y6(i)-y4(i)
132 z21(i)=z2(i)-z1(i)
133 z31(i)=z3(i)-z1(i)
134 z41(i)=z4(i)-z1(i)
135 z54(i)=z5(i)-z4(i)
136 z64(i)=z6(i)-z4(i)
137 END DO
138C
139C Jacobian matrix
140 DO i=1,nel
141C -------ri.xi---->ksi--------
142 jac1(i)=x21(i)+x54(i)
143 jac2(i)=y21(i)+y54(i)
144 jac3(i)=z21(i)+z54(i)
145 END DO
146 DO i=1,nel
147C -------si.xi--->eta--------
148 jac4(i)=x31(i)+x64(i)
149 jac5(i)=y31(i)+y64(i)
150 jac6(i)=z31(i)+z64(i)
151C -------ti.xi----zeta-------
152 jac7(i)=third*(x41(i)+x5(i)-x2(i)+x6(i)-x3(i))
153 jac8(i)=third*(y41(i)+y5(i)-y2(i)+y6(i)-y3(i))
154 jac9(i)=third*(z41(i)+z5(i)-z2(i)+z6(i)-z3(i))
155 END DO
156C
157 DO i=1,nel
158 jacob4(i)=jac4(i)
159 jacob5(i)=jac5(i)
160 jacob6(i)=jac6(i)
161 jacob7(i)=jac7(i)
162 jacob8(i)=jac8(i)
163 jacob9(i)=jac9(i)
164 ENDDO
165C
166 DO i=1,nel
167 jac_59_68(i)=jac5(i)*jac9(i)-jac6(i)*jac8(i)
168 jac_67_49(i)=jac6(i)*jac7(i)-jac4(i)*jac9(i)
169 jac_48_57(i)=jac4(i)*jac8(i)-jac5(i)*jac7(i)
170 END DO
171C
172 DO i=1,nel
173 det(i)=one_over_8*(jac1(i)*jac_59_68(i)+jac2(i)*jac_67_49(i)+jac3(i)*jac_48_57(i))
174 END DO
175C
176 IF(idtmin(1)==1)THEN
177 icor = 0
178 DO i=1,nel
179 IF(off(i) ==zero)THEN
180 det(i)=one
181 ELSEIF((det(i)<=volmin).OR.(det(i)<=zero))THEN
182 icor = 1
183 ENDIF
184 ENDDO
185 IF (icor>0) THEN
186 DO i=1,nel
187 IF(off(i)/=zero)THEN
188 IF(det(i)<=volmin)THEN
189 det(i)=one
190 off(i)=zero
191#include "lockon.inc"
192 WRITE(istdo,2000) ngl(i)
193 WRITE(iout ,2000) ngl(i)
194#include "lockoff.inc"
195 ELSEIF(det(i)<=zero)THEN
196 CALL ancmsg(msgid=166,anmode=aninfo,
197 . i1=ngl(i))
198 mstop = 1
199 ENDIF
200 ENDIF
201 ENDDO
202 ENDIF
203 ELSEIF(idtmin(1)==2)THEN
204 icor = 0
205 DO i=1,nel
206 IF(off(i) ==zero)THEN
207 det(i)=one
208 ELSEIF((det(i)<=volmin).OR.(det(i)<=zero))THEN
209 icor=1
210 ENDIF
211 ENDDO
212 IF (icor>0) THEN
213 DO i=1,nel
214 IF((off(i)/=zero).AND.
215 . (det(i)<=volmin.OR.det(i)<=zero))THEN
216 det(i)=one
217 off(i)=zero
218#include "lockon.inc"
219 WRITE(istdo,2000) ngl(i)
220 WRITE(iout ,2000) ngl(i)
221#include "lockoff.inc"
222 idel7nok = 1
223 ENDIF
224 ENDDO
225 ENDIF
226 ELSEIF (ismstr /=4 ) THEN
227 icor = 0
228 DO i=1,nel
229 IF(off(i) ==zero)THEN
230 det(i)=one
231 ELSEIF((det(i)<=volmin).OR.(det(i)<=zero))THEN
232 icor = 1
233 ENDIF
234 ENDDO
235 IF (icor>0) THEN
236 DO i=1,nel
237 IF(off(i) == zero)THEN
238 det(i)=one
239 ELSEIF(offg(i) > one)THEN
240
241 ELSEIF((det(i)<=volmin).OR.(det(i)<=zero))THEN
242 nnega=nnega+1
243 index(nnega)=i
244#include "lockon.inc"
245 WRITE(istdo,3000) ngl(i)
246 WRITE(iout ,3000) ngl(i)
247#include "lockoff.inc"
248 ENDIF
249 ENDDO
250 IF (ineg_v==0) THEN
251 CALL ancmsg(msgid=280,anmode=aninfo)
252 mstop = 1
253 ENDIF
254 END IF !(ICOR>0) THEN
255 ELSE
256C
257 icor = 0
258 DO i=1,nel
259 IF(off(i) ==zero)THEN
260 det(i)=one
261 ELSEIF(det(i)<=zero)THEN
262 icor=1
263 ENDIF
264 ENDDO
265 IF (icor>0) THEN
266 DO i=1,nel
267 IF(off(i)/=zero)THEN
268 IF(det(i)<=zero)THEN
269 CALL ancmsg(msgid=166,anmode=aninfo,
270 . i1=ngl(i))
271 mstop = 1
272 ENDIF
273 ENDIF
274 ENDDO
275 ENDIF
276 ENDIF
277C
278C Projection is not changed---
279 IF (nnega>0) THEN
280#include "vectorize.inc"
281 DO j=1,nnega
282 i = index(j)
283 x1(i)=sav(i,1)
284 y1(i)=sav(i,2)
285 z1(i)=sav(i,3)
286 x2(i)=sav(i,4)
287 y2(i)=sav(i,5)
288 z2(i)=sav(i,6)
289 x3(i)=sav(i,7)
290 y3(i)=sav(i,8)
291 z3(i)=sav(i,9)
292 x4(i)=sav(i,10)
293 y4(i)=sav(i,11)
294 z4(i)=sav(i,12)
295 x5(i)=sav(i,13)
296 y5(i)=sav(i,14)
297 z5(i)=sav(i,15)
298 x6(i)=zero
299 y6(i)=zero
300 z6(i)=zero
301C
302 x21(i)=x2(i)-x1(i)
303 x31(i)=x3(i)-x1(i)
304 x41(i)=x4(i)-x1(i)
305 x54(i)=x5(i)-x4(i)
306 x64(i)=x6(i)-x4(i)
307 y21(i)=y2(i)-y1(i)
308 y31(i)=y3(i)-y1(i)
309 y41(i)=y4(i)-y1(i)
310 y54(i)=y5(i)-y4(i)
311 y64(i)=y6(i)-y4(i)
312 z21(i)=z2(i)-z1(i)
313 z31(i)=z3(i)-z1(i)
314 z41(i)=z4(i)-z1(i)
315 z54(i)=z5(i)-z4(i)
316 z64(i)=z6(i)-z4(i)
317C
318 jac1(i)=x21(i)+x54(i)
319 jac2(i)=y21(i)+y54(i)
320 jac3(i)=z21(i)+z54(i)
321C----
322 jac4(i)=x31(i)+x64(i)
323 jac5(i)=y31(i)+y64(i)
324 jac6(i)=z31(i)+z64(i)
325 jac7(i)=third*(x41(i)+x5(i)-x2(i)+x6(i)-x3(i))
326 jac8(i)=third*(y41(i)+y5(i)-y2(i)+y6(i)-y3(i))
327 jac9(i)=third*(z41(i)+z5(i)-z2(i)+z6(i)-z3(i))
328C
329 jacob4(i)=jac4(i)
330 jacob5(i)=jac5(i)
331 jacob6(i)=jac6(i)
332 jacob7(i)=jac7(i)
333 jacob8(i)=jac8(i)
334 jacob9(i)=jac9(i)
335C
336 jac_59_68(i)=jac5(i)*jac9(i)-jac6(i)*jac8(i)
337 jac_67_49(i)=jac6(i)*jac7(i)-jac4(i)*jac9(i)
338 jac_48_57(i)=jac4(i)*jac8(i)-jac5(i)*jac7(i)
339C
340 det(i)=one_over_8*(jac1(i)*jac_59_68(i)+jac2(i)*jac_67_49(i)+jac3(i)*jac_48_57(i))
341 offg(i) = two
342 ENDDO
343 END IF
344C
345C Jacobian matrix inverse
346 DO i=1,nel
347 dett(i)=one_over_8/det(i)
348C
349 jaci1=dett(i)*jac_59_68(i)
350 jaci4=dett(i)*jac_67_49(i)
351 jaci7=dett(i)*jac_48_57(i)
352 jaci2=dett(i)*(-jac2(i)*jac9(i)+jac3(i)*jac8(i))
353 jaci5=dett(i)*( jac1(i)*jac9(i)-jac3(i)*jac7(i))
354 jaci8=dett(i)*(-jac1(i)*jac8(i)+jac2(i)*jac7(i))
355 jaci3=dett(i)*( jac2(i)*jac6(i)-jac3(i)*jac5(i))
356 jaci6=dett(i)*(-jac1(i)*jac6(i)+jac3(i)*jac4(i))
357 jaci9=dett(i)*( jac1(i)*jac5(i)-jac2(i)*jac4(i))
358C
359 jaci12=jaci1+jaci2
360 jaci45=jaci4+jaci5
361 jaci78=jaci7+jaci8
362C
363C Symmetry (a b c a b c)->P1-P3, anti-symmetry(-1 -1 -1 1 1 1)->P4
364 px1(i)=-jaci12
365 py1(i)=-jaci45
366 pz1(i)=-jaci78
367 px2(i)=jaci1
368 py2(i)=jaci4
369 pz2(i)=jaci7
370 px3(i)=jaci2
371 py3(i)=jaci5
372 pz3(i)=jaci8
373 px4(i)=third*jaci3
374 py4(i)=third*jaci6
375 pz4(i)=third*jaci9
376 jaci33(i) = jaci9*one_over_12
377 ENDDO
378C
379C For shear traitement----------
380 DO i=1,nel
381 fac = dett(i)*one_over_12
382 b1x(i,1)=-fac*jac1(i)*jac2(i)
383 b1x(i,2)=-fac*jac4(i)*jac5(i)
384 b1y(i,1)=-fac*jac2(i)*jac2(i)
385 b1y(i,2)=-fac*jac5(i)*jac5(i)
386 b2x(i,1)=-fac*jac1(i)*jac1(i)
387 b2x(i,2)=-fac*jac4(i)*jac4(i)
388 b2y(i,1)=b1x(i,1)
389 b2y(i,2)=b1x(i,2)
390 fac = fac*2.0
391 b1122(i)=fac*jac1(i)*jac5(i)
392 b1221(i)=fac*jac2(i)*jac4(i)
393 b2212(i)=fac*jac5(i)*jac2(i)
394 b1121(i)=b2212(i)
395C
396 b1xh(i,1)=-fac*(x54(i)*y54(i)-x21(i)*y21(i))
397 b1xh(i,2)=-fac*(x64(i)*y64(i)-x31(i)*y31(i))
398 b1yh(i,1)=-fac*(y54(i)*y54(i)-y21(i)*y21(i))
399 b1yh(i,2)=-fac*(y64(i)*y64(i)-y31(i)*y31(i))
400 b2xh(i,1)=-fac*(x54(i)*x54(i)-x21(i)*x21(i))
401 b2xh(i,2)=-fac*(x64(i)*x64(i)-x31(i)*x31(i))
402 b2yh(i,1)=b1xh(i,1)
403 b2yh(i,2)=b1xh(i,2)
404 fac = fac*two
405 b1122h(i)=fac*(x54(i)*y64(i)-x21(i)*y31(i))
406 b1221h(i)=fac*(x64(i)*y54(i)-x31(i)*y21(i))
407 b2212h(i)=fac*(y54(i)*y64(i)-y21(i)*y31(i))
408 b1121h(i)=b2212h(i)
409 ENDDO
410C Non constant part
411 DO i=1,nel
412 jac1(i)=-x21(i)+x54(i)
413 jac2(i)=-y21(i)+y54(i)
414 jac3(i)=-z21(i)+z54(i)
415 jac4(i)=-x31(i)+x64(i)
416 jac5(i)=-y31(i)+y64(i)
417 jac6(i)=-z31(i)+z64(i)
418 ENDDO
419C
420 DO i=1,nel
421 jac_59_68(i)=jac5(i)*jac9(i)-jac6(i)*jac8(i)
422 jac_67_49(i)=jac6(i)*jac7(i)-jac4(i)*jac9(i)
423 jac_48_57(i)=jac4(i)*jac8(i)-jac5(i)*jac7(i)
424 ENDDO
425C
426 DO i=1,nel
427 jaci1=dett(i)*jac_59_68(i)
428 jaci4=dett(i)*jac_67_49(i)
429 jaci7=dett(i)*jac_48_57(i)
430 jaci2=dett(i)*(-jac2(i)*jac9(i)+jac3(i)*jac8(i))
431 jaci5=dett(i)*( jac1(i)*jac9(i)-jac3(i)*jac7(i))
432 jaci8=dett(i)*(-jac1(i)*jac8(i)+jac2(i)*jac7(i))
433C
434 jaci12=jaci1+jaci2
435 jaci45=jaci4+jaci5
436 jaci78=jaci7+jaci8
437C
438C Symmetry(a b c a b c)->P1-P3
439 px1h(i)=-jaci12
440 py1h(i)=-jaci45
441 pz1h(i)=-jaci78
442 px2h(i)=jaci1
443 py2h(i)=jaci4
444 pz2h(i)=jaci7
445 px3h(i)=jaci2
446 py3h(i)=jaci5
447 pz3h(i)=jaci8
448 ENDDO
449C 12
450 DO i=1,nel
451 vzl(i) = fourth*(jacob9(i)*(
452 . x54(i)*y64(i)-x21(i)*y31(i)-x64(i)*y54(i)+x31(i)*y21(i))
453 . -jacob8(i)*(
454 . x54(i)*z64(i)+x31(i)*z21(i)-x21(i)*z31(i)-x64(i)*z54(i))
455 . +jacob7(i)*(
456 . y54(i)*z64(i)+y31(i)*z21(i)-y21(i)*z31(i)-y64(i)*z54(i))
457 . )
458 volg(i)= det(i)
459 ENDDO
460 RETURN
461C
462 1000 FORMAT(/' ZERO OR NEGATIVE VOLUME : 3D-ELEMENT NB',i10/)
463 2000 FORMAT(/' ZERO OR NEGATIVE VOLUME : DELETE 3D-ELEMENT NB',i10/)
464 3000 FORMAT(/' ZERO OR NEGATIVE VOLUME : 3D-ELEMENT NB:',i10/,
465 + ' SOLID-SHELL ELEMENT IS SWITCHED TO SMALL STRAIN OPTION'/)
466 END
subroutine s6cderi3(off, det, ngl, x1, x2, x3, x4, x5, x6, y1, y2, y3, y4, y5, y6, z1, z2, z3, z4, z5, z6, px1, px2, px3, px4, py1, py2, py3, py4, pz1, pz2, pz3, pz4, px1h, px2h, px3h, py1h, py2h, py3h, pz1h, pz2h, pz3h, jacob5, jacob6, jacob4, jacob8, jacob9, jacob7, jaci33, b1x, b1y, b2y, b2x, b1122, b1221, b2212, b1121, b1xh, b1yh, b2xh, b2yh, b1122h, b1221h, b2212h, b1121h, vzl, volg, sav, offg, nel, ismstr)
Definition s6cderi3.F:52
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)
Definition message.F:889