OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
s8zdericm3.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!|| s8zdericm3 ../engine/source/elements/solid/solide8z/s8zdericm3.F
25!||--- called by ------------------------------------------------------
26!|| s8zforc3 ../engine/source/elements/solid/solide8z/s8zforc3.F
27!||--- calls -----------------------------------------------------
28!|| ancmsg ../engine/source/output/message/message.F
29!||--- uses -----------------------------------------------------
30!|| message_mod ../engine/share/message_module/message_mod.f
31!||====================================================================
32 SUBROUTINE s8zdericm3(
33 1 DET, NGL, X1, X2,
34 2 X3, X4, X5, X6,
35 3 X7, X8, Y1, Y2,
36 4 Y3, Y4, Y5, Y6,
37 5 Y7, Y8, Z1, Z2,
38 6 Z3, Z4, Z5, Z6,
39 7 Z7, Z8, PX1, PX2,
40 8 PX3, PX4, PY1, PY2,
41 9 PY3, PY4, PZ1, PZ2,
42 A PZ3, PZ4, PX1H1, PX1H2,
43 B PX1H3, PX1H4, PX2H1, PX2H2,
44 C PX2H3, PX2H4, PX3H1, PX3H2,
45 D PX3H3, PX3H4, PX4H1, PX4H2,
46 E PX4H3, PX4H4, HX, HY,
47 F HZ, JAC1, JAC2, JAC3,
48 G JAC4, JAC5, JAC6, JAC7,
49 H JAC8, JAC9, SMAX, SAV,
50 I OFFG, NNEGA, INDEX, NEL,
51 J 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-----------------------------------------------
68C-----------------------------------------------
69C D u m m y A r g u m e n t s
70C-----------------------------------------------
71 INTEGER, INTENT(IN) :: ISMSTR
72 INTEGER NNEGA,INDEX(MVSIZ),NEL
73C REAL
74 double precision
75 . x1(*), x2(*), x3(*), x4(*), x5(*), x6(*), x7(*), x8(*),
76 . y1(*), y2(*), y3(*), y4(*), y5(*), y6(*), y7(*), y8(*),
77 . z1(*), z2(*), z3(*), z4(*), z5(*), z6(*), z7(*), z8(*),
78 . sav(nel,21)
79
81 . det(*),
82 . px1(*), px2(*), px3(*), px4(*),
83 . py1(*), py2(*), py3(*), py4(*),
84 . pz1(*), pz2(*), pz3(*), pz4(*),
85 . px1h1(*), px1h2(*), px1h3(*),px1h4(*),
86 . px2h1(*), px2h2(*), px2h3(*),px2h4(*),
87 . px3h1(*), px3h2(*), px3h3(*),px3h4(*),
88 . px4h1(*), px4h2(*), px4h3(*),px4h4(*),
89 . hx(mvsiz,4), hy(mvsiz,4), hz(mvsiz,4),
90 . jac1(*),jac2(*),jac3(*),
91 . jac4(*),jac5(*),jac6(*),
92 . jac7(*),jac8(*),jac9(*),smax(*),offg(*)
93C-----------------------------------------------
94C L o c a l V a r i a b l e s
95C-----------------------------------------------
96 INTEGER NGL(*), I, J ,ICOR
97C REAL
98C 12
100 . dett ,
101 . jaci1, jaci2, jaci3,
102 . jaci4, jaci5, jaci6,
103 . jaci7, jaci8, jaci9,
104 . x17 , x28 , x35 , x46,
105 . y17 , y28 , y35 , y46,
106 . z17 , z28 , z35 , z46,
107 . jac_59_68(mvsiz), jac_67_49(mvsiz), jac_48_57(mvsiz),
108 . jac_38_29(mvsiz), jac_19_37(mvsiz), jac_27_18(mvsiz),
109 . jac_26_35(mvsiz), jac_34_16(mvsiz), jac_15_24(mvsiz),
110 . jaci12, jaci45, jaci78,
111 . x_17_46 , x_28_35 ,
112 . y_17_46 , y_28_35 ,
113 . z_17_46 , z_28_35
114C-----------------------------------------------
115 IF (ismstr==10.OR.ismstr==12) THEN
116#include "vectorize.inc"
117 DO j=1,nnega
118 i = index(j)
119 x1(i)=sav(i,1)
120 y1(i)=sav(i,8)
121 z1(i)=sav(i,15)
122 x2(i)=sav(i,2)
123 y2(i)=sav(i,9)
124 z2(i)=sav(i,16)
125 x3(i)=sav(i,3)
126 y3(i)=sav(i,10)
127 z3(i)=sav(i,17)
128 x4(i)=sav(i,4)
129 y4(i)=sav(i,11)
130 z4(i)=sav(i,18)
131 x5(i)=sav(i,5)
132 y5(i)=sav(i,12)
133 z5(i)=sav(i,19)
134 x6(i)=sav(i,6)
135 y6(i)=sav(i,13)
136 z6(i)=sav(i,20)
137 x7(i)=sav(i,7)
138 y7(i)=sav(i,14)
139 z7(i)=sav(i,21)
140 x8(i)=zero
141 y8(i)=zero
142 z8(i)=zero
143 ENDDO
144 ELSE
145#include "vectorize.inc"
146 DO j=1,nnega
147 i = index(j)
148 x1(i)=sav(i,1)
149 y1(i)=sav(i,2)
150 z1(i)=sav(i,3)
151 x2(i)=sav(i,4)
152 y2(i)=sav(i,5)
153 z2(i)=sav(i,6)
154 x3(i)=sav(i,7)
155 y3(i)=sav(i,8)
156 z3(i)=sav(i,9)
157 x4(i)=sav(i,10)
158 y4(i)=sav(i,11)
159 z4(i)=sav(i,12)
160 x5(i)=sav(i,13)
161 y5(i)=sav(i,14)
162 z5(i)=sav(i,15)
163 x6(i)=sav(i,16)
164 y6(i)=sav(i,17)
165 z6(i)=sav(i,18)
166 x7(i)=sav(i,19)
167 y7(i)=sav(i,20)
168 z7(i)=sav(i,21)
169 x8(i)=zero
170 y8(i)=zero
171 z8(i)=zero
172 ENDDO
173 END IF
174 DO j=1,nnega
175 i = index(j)
176#include "lockon.inc"
177 IF(ismstr<10) THEN
178 CALL ancmsg(msgid=260,anmode=aninfo,
179 . i1=ngl(i))
180 ELSE
181 CALL ancmsg(msgid=262,anmode=aninfo,
182 . i1=ngl(i))
183 END IF
184#include "lockoff.inc"
185 ENDDO
186C
187#include "vectorize.inc"
188 DO j=1,nnega
189 i = index(j)
190 x17=x7(i)-x1(i)
191 x28=x8(i)-x2(i)
192 x35=x5(i)-x3(i)
193 x46=x6(i)-x4(i)
194 y17=y7(i)-y1(i)
195 y28=y8(i)-y2(i)
196 y35=y5(i)-y3(i)
197 y46=y6(i)-y4(i)
198 z17=z7(i)-z1(i)
199 z28=z8(i)-z2(i)
200 z35=z5(i)-z3(i)
201 z46=z6(i)-z4(i)
202C
203 jac4(i)=x17+x28-x35-x46
204 jac5(i)=y17+y28-y35-y46
205 jac6(i)=z17+z28-z35-z46
206 x_17_46=x17+x46
207 x_28_35=x28+x35
208 y_17_46=y17+y46
209 y_28_35=y28+y35
210 z_17_46=z17+z46
211 z_28_35=z28+z35
212 jac7(i)=x_17_46+x_28_35
213 jac8(i)=y_17_46+y_28_35
214 jac9(i)=z_17_46+z_28_35
215 jac1(i)=x_17_46-x_28_35
216 jac2(i)=y_17_46-y_28_35
217 jac3(i)=z_17_46-z_28_35
218C
219 jac_59_68(i)=jac5(i)*jac9(i)-jac6(i)*jac8(i)
220 jac_67_49(i)=jac6(i)*jac7(i)-jac4(i)*jac9(i)
221 jac_48_57(i)=jac4(i)*jac8(i)-jac5(i)*jac7(i)
222C
223 det(i)=one_over_64*(jac1(i)*jac_59_68(i)+jac2(i)*jac_67_49(i)+jac3(i)*jac_48_57(i))
224 ENDDO
225#include "vectorize.inc"
226 DO j=1,nnega
227 i = index(j)
228 jac_38_29(i)=(-jac2(i)*jac9(i)+jac3(i)*jac8(i))
229 jac_19_37(i)=( jac1(i)*jac9(i)-jac3(i)*jac7(i))
230 jac_27_18(i)=(-jac1(i)*jac8(i)+jac2(i)*jac7(i))
231 jac_26_35(i)=( jac2(i)*jac6(i)-jac3(i)*jac5(i))
232 jac_34_16(i)=(-jac1(i)*jac6(i)+jac3(i)*jac4(i))
233 jac_15_24(i)=( jac1(i)*jac5(i)-jac2(i)*jac4(i))
234 dett=one_over_64/det(i)
235 jaci1=dett*jac_59_68(i)
236 jaci4=dett*jac_67_49(i)
237 jaci7=dett*jac_48_57(i)
238 jaci2=dett*jac_38_29(i)
239 jaci5=dett*jac_19_37(i)
240 jaci8=dett*jac_27_18(i)
241 jaci3=dett*jac_26_35(i)
242 jaci6=dett*jac_34_16(i)
243 jaci9=dett*jac_15_24(i)
244 jaci12=jaci1-jaci2
245 jaci45=jaci4-jaci5
246 jaci78=jaci7-jaci8
247 px2(i)= jaci12-jaci3
248 py2(i)= jaci45-jaci6
249 pz2(i)= jaci78-jaci9
250 px4(i)=-jaci12-jaci3
251 py4(i)=-jaci45-jaci6
252 pz4(i)=-jaci78-jaci9
253 jaci12=jaci1+jaci2
254 jaci45=jaci4+jaci5
255 jaci78=jaci7+jaci8
256 px1(i)=-jaci12-jaci3
257 py1(i)=-jaci45-jaci6
258 pz1(i)=-jaci78-jaci9
259 px3(i)=jaci12-jaci3
260 py3(i)=jaci45-jaci6
261 pz3(i)=jaci78-jaci9
262 END DO
263C
264C mode 1-4
265C 1 1 -1 -1 -1 -1 1 1
266#include "vectorize.inc"
267 DO j=1,nnega
268 i = index(j)
269 hx(i,1)=(x1(i)+x2(i)-x3(i)-x4(i)-x5(i)-x6(i)+x7(i)+x8(i))
270 hy(i,1)=(y1(i)+y2(i)-y3(i)-y4(i)-y5(i)-y6(i)+y7(i)+y8(i))
271 hz(i,1)=(z1(i)+z2(i)-z3(i)-z4(i)-z5(i)-z6(i)+z7(i)+z8(i))
272 px1h1(i)=px1(i)*hx(i,1)+ py1(i)*hy(i,1)+pz1(i)*hz(i,1)
273 px2h1(i)=px2(i)*hx(i,1)+ py2(i)*hy(i,1)+pz2(i)*hz(i,1)
274 px3h1(i)=px3(i)*hx(i,1)+ py3(i)*hy(i,1)+pz3(i)*hz(i,1)
275 px4h1(i)=px4(i)*hx(i,1)+ py4(i)*hy(i,1)+pz4(i)*hz(i,1)
276C
277 hx(i,2)=(x1(i)-x2(i)-x3(i)+x4(i)-x5(i)+x6(i)+x7(i)-x8(i))
278 hy(i,2)=(y1(i)-y2(i)-y3(i)+y4(i)-y5(i)+y6(i)+y7(i)-y8(i))
279 hz(i,2)=(z1(i)-z2(i)-z3(i)+z4(i)-z5(i)+z6(i)+z7(i)-z8(i))
280 px1h2(i)=px1(i)*hx(i,2)+ py1(i)*hy(i,2)+pz1(i)*hz(i,2)
281 px2h2(i)=px2(i)*hx(i,2)+ py2(i)*hy(i,2)+pz2(i)*hz(i,2)
282 px3h2(i)=px3(i)*hx(i,2)+ py3(i)*hy(i,2)+pz3(i)*hz(i,2)
283 px4h2(i)=px4(i)*hx(i,2)+ py4(i)*hy(i,2)+pz4(i)*hz(i,2)
284C
285 hx(i,3)=(x1(i)-x2(i)+x3(i)-x4(i)+x5(i)-x6(i)+x7(i)-x8(i))
286 hy(i,3)=(y1(i)-y2(i)+y3(i)-y4(i)+y5(i)-y6(i)+y7(i)-y8(i))
287 hz(i,3)=(z1(i)-z2(i)+z3(i)-z4(i)+z5(i)-z6(i)+z7(i)-z8(i))
288 px1h3(i)=px1(i)*hx(i,3)+ py1(i)*hy(i,3)+pz1(i)*hz(i,3)
289 px2h3(i)=px2(i)*hx(i,3)+ py2(i)*hy(i,3)+pz2(i)*hz(i,3)
290 px3h3(i)=px3(i)*hx(i,3)+ py3(i)*hy(i,3)+pz3(i)*hz(i,3)
291 px4h3(i)=px4(i)*hx(i,3)+ py4(i)*hy(i,3)+pz4(i)*hz(i,3)
292C
293 hx(i,4)=(-x1(i)+x2(i)-x3(i)+x4(i)+x5(i)-x6(i)+x7(i)-x8(i))
294 hy(i,4)=(-y1(i)+y2(i)-y3(i)+y4(i)+y5(i)-y6(i)+y7(i)-y8(i))
295 hz(i,4)=(-z1(i)+z2(i)-z3(i)+z4(i)+z5(i)-z6(i)+z7(i)-z8(i))
296 px1h4(i)=px1(i)*hx(i,4)+ py1(i)*hy(i,4)+pz1(i)*hz(i,4)
297 px2h4(i)=px2(i)*hx(i,4)+ py2(i)*hy(i,4)+pz2(i)*hz(i,4)
298 px3h4(i)=px3(i)*hx(i,4)+ py3(i)*hy(i,4)+pz3(i)*hz(i,4)
299 px4h4(i)=px4(i)*hx(i,4)+ py4(i)*hy(i,4)+pz4(i)*hz(i,4)
300 smax(i)= jac_59_68(i)*jac_59_68(i)+jac_67_49(i)*jac_67_49(i)
301 . +jac_48_57(i)*jac_48_57(i)
302 smax(i)= max(smax(i),jac_38_29(i)*jac_38_29(i)+jac_19_37(i)*jac_19_37(i)
303 . +jac_27_18(i)*jac_27_18(i))
304 smax(i)= max(smax(i),jac_26_35(i)*jac_26_35(i)+jac_34_16(i)*jac_34_16(i)
305 . +jac_15_24(i)*jac_15_24(i))
306 ENDDO
307 RETURN
308C
309 3000 FORMAT(/' ZERO OR NEGATIVE SUB-VOLUME : 3D-ELEMENT NB:',i10/,
310 + ' ELEMENT IS SWITCHED TO SMALL STRAIN OPTION'/)
311 END
#define my_real
Definition cppsort.cpp:32
#define max(a, b)
Definition macros.h:21
subroutine s8zdericm3(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, jac1, jac2, jac3, jac4, jac5, jac6, jac7, jac8, jac9, smax, sav, offg, nnega, index, nel, ismstr)
Definition s8zdericm3.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