OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
s4deri3.F File Reference
#include "implicit_f.inc"
#include "comlock.inc"
#include "mvsiz_p.inc"
#include "param_c.inc"
#include "scr17_c.inc"
#include "vectorize.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine s4deri3 (off, det, ngl, deltax, mxt, x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4, px1, px2, px3, px4, py1, py2, py3, py4, pz1, pz2, pz3, pz4, rx, ry, rz, sx, sy, sz, tx, ty, tz, sav, offg, nel, pm, voldp, ismstr, iformdt, jlag)

Function/Subroutine Documentation

◆ s4deri3()

subroutine s4deri3 ( off,
det,
integer, dimension(*) ngl,
deltax,
integer, dimension(mvsiz) mxt,
double precision, dimension(*) x1,
double precision, dimension(*) x2,
double precision, dimension(*) x3,
double precision, dimension(*) x4,
double precision, dimension(*) y1,
double precision, dimension(*) y2,
double precision, dimension(*) y3,
double precision, dimension(*) y4,
double precision, dimension(*) z1,
double precision, dimension(*) z2,
double precision, dimension(*) z3,
double precision, dimension(*) z4,
px1,
px2,
px3,
px4,
py1,
py2,
py3,
py4,
pz1,
pz2,
pz3,
pz4,
rx,
ry,
rz,
sx,
sy,
sz,
tx,
ty,
tz,
double precision, dimension(nel,9) sav,
offg,
integer nel,
pm,
double precision, dimension(nel) voldp,
integer, intent(in) ismstr,
integer, intent(in) iformdt,
integer, intent(in) jlag )

Definition at line 30 of file s4deri3.F.

