OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
s4defo3.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!|| s4defo3 ../engine/source/elements/solid/solide4/s4defo3.F
25!||--- called by ------------------------------------------------------
26!|| s4forc3 ../engine/source/elements/solid/solide4/s4forc3.F
27!||====================================================================
28 SUBROUTINE s4defo3(
29 1 PX1, PX2, PX3, PX4,
30 2 PY1, PY2, PY3, PY4,
31 3 PZ1, PZ2, PZ3, PZ4,
32 4 VX1, VX2, VX3, VX4,
33 5 VY1, VY2, VY3, VY4,
34 6 VZ1, VZ2, VZ3, VZ4,
35 7 DXX, DXY, DXZ, DYX,
36 8 DYY, DYZ, DZX, DZY,
37 9 DZZ, D4, D5, D6,
38 A WXX, WYY, WZZ, NEL,
39 B ISMSTR)
40C-----------------------------------------------
41C I m p l i c i t T y p e s
42C-----------------------------------------------
43#include "implicit_f.inc"
44C-----------------------------------------------
45C D u m m y A r g u m e n t s
46C-----------------------------------------------
47 INTEGER, INTENT(IN) :: NEL
48 INTEGER, INTENT(IN) :: ISMSTR
49 my_real
50 . VX1(*), VX2(*), VX3(*), VX4(*),
51 . VY1(*), VY2(*), VY3(*), VY4(*),
52 . VZ1(*), VZ2(*), VZ3(*), VZ4(*),
53 . PX1(*), PX2(*), PX3(*), PX4(*),
54 . PY1(*), PY2(*), PY3(*), PY4(*),
55 . PZ1(*), PZ2(*), PZ3(*), PZ4(*),
56 . DXX(*), DXY(*), DXZ(*),
57 . DYX(*), DYY(*), DYZ(*),
58 . dzx(*), dzy(*), dzz(*), d4(*), d5(*), d6(*),
59 . wxx(*), wyy(*), wzz(*)
60CMasParINCLUDE 'sdefo3.intmap.inc'
61C-----------------------------------------------
62C C o m m o n B l o c k s
63C-----------------------------------------------
64#include "com08_c.inc"
65C-----------------------------------------------
66C L o c a l V a r i a b l e s
67C-----------------------------------------------
68 INTEGER I
69C REAL
70 my_real
71 . DT1D2
72 my_real
73 . PXX2,PYY2,PZZ2,PXX2P,PYY2P,PZZ2P,AAA,BBB,CCC,
74 . EXX,EXY,EXZ,EYX,EYY,EYZ,EZX,EZY,EZZ
75C-----------------------------------------------
76 DO I=1,nel
77 dxx(i)=px1(i)*vx1(i)+px2(i)*vx2(i)+
78 . px3(i)*vx3(i)+px4(i)*vx4(i)
79 dyy(i)=py1(i)*vy1(i)+py2(i)*vy2(i)+
80 . py3(i)*vy3(i)+py4(i)*vy4(i)
81 dzz(i)=pz1(i)*vz1(i)+pz2(i)*vz2(i)+
82 . pz3(i)*vz3(i)+pz4(i)*vz4(i)
83 dxy(i)=py1(i)*vx1(i)+py2(i)*vx2(i)+
84 . py3(i)*vx3(i)+py4(i)*vx4(i)
85 dxz(i)=pz1(i)*vx1(i)+pz2(i)*vx2(i)+
86 . pz3(i)*vx3(i)+pz4(i)*vx4(i)
87 dyx(i)=px1(i)*vy1(i)+px2(i)*vy2(i)+
88 . px3(i)*vy3(i)+px4(i)*vy4(i)
89 dyz(i)=pz1(i)*vy1(i)+pz2(i)*vy2(i)+
90 . pz3(i)*vy3(i)+pz4(i)*vy4(i)
91 dzx(i)=px1(i)*vz1(i)+px2(i)*vz2(i)+
92 . px3(i)*vz3(i)+px4(i)*vz4(i)
93 dzy(i)=py1(i)*vz1(i)+py2(i)*vz2(i)+
94 . py3(i)*vz3(i)+py4(i)*vz4(i)
95 ENDDO
96C
97 dt1d2=half*dt1
98C
99 IF(ismstr==2.OR.ismstr==4)THEN
100C
101C 2nd order correction is needed only w/large strain
102C since small strain is not objective anyway
103 DO i=1,nel
104C
105 exx=dxx(i)
106 eyy=dyy(i)
107 ezz=dzz(i)
108 exy=dxy(i)
109 eyx=dyx(i)
110 exz=dxz(i)
111 ezx=dzx(i)
112 eyz=dyz(i)
113 ezy=dzy(i)
114C
115C Euler-Almansi A=1/2 [I-Invers(B)], with Left Cauchy-Green tensor B = F.Transp(F)
116C Invers(B)=Invers(Transp(F)).Invers(F)
117C
118C small perturbation A ~ (I-Transp(gradU)).(I-gradU)
119C A ~ 1/2 (gradU + Transp(gradU) - Transp(gradU).gradU)
120C
121 dxx(i) = dxx(i)-dt1d2*(exx*exx+eyx*eyx+ezx*ezx)
122 dyy(i) = dyy(i)-dt1d2*(eyy*eyy+ezy*ezy+exy*exy)
123 dzz(i) = dzz(i)-dt1d2*(ezz*ezz+exz*exz+eyz*eyz)
124 aaa = dt1d2*(exx*exy+eyx*eyy+ezx*ezy)
125 dxy(i) = dxy(i) -aaa
126 dyx(i) = dyx(i) -aaa
127 d4(i) = dxy(i)+dyx(i)
128 bbb = dt1d2*(eyy*eyz+ezy*ezz+exy*exz)
129 dyz(i) = dyz(i) -bbb
130 dzy(i) = dzy(i) -bbb
131 d5(i) = dyz(i)+dzy(i)
132 ccc = dt1d2*(ezz*ezx+exz*exx+eyz*eyx)
133 dxz(i) = dxz(i) -ccc
134 dzx(i) = dzx(i) -ccc
135 d6(i) = dxz(i)+dzx(i)
136C
137C WZZ(I)=DT1D2*(EYX-EXY)
138C WYY(I)=DT1D2*(EXZ-EZX)
139C WXX(I)=DT1D2*(EZY-EYZ)
140C
141C B = F Transp(F) = V^2, F = V.R
142C => R = [Invers(Transp(F)).F]^1/2
143C small perturbation => R ~ I + 1/2 ( gradU - Transp(gradU) - Transp(gradU).gradU )
144C
145C [ 0 wzz -wyy ]
146C and R = [ wzz 0 -wxx ]
147C [ wyy wxx 0 ]
148C
149 wzz(i)=dt1*(half*(eyx-exy)-aaa)
150 wyy(i)=dt1*(half*(exz-ezx)-bbb)
151 wxx(i)=dt1*(half*(ezy-eyz)-ccc)
152 ENDDO
153 ELSE ! ISMSTR==1 or Total Strain Formulation (Approximated Strain Rate)
154 DO i=1,nel
155 d4(i) = dxy(i)+dyx(i)
156 d5(i) = dyz(i)+dzy(i)
157 d6(i) = dxz(i)+dzx(i)
158 wzz(i)=dt1d2*(dyx(i)-dxy(i))
159 wyy(i)=dt1d2*(dxz(i)-dzx(i))
160 wxx(i)=dt1d2*(dzy(i)-dyz(i))
161 ENDDO
162 END IF
163C
164 RETURN
165C
166 END
subroutine s4defo3(px1, px2, px3, px4, py1, py2, py3, py4, pz1, pz2, pz3, pz4, vx1, vx2, vx3, vx4, vy1, vy2, vy3, vy4, vz1, vz2, vz3, vz4, dxx, dxy, dxz, dyx, dyy, dyz, dzx, dzy, dzz, d4, d5, d6, wxx, wyy, wzz, nel, ismstr)
Definition s4defo3.F:40