OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
r4evec3.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!|| r4evec3 ../engine/source/elements/spring/r4evec3.F
25!||--- called by ------------------------------------------------------
26!|| r23law113 ../engine/source/elements/spring/r23law113.F
27!|| r23law114 ../engine/source/elements/spring/r23law114.F
28!|| rforc3 ../engine/source/elements/spring/rforc3.F
29!||====================================================================
30 SUBROUTINE r4evec3(
31 1 RLOC, V, EXX2, EYX2,
32 2 EZX2, EXY2, EYY2, EZY2,
33 3 EXZ2, EYZ2, EZZ2, AL2DP,
34 4 X1DP, X2DP, AL2, ALDP,
35 5 RLOC_ERR,NGL, AL, EXX,
36 6 EYX, EZX, EXY, EYY,
37 7 EZY, EXZ, EYZ, EZZ,
38 8 RX1, RY1, RZ1, RX2,
39 9 RY2, RZ2, VX1, VX2,
40 A VY1, VY2, VZ1, VZ2,
41 B NC1, NC2, NEL)
42C-----------------------------------------------
43C I m p l i c i t T y p e s
44C-----------------------------------------------
45#include "implicit_f.inc"
46C-----------------------------------------------
47C G l o b a l P a r a m e t e r s
48C-----------------------------------------------
49#include "mvsiz_p.inc"
50C-----------------------------------------------
51C C o m m o n B l o c k s
52C-----------------------------------------------
53#include "com04_c.inc"
54#include "com08_c.inc"
55#include "impl1_c.inc"
56C-----------------------------------------------
57C D u m m y A r g u m e n t s
58C-----------------------------------------------
59 INTEGER, INTENT(IN) :: NEL
60 INTEGER NGL(*),NC1(*),NC2(*)
61C REAL
62 my_real
63 . RLOC(3,*),V(3,*),
64 . EXX2(MVSIZ), EYX2(MVSIZ), EZX2(MVSIZ),
65 . EXY2(MVSIZ), EYY2(MVSIZ), EZY2(MVSIZ),
66 . EXZ2(MVSIZ), EYZ2(MVSIZ), EZZ2(MVSIZ),
67 . RLOC_ERR(3,*),AL2(MVSIZ),
68 . EXX(MVSIZ), EYX(MVSIZ), EZX(MVSIZ),
69 . EXY(MVSIZ), EYY(MVSIZ), EZY(MVSIZ),
70 . exz(mvsiz), eyz(mvsiz), ezz(mvsiz),
71 . rx1(mvsiz),rx2(mvsiz),ry1(mvsiz),
72 . ry2(mvsiz),rz1(mvsiz),rz2(mvsiz),al(mvsiz),
73 . vx1(mvsiz),vx2(mvsiz),vy1(mvsiz), vy2(mvsiz),
74 . vz1(mvsiz),vz2(mvsiz)
75 DOUBLE PRECISION X1DP(3,*),X2DP(3,*),
76 . ALDP(MVSIZ),AL2DP(MVSIZ)
77C-----------------------------------------------
78C L o c a l V a r i a b l e s
79C-----------------------------------------------
80 INTEGER I,J
81C REAL
82 my_real
83 . THETAPHI, R1PHI, R2PHI, SINT(MVSIZ),
84 . SUM(MVSIZ) ,SUM2(MVSIZ), SUM3(MVSIZ) ,THETA(MVSIZ),
85 . COST(MVSIZ), SUM1PHI, SUM2PHI, SUM3PHI, COPHI, SIPHI, COSPHI,
86 . sinphi,sumphi,
87 . dt05,cost2(mvsiz),sint2(mvsiz),cc,ss
88 DOUBLE PRECISION EXXDP(MVSIZ),EYXDP(MVSIZ),EZXDP(MVSIZ),
89 . EXX2DP(MVSIZ),EYX2DP(MVSIZ),EZX2DP(MVSIZ),
90 . EXYDP(MVSIZ) ,EYYDP(MVSIZ) ,EZYDP(MVSIZ),
91 . exy2dp(mvsiz),eyy2dp(mvsiz),ezy2dp(mvsiz),
92 . exzdp(mvsiz) ,eyzdp(mvsiz) ,ezzdp(mvsiz),
93 . exz2dp(mvsiz),eyz2dp(mvsiz),ezz2dp(mvsiz),
94 . rx1dp, rx2dp
95C-----------------------------------------------
96 DO i=1,nel
97 exydp(i)=rloc(1,i)
98 eyydp(i)=rloc(2,i)
99 ezydp(i)=rloc(3,i)
100 exy2dp(i)=rloc(1,i)
101 eyy2dp(i)=rloc(2,i)
102 ezy2dp(i)=rloc(3,i)
103 ENDDO
104C
105 IF (scodver >= 101) THEN
106 DO i=1,nel
107 exydp(i)=exydp(i)+rloc_err(1,i)
108 eyydp(i)=eyydp(i)+rloc_err(2,i)
109 ezydp(i)=ezydp(i)+rloc_err(3,i)
110 exy2dp(i)=exy2dp(i)+rloc_err(1,i)
111 eyy2dp(i)=eyy2dp(i)+rloc_err(2,i)
112 ezy2dp(i)=ezy2dp(i)+rloc_err(3,i)
113 ENDDO
114 ENDIF
115C
116 dt05=half*dt1
117 IF (ismdisp > 0) dt05=zero
118C
119 DO i=1,nel
120 exxdp(i)=x2dp(1,i)-x1dp(1,i)
121 eyxdp(i)=x2dp(2,i)-x1dp(2,i)
122 ezxdp(i)=x2dp(3,i)-x1dp(3,i)
123 aldp(i) =sqrt(exxdp(i)*exxdp(i)+eyxdp(i)*eyxdp(i)+
124 . ezxdp(i)*ezxdp(i))
125 al(i)=aldp(i)
126 exx2dp(i)=x2dp(1,i)-x1dp(1,i)-dt05*(v(1,nc2(i))-v(1,nc1(i)))
127 eyx2dp(i)=x2dp(2,i)-x1dp(2,i)-dt05*(v(2,nc2(i))-v(2,nc1(i)))
128 ezx2dp(i)=x2dp(3,i)-x1dp(3,i)-dt05*(v(3,nc2(i))-v(3,nc1(i)))
129 al2dp(i)=sqrt(exx2dp(i)*exx2dp(i)+eyx2dp(i)*eyx2dp(i)+
130 . ezx2dp(i)*ezx2dp(i))
131 al2(i)=al2dp(i)
132 ENDDO
133C
134 DO i=1,nel
135 IF (aldp(i) <= em15) THEN
136 exxdp(i)= one
137 eyxdp(i)= zero
138 ezxdp(i)= zero
139 exydp(i)= zero
140 eyydp(i)= one
141 ezydp(i)= zero
142 ELSE
143 exxdp(i)=exxdp(i)/aldp(i)
144 eyxdp(i)=eyxdp(i)/aldp(i)
145 ezxdp(i)=ezxdp(i)/aldp(i)
146 ENDIF
147 ENDDO
148C
149 DO i=1,nel
150 IF (al2dp(i) <= em15) THEN
151 exx2dp(i)= one
152 eyx2dp(i)= zero
153 ezx2dp(i)= zero
154 exy2dp(i)= zero
155 eyy2dp(i)= one
156 ezy2dp(i)= zero
157 ELSE
158 exx2dp(i)=exx2dp(i)/al2dp(i)
159 eyx2dp(i)=eyx2dp(i)/al2dp(i)
160 ezx2dp(i)=ezx2dp(i)/al2dp(i)
161 ENDIF
162 ENDDO
163C
164 DO i=1,nel
165 exzdp(i)=eyxdp(i)*ezydp(i)-ezxdp(i)*eyydp(i)
166 eyzdp(i)=ezxdp(i)*exydp(i)-exxdp(i)*ezydp(i)
167 ezzdp(i)=exxdp(i)*eyydp(i)-eyxdp(i)*exydp(i)
168C
169 exz2dp(i)=eyx2dp(i)*ezy2dp(i)-ezx2dp(i)*eyy2dp(i)
170 eyz2dp(i)=ezx2dp(i)*exy2dp(i)-exx2dp(i)*ezy2dp(i)
171 ezz2dp(i)=exx2dp(i)*eyy2dp(i)-eyx2dp(i)*exy2dp(i)
172 ENDDO
173C
174 DO i=1,nel
175 exydp(i)=eyzdp(i)*ezxdp(i)-ezzdp(i)*eyxdp(i)
176 eyydp(i)=ezzdp(i)*exxdp(i)-exzdp(i)*ezxdp(i)
177 ezydp(i)=exzdp(i)*eyxdp(i)-eyzdp(i)*exxdp(i)
178C
179 exy2dp(i)=eyz2dp(i)*ezx2dp(i)-ezz2dp(i)*eyx2dp(i)
180 eyy2dp(i)=ezz2dp(i)*exx2dp(i)-exz2dp(i)*ezx2dp(i)
181 ezy2dp(i)=exz2dp(i)*eyx2dp(i)-eyz2dp(i)*exx2dp(i)
182 ENDDO
183C--------------------------------------------
184C TORSION MOYENNE EN COORDONNEES GLOBALES
185C--------------------------------------------
186 DO i=1,nel
187 rx1dp = exx2dp(i)*rx1(i)+eyx2dp(i)*ry1(i)+ezx2dp(i)*rz1(i)
188 rx2dp = exx2dp(i)*rx2(i)+eyx2dp(i)*ry2(i)+ezx2dp(i)*rz2(i)
189 theta(i) = (rx1dp+rx2dp)/two*dt05
190 sum2(i) = max(em15,sqrt(exy2dp(i)**2+eyy2dp(i)**2+ezy2dp(i)**2))
191 sum3(i) = max(em15,sqrt(exz2dp(i)**2+eyz2dp(i)**2+ezz2dp(i)**2))
192 cc = cos(theta(i))
193 ss = sin(theta(i))
194 cost2(i) = cc/sum2(i)
195 sint2(i) = ss/sum3(i)
196 sum2(i) = max(em15,sqrt(exydp(i)**2+eyydp(i)**2+ezydp(i)**2))
197 sum3(i) = max(em15,sqrt(exzdp(i)**2+eyzdp(i)**2+ezzdp(i)**2))
198 cost(i) = (two*cc*cc-one)/sum2(i)
199 sint(i) = two*cc*ss/sum3(i)
200 ENDDO
201C
202C ... it is modified.
203C
204 DO i=1,nel
205 exydp(i)= exydp(i)*cost(i)+exzdp(i)*sint(i)
206 eyydp(i)= eyydp(i)*cost(i)+eyzdp(i)*sint(i)
207 ezydp(i)= ezydp(i)*cost(i)+ezzdp(i)*sint(i)
208C
209 exy2dp(i)= exy2dp(i)*cost2(i)+exz2dp(i)*sint2(i)
210 eyy2dp(i)= eyy2dp(i)*cost2(i)+eyz2dp(i)*sint2(i)
211 ezy2dp(i)= ezy2dp(i)*cost2(i)+ezz2dp(i)*sint2(i)
212 ENDDO
213C
214 DO i=1,nel
215 sum(i) =max(em15,sqrt(exydp(i)*exydp(i)+
216 . eyydp(i)*eyydp(i)+
217 . ezydp(i)*ezydp(i)))
218 exydp(i)=exydp(i)/sum(i)
219 eyydp(i)=eyydp(i)/sum(i)
220 ezydp(i)=ezydp(i)/sum(i)
221C
222 sum(i) =max(em15,sqrt(exy2dp(i)*exy2dp(i)+
223 . eyy2dp(i)*eyy2dp(i)+
224 . ezy2dp(i)*ezy2dp(i)))
225 exy2dp(i)=exy2dp(i)/sum(i)
226 eyy2dp(i)=eyy2dp(i)/sum(i)
227 ezy2dp(i)=ezy2dp(i)/sum(i)
228 ENDDO
229C
230 DO i=1,nel
231 exzdp(i)=eyxdp(i)*ezydp(i)-ezxdp(i)*eyydp(i)
232 eyzdp(i)=ezxdp(i)*exydp(i)-exxdp(i)*ezydp(i)
233 ezzdp(i)=exxdp(i)*eyydp(i)-eyxdp(i)*exydp(i)
234C
235 exz2dp(i)=eyx2dp(i)*ezy2dp(i)-ezx2dp(i)*eyy2dp(i)
236 eyz2dp(i)=ezx2dp(i)*exy2dp(i)-exx2dp(i)*ezy2dp(i)
237 ezz2dp(i)=exx2dp(i)*eyy2dp(i)-eyx2dp(i)*exy2dp(i)
238 ENDDO
239C
240 DO i=1,nel
241 sum(i) =max(em15,sqrt(exzdp(i)*exzdp(i)+
242 . eyzdp(i)*eyzdp(i)+
243 . ezzdp(i)*ezzdp(i)))
244 exzdp(i)=exzdp(i)/sum(i)
245 eyzdp(i)=eyzdp(i)/sum(i)
246 ezzdp(i)=ezzdp(i)/sum(i)
247C
248 sum(i) =max(em15,sqrt(exz2dp(i)*exz2dp(i)+
249 . eyz2dp(i)*eyz2dp(i)+
250 . ezz2dp(i)*ezz2dp(i)))
251 exz2dp(i)=exz2dp(i)/sum(i)
252 eyz2dp(i)=eyz2dp(i)/sum(i)
253 ezz2dp(i)=ezz2dp(i)/sum(i)
254 ENDDO
255C
256 DO i=1,nel
257 rloc(1,i) = exydp(i)
258 rloc(2,i) = eyydp(i)
259 rloc(3,i) = ezydp(i)
260 ENDDO
261C
262 IF (scodver >= 101) THEN
263 DO i=1,nel
264 rloc_err(1,i) = exydp(i) - rloc(1,i)
265 rloc_err(2,i) = eyydp(i) - rloc(2,i)
266 rloc_err(3,i) = ezydp(i) - rloc(3,i)
267 ENDDO
268 ENDIF
269C
270 DO i=1,nel
271 vx1(i)=v(1,nc1(i))
272 vy1(i)=v(2,nc1(i))
273 vz1(i)=v(3,nc1(i))
274 vx2(i)=v(1,nc2(i))
275 vy2(i)=v(2,nc2(i))
276 vz2(i)=v(3,nc2(i))
277 ENDDO
278C
279 DO i=1,nel
280 exx(i)=exxdp(i)
281 eyx(i)=eyxdp(i)
282 ezx(i)=ezxdp(i)
283C
284 exy(i)=exydp(i)
285 eyy(i)=eyydp(i)
286 ezy(i)=ezydp(i)
287C
288 exz(i)=exzdp(i)
289 eyz(i)=eyzdp(i)
290 ezz(i)=ezzdp(i)
291C
292 exx2(i)=exx2dp(i)
293 eyx2(i)=eyx2dp(i)
294 ezx2(i)=ezx2dp(i)
295C
296 exy2(i)=exy2dp(i)
297 eyy2(i)=eyy2dp(i)
298 ezy2(i)=ezy2dp(i)
299C
300 exz2(i)=exz2dp(i)
301 eyz2(i)=eyz2dp(i)
302 ezz2(i)=ezz2dp(i)
303 ENDDO
304C---
305 RETURN
306 END
#define max(a, b)
Definition macros.h:21
subroutine r4evec3(rloc, v, exx2, eyx2, ezx2, exy2, eyy2, ezy2, exz2, eyz2, ezz2, al2dp, x1dp, x2dp, al2, aldp, rloc_err, ngl, al, exx, eyx, ezx, exy, eyy, ezy, exz, eyz, ezz, rx1, ry1, rz1, rx2, ry2, rz2, vx1, vx2, vy1, vy2, vz1, vz2, nc1, nc2, nel)
Definition r4evec3.F:42