43C-----------------------------------------------
44C I m p l i c i t T y p e s
45C-----------------------------------------------
46#include "implicit_f.inc"
47#include "comlock.inc"
48C-----------------------------------------------
49C G l o b a l P a r a m e t e r s
50C-----------------------------------------------
51#include "mvsiz_p.inc"
52C-----------------------------------------------
53C C o m m o n B l o c k s
54C-----------------------------------------------
55#include "param_c.inc"
56#include "scr17_c.inc"
57C-----------------------------------------------
58C D u m m y A r g u m e n t s
59C-----------------------------------------------
60 INTEGER, INTENT(IN) :: JLAG
61 INTEGER, INTENT(IN) :: ISMSTR
62 INTEGER, INTENT(IN) :: IFORMDT
63 INTEGER NEL, MXT(MVSIZ)
64 double precision
65 . x1(*), x2(*), x3(*), x4(*),
66 . y1(*), y2(*), y3(*), y4(*),
67 . z1(*), z2(*), z3(*), z4(*), sav(nel,9),voldp(nel)
68
70 . off(*), det(*), deltax(*), pm(npropm,*),
71 . px1(*), px2(*), px3(*), px4(*),
72 . py1(*), py2(*), py3(*), py4(*),
73 . pz1(*), pz2(*), pz3(*), pz4(*),offg(*),
74 . rx(*), ry(*), rz(*), sx(*), sy(*), sz(*),tx(*), ty(*), tz(*)
75C-----------------------------------------------
76C L o c a l V a r i a b l e s
77C-----------------------------------------------
78 INTEGER NGL(*), I,J
79 INTEGER NNEGA,INDEX(MVSIZ)
80 double precision
81 . x41, y41, z41, x42, y42, z42, x43, y43, z43,b1dp,c1dp,d1dp
83 . a1, a2, a3, a4, d, areamx2,
84 . b1(mvsiz), b2(mvsiz), b3(mvsiz), b4(mvsiz),
85 . c1(mvsiz), c2(mvsiz), c3(mvsiz), c4(mvsiz),
86 . d1(mvsiz), d2(mvsiz), d3(mvsiz), d4(mvsiz),
87 . pxx, pyy, pzz, pxy, pyz, pxz, gfac, aa, bb, p, ld
88C-----------------------------------------------
89C
90 DO i=1,nel
91 x43 = x4(i) - x3(i)
92 y43 = y4(i) - y3(i)
93 z43 = z4(i) - z3(i)
94 x41 = x4(i) - x1(i)
95 y41 = y4(i) - y1(i)
96 z41 = z4(i) - z1(i)
97 x42 = x4(i) - x2(i)
98 y42 = y4(i) - y2(i)
99 z42 = z4(i) - z2(i)
100C
101 rx(i) = -x41
102 ry(i) = -y41
103 rz(i) = -z41
104 sx(i) = -x42
105 sy(i) = -y42
106 sz(i) = -z42
107C
108 tx(i) = -x43
109 ty(i) = -y43
110 tz(i) = -z43
111C
112 b1dp = y43*z42 - y42*z43
113 b1(i) = b1dp
114 b2(i) = y41*z43 - y43*z41
115 b3(i) = y42*z41 - y41*z42
116 b4(i) = -(b1(i) + b2(i) + b3(i))
117C
118 c1dp = z43*x42 - z42*x43
119 c1(i) = c1dp
120 c2(i) = z41*x43 - z43*x41
121 c3(i) = z42*x41 - z41*x42
122 c4(i) = -(c1(i) + c2(i) + c3(i))
123C
124 d1dp = x43*y42 - x42*y43
125 d1(i) = d1dp
126 d2(i) = x41*y43 - x43*y41
127 d3(i) = x42*y41 - x41*y42
128 d4(i) = -(d1(i) + d2(i) + d3(i))
129C
130 voldp(i) = (x41*b1dp + y41*c1dp + z41*d1dp)*one_over_6
131 det(i) = voldp(i)
132C
133 ENDDO
134C
135C
136 CALL schkjabt3(
137 1 off, det, ngl, offg,
138 2 nnega, index, nel, ismstr,
139 3 jlag)
140 IF (nnega>0) THEN
141 IF (ismstr==10.OR.ismstr==12) THEN
142#include "vectorize.inc"
143 DO j=1,nnega
144 i = index(j)
145 x1(i)=sav(i,1)
146 y1(i)=sav(i,4)
147 z1(i)=sav(i,7)
148 x2(i)=sav(i,2)
149 y2(i)=sav(i,5)
150 z2(i)=sav(i,8)
151 x3(i)=sav(i,3)
152 y3(i)=sav(i,6)
153 z3(i)=sav(i,9)
154 x4(i)=zero
155 y4(i)=zero
156 z4(i)=zero
157 ENDDO
158 ELSE
159#include "vectorize.inc"
160 DO j=1,nnega
161 i = index(j)
162 x1(i)=sav(i,1)
163 y1(i)=sav(i,2)
164 z1(i)=sav(i,3)
165 x2(i)=sav(i,4)
166 y2(i)=sav(i,5)
167 z2(i)=sav(i,6)
168 x3(i)=sav(i,7)
169 y3(i)=sav(i,8)
170 z3(i)=sav(i,9)
171 x4(i)=zero
172 y4(i)=zero
173 z4(i)=zero
174 ENDDO
175 END IF
176#include "vectorize.inc"
177 DO j=1,nnega
178 i = index(j)
179 x43 = x4(i) - x3(i)
180 y43 = y4(i) - y3(i)
181 z43 = z4(i) - z3(i)
182 x41 = x4(i) - x1(i)
183 y41 = y4(i) - y1(i)
184 z41 = z4(i) - z1(i)
185 x42 = x4(i) - x2(i)
186 y42 = y4(i) - y2(i)
187 z42 = z4(i) - z2(i)
188C
189 rx(i) = -x41
190 ry(i) = -y41
191 rz(i) = -z41
192 sx(i) = -x42
193 sy(i) = -y42
194 sz(i) = -z42
195 tx(i) = -x43
196 ty(i) = -y43
197 tz(i) = -z43
198C
199C
200 b1dp = y43*z42 - y42*z43
201 b1(i) = b1dp
202 b2(i) = y41*z43 - y43*z41
203 b3(i) = y42*z41 - y41*z42
204 b4(i) = -(b1(i) + b2(i) + b3(i))
205C
206 c1dp = z43*x42 - z42*x43
207 c1(i) = c1dp
208 c2(i) = z41*x43 - z43*x41
209 c3(i) = z42*x41 - z41*x42
210 c4(i) = -(c1(i) + c2(i) + c3(i))
211C
212 d1dp = x43*y42 - x42*y43
213 d1(i) = d1dp
214 d2(i) = x41*y43 - x43*y41
215 d3(i) = x42*y41 - x41*y42
216 d4(i) = -(d1(i) + d2(i) + d3(i))
217C
218 voldp(i) = (x41*b1dp + y41*c1dp + z41*d1dp)*one_over_6
219 det(i) = voldp(i)
220 offg(i) = two
221 ENDDO
222 END IF
223C
224 DO i=1,nel
225 d = one/det(i)/six
226 px1(i)=-b1(i)*d
227 py1(i)=-c1(i)*d
228 pz1(i)=-d1(i)*d
229 px2(i)=-b2(i)*d
230 py2(i)=-c2(i)*d
231 pz2(i)=-d2(i)*d
232 px3(i)=-b3(i)*d
233 py3(i)=-c3(i)*d
234 pz3(i)=-d3(i)*d
235 px4(i)=-b4(i)*d
236 py4(i)=-c4(i)*d
237 pz4(i)=-d4(i)*d
238 END DO
239
240 IF(idt1sol==0)THEN
241
242 DO i=1,nel
243 d = max(px1(i)*px1(i)+py1(i)*py1(i)+pz1(i)*pz1(i),
244 . px2(i)*px2(i)+py2(i)*py2(i)+pz2(i)*pz2(i),
245 . px3(i)*px3(i)+py3(i)*py3(i)+pz3(i)*pz3(i),
246 . px4(i)*px4(i)+py4(i)*py4(i)+pz4(i)*pz4(i))
247 deltax(i) = one / sqrt(d)
248 END DO
249
250 ELSEIF(iformdt==0)THEN
251 DO i=1,nel
252 d = px1(i)*px1(i)+py1(i)*py1(i)+pz1(i)*pz1(i)
253 . + px2(i)*px2(i)+py2(i)*py2(i)+pz2(i)*pz2(i)
254 . + px3(i)*px3(i)+py3(i)*py3(i)+pz3(i)*pz3(i)
255 . + px4(i)*px4(i)+py4(i)*py4(i)+pz4(i)*pz4(i)
256 deltax(i) = one / sqrt(d)
257 END DO
258
259 ELSEIF(iformdt==1)THEN
260
261 gfac=pm(105,mxt(1))
262 ld =two*sqrt(max(one-gfac,zero))+one
263 DO i=1,nel
264 pxx=px1(i)*px1(i)+px2(i)*px2(i)+px3(i)*px3(i)+px4(i)*px4(i)
265 pyy=py1(i)*py1(i)+py2(i)*py2(i)+py3(i)*py3(i)+py4(i)*py4(i)
266 pzz=pz1(i)*pz1(i)+pz2(i)*pz2(i)+pz3(i)*pz3(i)+pz4(i)*pz4(i)
267 pxy=px1(i)*py1(i)+px2(i)*py2(i)+px3(i)*py3(i)+px4(i)*py4(i)
268 pxz=px1(i)*pz1(i)+px2(i)*pz2(i)+px3(i)*pz3(i)+px4(i)*pz4(i)
269 pyz=py1(i)*pz1(i)+py2(i)*pz2(i)+py3(i)*pz3(i)+py4(i)*pz4(i)
270C
271 aa = -(pxx+pyy+pzz)
272 bb = (pxx*pyy+pxx*pzz+pyy*pzz-pxy**2-pxz**2-pyz**2)
273 p = bb-third*aa*aa
274 d = two*sqrt(third*max(-p,zero))-third*aa
275C
276 d=ld*d
277C
278 deltax(i) = one / sqrt(d)
279 END DO
280
281 ELSEIF(iformdt==2)THEN
282
283 gfac=pm(105,mxt(1))
284 DO i=1,nel
285 pxx=px1(i)*px1(i)+px2(i)*px2(i)+px3(i)*px3(i)+px4(i)*px4(i)
286 pyy=py1(i)*py1(i)+py2(i)*py2(i)+py3(i)*py3(i)+py4(i)*py4(i)
287 pzz=pz1(i)*pz1(i)+pz2(i)*pz2(i)+pz3(i)*pz3(i)+pz4(i)*pz4(i)
288 pxy=px1(i)*py1(i)+px2(i)*py2(i)+px3(i)*py3(i)+px4(i)*py4(i)
289 pxz=px1(i)*pz1(i)+px2(i)*pz2(i)+px3(i)*pz3(i)+px4(i)*pz4(i)
290 pyz=py1(i)*pz1(i)+py2(i)*pz2(i)+py3(i)*pz3(i)+py4(i)*pz4(i)
291C
292 aa = -(pxx+pyy+pzz)
293 bb = gfac*(pxx*pyy+pxx*pzz+pyy*pzz-pxy**2-pxz**2-pyz**2)
294 p = bb-third*aa*aa
295 d = two*sqrt(third*max(-p,zero))-third*aa
296C
297 deltax(i) = one / sqrt(d)
298 END DO
299
300 END IF
301C
302 RETURN
303C
304 1000 FORMAT(/' ZERO OR NEGATIVE VOLUME : 3D-ELEMENT NB',i10/)
305 2000 FORMAT(/' ZERO OR NEGATIVE VOLUME : DELETE 3D-ELEMENT NB',i10/)
#define my_real
Definition cppsort.cpp:32
#define max(a, b)
Definition macros.h:21
subroutine schkjabt3(off, det, ngl, offg, nnega, index, nel, ismstr, jlag)
Definition schkjabt3.F:40