OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
s8ederic3.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!|| s8ederic3 ../engine/source/elements/solid/solide8e/s8ederic3.F
25!||--- called by ------------------------------------------------------
26!|| s8eforc3 ../engine/source/elements/solid/solide8e/s8eforc3.F
27!|| s8sforc3 ../engine/source/elements/solid/solide8s/s8sforc3.F
28!||--- calls -----------------------------------------------------
29!|| ancmsg ../engine/source/output/message/message.F
30!|| arret ../engine/source/system/arret.F
31!|| schkjabt3 ../engine/source/elements/solid/solide4/schkjabt3.F
32!||--- uses -----------------------------------------------------
33!|| message_mod ../engine/share/message_module/message_mod.F
34!||====================================================================
35 SUBROUTINE s8ederic3(
36 1 OFF, DET, NGL, X1,
37 2 X2, X3, X4, X5,
38 3 X6, X7, X8, Y1,
39 4 Y2, Y3, Y4, Y5,
40 5 Y6, Y7, Y8, Z1,
41 6 Z2, Z3, Z4, Z5,
42 7 Z6, Z7, Z8, PX1,
43 8 PX2, PX3, PX4, PY1,
44 9 PY2, PY3, PY4, PZ1,
45 A PZ2, PZ3, PZ4, PX1H1,
46 B PX1H2, PX1H3, PX1H4, PX2H1,
47 C PX2H2, PX2H3, PX2H4, PX3H1,
48 D PX3H2, PX3H3, PX3H4, PX4H1,
49 E PX4H2, PX4H3, PX4H4, HX,
50 F HY, HZ, JR_1, JS_1,
51 G JT_1, AJ1, AJ2, AJ3,
52 H AJ4, AJ5, AJ6, AJ7,
53 I AJ8, AJ9, SMAX, SAV,
54 J OFFG, NEL, ISMSTR, JLAG)
55C-----------------------------------------------
56C M o d u l e s
57C-----------------------------------------------
58 USE message_mod
59C-----------------------------------------------
60C I m p l i c i t T y p e s
61C-----------------------------------------------
62#include "implicit_f.inc"
63#include "comlock.inc"
64C-----------------------------------------------
65C G l o b a l P a r a m e t e r s
66C-----------------------------------------------
67#include "mvsiz_p.inc"
68C-----------------------------------------------
69C C o m m o n B l o c k s
70C-----------------------------------------------
71C-----------------------------------------------
72C D u m m y A r g u m e n t s
73C-----------------------------------------------
74 INTEGER, INTENT(IN) :: JLAG
75 INTEGER, INTENT(IN) :: ISMSTR
76 INTEGER NEL
77 DOUBLE PRECISION X1(*), X2(*), X3(*), X4(*), X5(*), X6(*), X7(*), X8(*),
78 . Y1(*), Y2(*), Y3(*), Y4(*), Y5(*), Y6(*), Y7(*), Y8(*),
79 . Z1(*), Z2(*), Z3(*), Z4(*), Z5(*), Z6(*), Z7(*), Z8(*),
80 . SAV(NEL,21)
81
82 my_real OFF(*),DET(*),
83 . PX1(*), PX2(*), PX3(*), PX4(*),
84 . PY1(*), PY2(*), PY3(*), PY4(*),
85 . PZ1(*), PZ2(*), PZ3(*), PZ4(*),
86 . PX1H1(*), PX1H2(*), PX1H3(*),PX1H4(*),
87 . PX2H1(*), PX2H2(*), PX2H3(*),PX2H4(*),
88 . PX3H1(*), PX3H2(*), PX3H3(*),PX3H4(*),
89 . PX4H1(*), PX4H2(*), PX4H3(*),PX4H4(*),
90 . HX(MVSIZ,4), HY(MVSIZ,4), HZ(MVSIZ,4),
91 . JR_1(*),JS_1(*),JT_1(*),
92 . AJ1(*),AJ2(*),AJ3(*),
93 . aj4(*),aj5(*),aj6(*),
94 . aj7(*),aj8(*),aj9(*),smax(*),offg(*)
95C-----------------------------------------------
96C L o c a l V a r i a b l e s
97C-----------------------------------------------
98 INTEGER NGL(*), I, J ,ICOR,NNEGA,INDEX(MVSIZ)
99 my_real DETT(MVSIZ) ,
100 . AJI1(MVSIZ), AJI2(MVSIZ), AJI3(MVSIZ),
101 . aji4(mvsiz), aji5(mvsiz), aji6(mvsiz),
102 . aji7(mvsiz), aji8(mvsiz), aji9(mvsiz),
103 . x17(mvsiz) , x28(mvsiz) , x35(mvsiz) , x46(mvsiz),
104 . y17(mvsiz) , y28(mvsiz) , y35(mvsiz) , y46(mvsiz),
105 . z17(mvsiz) , z28(mvsiz) , z35(mvsiz) , z46(mvsiz),
106 . jac_59_68(mvsiz), jac_67_49(mvsiz), jac_48_57(mvsiz),
107 . jac_38_29(mvsiz), jac_19_37(mvsiz), jac_27_18(mvsiz),
108 . jac_26_35(mvsiz), jac_34_16(mvsiz), jac_15_24(mvsiz),
109 . aj12(mvsiz), aj45(mvsiz), aj78(mvsiz),
110 . a17(mvsiz) , a28(mvsiz) ,
111 . b17(mvsiz) , b28(mvsiz) ,
112 . c17(mvsiz) , c28(mvsiz)
113C-----------------------------------------------
114 DO i=1,nel
115 x17(i)=x7(i)-x1(i)
116 x28(i)=x8(i)-x2(i)
117 x35(i)=x5(i)-x3(i)
118 x46(i)=x6(i)-x4(i)
119 y17(i)=y7(i)-y1(i)
120 y28(i)=y8(i)-y2(i)
121 y35(i)=y5(i)-y3(i)
122 y46(i)=y6(i)-y4(i)
123 z17(i)=z7(i)-z1(i)
124 z28(i)=z8(i)-z2(i)
125 z35(i)=z5(i)-z3(i)
126 z46(i)=z6(i)-z4(i)
127 ENDDO
128C
129 DO i=1,nel
130 aj4(i)=x17(i)+x28(i)-x35(i)-x46(i)
131 aj5(i)=y17(i)+y28(i)-y35(i)-y46(i)
132 aj6(i)=z17(i)+z28(i)-z35(i)-z46(i)
133 a17(i)=x17(i)+x46(i)
134 a28(i)=x28(i)+x35(i)
135 b17(i)=y17(i)+y46(i)
136 b28(i)=y28(i)+y35(i)
137 c17(i)=z17(i)+z46(i)
138 c28(i)=z28(i)+z35(i)
139 ENDDO
140
141 DO i=1,nel
142 aj7(i)=a17(i)+a28(i)
143 aj8(i)=b17(i)+b28(i)
144 aj9(i)=c17(i)+c28(i)
145 aj1(i)=a17(i)-a28(i)
146 aj2(i)=b17(i)-b28(i)
147 aj3(i)=c17(i)-c28(i)
148 ENDDO
149C
150C JACOBIAN
151C
152 DO i=1,nel
153 jac_59_68(i)=aj5(i)*aj9(i)-aj6(i)*aj8(i)
154 jac_67_49(i)=aj6(i)*aj7(i)-aj4(i)*aj9(i)
155 jac_48_57(i)=aj4(i)*aj8(i)-aj5(i)*aj7(i)
156 ENDDO
157C
158 DO i=1,nel
159 det(i)=one_over_64*(aj1(i)*jac_59_68(i)+aj2(i)*jac_67_49(i)+aj3(i)*jac_48_57(i))
160 ENDDO
161C
162 CALL schkjabt3(
163 1 off, det, ngl, offg,
164 2 nnega, index, nel, ismstr,
165 3 jlag)
166 IF (nnega>0) THEN
167 IF (ismstr==10.OR.ismstr==12) THEN
168#include "vectorize.inc"
169 DO j=1,nnega
170 i = index(j)
171 x1(i)=sav(i,1)
172 y1(i)=sav(i,8)
173 z1(i)=sav(i,15)
174 x2(i)=sav(i,2)
175 y2(i)=sav(i,9)
176 z2(i)=sav(i,16)
177 x3(i)=sav(i,3)
178 y3(i)=sav(i,10)
179 z3(i)=sav(i,17)
180 x4(i)=sav(i,4)
181 y4(i)=sav(i,11)
182 z4(i)=sav(i,18)
183 x5(i)=sav(i,5)
184 y5(i)=sav(i,12)
185 z5(i)=sav(i,19)
186 x6(i)=sav(i,6)
187 y6(i)=sav(i,13)
188 z6(i)=sav(i,20)
189 x7(i)=sav(i,7)
190 y7(i)=sav(i,14)
191 z7(i)=sav(i,21)
192 x8(i)=zero
193 y8(i)=zero
194 z8(i)=zero
195 ENDDO
196 ELSE
197#include "vectorize.inc"
198 DO j=1,nnega
199 i = index(j)
200 x1(i)=sav(i,1)
201 y1(i)=sav(i,2)
202 z1(i)=sav(i,3)
203 x2(i)=sav(i,4)
204 y2(i)=sav(i,5)
205 z2(i)=sav(i,6)
206 x3(i)=sav(i,7)
207 y3(i)=sav(i,8)
208 z3(i)=sav(i,9)
209 x4(i)=sav(i,10)
210 y4(i)=sav(i,11)
211 z4(i)=sav(i,12)
212 x5(i)=sav(i,13)
213 y5(i)=sav(i,14)
214 z5(i)=sav(i,15)
215 x6(i)=sav(i,16)
216 y6(i)=sav(i,17)
217 z6(i)=sav(i,18)
218 x7(i)=sav(i,19)
219 y7(i)=sav(i,20)
220 z7(i)=sav(i,21)
221 x8(i)=zero
222 y8(i)=zero
223 z8(i)=zero
224 ENDDO
225 END IF
226#include "vectorize.inc"
227 DO j=1,nnega
228 i = index(j)
229C
230 x17(i)=x7(i)-x1(i)
231 x28(i)=x8(i)-x2(i)
232 x35(i)=x5(i)-x3(i)
233 x46(i)=x6(i)-x4(i)
234 y17(i)=y7(i)-y1(i)
235 y28(i)=y8(i)-y2(i)
236 y35(i)=y5(i)-y3(i)
237 y46(i)=y6(i)-y4(i)
238 z17(i)=z7(i)-z1(i)
239 z28(i)=z8(i)-z2(i)
240 z35(i)=z5(i)-z3(i)
241 z46(i)=z6(i)-z4(i)
242C
243 aj4(i)=x17(i)+x28(i)-x35(i)-x46(i)
244 aj5(i)=y17(i)+y28(i)-y35(i)-y46(i)
245 aj6(i)=z17(i)+z28(i)-z35(i)-z46(i)
246 a17(i)=x17(i)+x46(i)
247 a28(i)=x28(i)+x35(i)
248 b17(i)=y17(i)+y46(i)
249 b28(i)=y28(i)+y35(i)
250 c17(i)=z17(i)+z46(i)
251 c28(i)=z28(i)+z35(i)
252 aj7(i)=a17(i)+a28(i)
253 aj8(i)=b17(i)+b28(i)
254 aj9(i)=c17(i)+c28(i)
255 aj1(i)=a17(i)-a28(i)
256 aj2(i)=b17(i)-b28(i)
257 aj3(i)=c17(i)-c28(i)
258C
259 jac_59_68(i)=aj5(i)*aj9(i)-aj6(i)*aj8(i)
260 jac_67_49(i)=aj6(i)*aj7(i)-aj4(i)*aj9(i)
261 jac_48_57(i)=aj4(i)*aj8(i)-aj5(i)*aj7(i)
262C
263 det(i)=one_over_64*(aj1(i)*jac_59_68(i)+aj2(i)*jac_67_49(i)+aj3(i)*jac_48_57(i))
264 offg(i) = two
265 ENDDO
266 END IF
267C
268 DO i=1,nel
269 jac_38_29(i)=(-aj2(i)*aj9(i)+aj3(i)*aj8(i))
270 jac_19_37(i)=( aj1(i)*aj9(i)-aj3(i)*aj7(i))
271 jac_27_18(i)=(-aj1(i)*aj8(i)+aj2(i)*aj7(i))
272 jac_26_35(i)=( aj2(i)*aj6(i)-aj3(i)*aj5(i))
273 jac_34_16(i)=(-aj1(i)*aj6(i)+aj3(i)*aj4(i))
274 jac_15_24(i)=( aj1(i)*aj5(i)-aj2(i)*aj4(i))
275 END DO
276C
277 DO i=1,nel
278 dett(i)=one_over_64/det(i)
279 ENDDO
280C
281C INVERSE DE LA MATRICE JACOBIENNE
282C
283 DO i=1,nel
284 aji1(i)=dett(i)*jac_59_68(i)
285 aji4(i)=dett(i)*jac_67_49(i)
286 aji7(i)=dett(i)*jac_48_57(i)
287 aji2(i)=dett(i)*jac_38_29(i)
288 aji5(i)=dett(i)*jac_19_37(i)
289 aji8(i)=dett(i)*jac_27_18(i)
290 aji3(i)=dett(i)*jac_26_35(i)
291 aji6(i)=dett(i)*jac_34_16(i)
292 aji9(i)=dett(i)*jac_15_24(i)
293 ENDDO
294C
295 DO i=1,nel
296 aj12(i)=aji1(i)-aji2(i)
297 aj45(i)=aji4(i)-aji5(i)
298 aj78(i)=aji7(i)-aji8(i)
299 ENDDO
300 DO i=1,nel
301 px2(i)= aj12(i)-aji3(i)
302 py2(i)= aj45(i)-aji6(i)
303 pz2(i)= aj78(i)-aji9(i)
304 px4(i)=-aj12(i)-aji3(i)
305 py4(i)=-aj45(i)-aji6(i)
306 pz4(i)=-aj78(i)-aji9(i)
307 ENDDO
308 DO i=1,nel
309 aj12(i)=aji1(i)+aji2(i)
310 aj45(i)=aji4(i)+aji5(i)
311 aj78(i)=aji7(i)+aji8(i)
312 ENDDO
313 DO i=1,nel
314 px1(i)=-aj12(i)-aji3(i)
315 py1(i)=-aj45(i)-aji6(i)
316 pz1(i)=-aj78(i)-aji9(i)
317 px3(i)=aj12(i)-aji3(i)
318 py3(i)=aj45(i)-aji6(i)
319 pz3(i)=aj78(i)-aji9(i)
320 ENDDO
321C
322C---- for f_vis
323 jr_1(1:nel)=aji2(1:nel)
324 js_1(1:nel)=aji6(1:nel)
325 jt_1(1:nel)=aji7(1:nel)
326C
327C mode 1
328C 1 1 -1 -1 -1 -1 1 1
329 DO i=1,nel
330 hx(i,1)=(x1(i)+x2(i)-x3(i)-x4(i)-x5(i)-x6(i)+x7(i)+x8(i))
331 hy(i,1)=(y1(i)+y2(i)-y3(i)-y4(i)-y5(i)-y6(i)+y7(i)+y8(i))
332 hz(i,1)=(z1(i)+z2(i)-z3(i)-z4(i)-z5(i)-z6(i)+z7(i)+z8(i))
333 px1h1(i)=px1(i)*hx(i,1)+ py1(i)*hy(i,1)+pz1(i)*hz(i,1)
334 px2h1(i)=px2(i)*hx(i,1)+ py2(i)*hy(i,1)+pz2(i)*hz(i,1)
335 px3h1(i)=px3(i)*hx(i,1)+ py3(i)*hy(i,1)+pz3(i)*hz(i,1)
336 px4h1(i)=px4(i)*hx(i,1)+ py4(i)*hy(i,1)+pz4(i)*hz(i,1)
337 ENDDO
338C mode 2
339C 1 -1 -1 1 -1 1 1 -1
340 DO i=1,nel
341 hx(i,2)=(x1(i)-x2(i)-x3(i)+x4(i)-x5(i)+x6(i)+x7(i)-x8(i))
342 hy(i,2)=(y1(i)-y2(i)-y3(i)+y4(i)-y5(i)+y6(i)+y7(i)-y8(i))
343 hz(i,2)=(z1(i)-z2(i)-z3(i)+z4(i)-z5(i)+z6(i)+z7(i)-z8(i))
344 px1h2(i)=px1(i)*hx(i,2)+ py1(i)*hy(i,2)+pz1(i)*hz(i,2)
345 px2h2(i)=px2(i)*hx(i,2)+ py2(i)*hy(i,2)+pz2(i)*hz(i,2)
346 px3h2(i)=px3(i)*hx(i,2)+ py3(i)*hy(i,2)+pz3(i)*hz(i,2)
347 px4h2(i)=px4(i)*hx(i,2)+ py4(i)*hy(i,2)+pz4(i)*hz(i,2)
348 ENDDO
349C mode 3
350C 1 -1 1 -1 1 -1 1 -1
351 DO i=1,nel
352 hx(i,3)=(x1(i)-x2(i)+x3(i)-x4(i)+x5(i)-x6(i)+x7(i)-x8(i))
353 hy(i,3)=(y1(i)-y2(i)+y3(i)-y4(i)+y5(i)-y6(i)+y7(i)-y8(i))
354 hz(i,3)=(z1(i)-z2(i)+z3(i)-z4(i)+z5(i)-z6(i)+z7(i)-z8(i))
355 px1h3(i)=px1(i)*hx(i,3)+ py1(i)*hy(i,3)+pz1(i)*hz(i,3)
356 px2h3(i)=px2(i)*hx(i,3)+ py2(i)*hy(i,3)+pz2(i)*hz(i,3)
357 px3h3(i)=px3(i)*hx(i,3)+ py3(i)*hy(i,3)+pz3(i)*hz(i,3)
358 px4h3(i)=px4(i)*hx(i,3)+ py4(i)*hy(i,3)+pz4(i)*hz(i,3)
359 ENDDO
360C mode 4
361C -1 1 -1 1 1 -1 1 -1
362 DO i=1,nel
363 hx(i,4)=(-x1(i)+x2(i)-x3(i)+x4(i)+x5(i)-x6(i)+x7(i)-x8(i))
364 hy(i,4)=(-y1(i)+y2(i)-y3(i)+y4(i)+y5(i)-y6(i)+y7(i)-y8(i))
365 hz(i,4)=(-z1(i)+z2(i)-z3(i)+z4(i)+z5(i)-z6(i)+z7(i)-z8(i))
366 px1h4(i)=px1(i)*hx(i,4)+ py1(i)*hy(i,4)+pz1(i)*hz(i,4)
367 px2h4(i)=px2(i)*hx(i,4)+ py2(i)*hy(i,4)+pz2(i)*hz(i,4)
368 px3h4(i)=px3(i)*hx(i,4)+ py3(i)*hy(i,4)+pz3(i)*hz(i,4)
369 px4h4(i)=px4(i)*hx(i,4)+ py4(i)*hy(i,4)+pz4(i)*hz(i,4)
370 ENDDO
371C----surface max mediane-- *16
372 DO i=1,nel
373 smax(i)= jac_59_68(i)*jac_59_68(i)+jac_67_49(i)*jac_67_49(i)
374 . +jac_48_57(i)*jac_48_57(i)
375 smax(i)= max(smax(i),jac_38_29(i)*jac_38_29(i)+jac_19_37(i)*jac_19_37(i)
376 . +jac_27_18(i)*jac_27_18(i))
377 smax(i)= max(smax(i),jac_26_35(i)*jac_26_35(i)+jac_34_16(i)*jac_34_16(i)
378 . +jac_15_24(i)*jac_15_24(i))
379 ENDDO
380 DO i=1,nel
381 IF(smax(i)<=zero)THEN
382 CALL ancmsg(msgid=173,anmode=aninfo,i1=ngl(i))
383 CALL arret(2)
384 ENDIF
385 smax(i)= one/sqrt(smax(i))
386 ENDDO
387 RETURN
388C
389 1000 FORMAT(/' ZERO OR NEGATIVE VOLUME : 3D-ELEMENT NB',i10/)
390 2000 FORMAT(/' ZERO OR NEGATIVE VOLUME : DELETE 3D-ELEMENT NB',i10/)
391 END
#define max(a, b)
Definition macros.h:21
subroutine s8ederic3(off, det, ngl, x1, x2, x3, x4, x5, x6, x7, x8, y1, y2, y3, y4, y5, y6, y7, y8, z1, z2, z3, z4, z5, z6, z7, z8, px1, px2, px3, px4, py1, py2, py3, py4, pz1, pz2, pz3, pz4, px1h1, px1h2, px1h3, px1h4, px2h1, px2h2, px2h3, px2h4, px3h1, px3h2, px3h3, px3h4, px4h1, px4h2, px4h3, px4h4, hx, hy, hz, jr_1, js_1, jt_1, aj1, aj2, aj3, aj4, aj5, aj6, aj7, aj8, aj9, smax, sav, offg, nel, ismstr, jlag)
Definition s8ederic3.F:55
subroutine schkjabt3(off, det, ngl, offg, nnega, index, nel, ismstr, jlag)
Definition schkjabt3.F:40
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
subroutine arret(nn)
Definition arret.F:87