OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
pcurv3.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!|| pcurv3 ../engine/source/elements/beam/pcurv3.F
25!||--- called by ------------------------------------------------------
26!|| pforc3 ../engine/source/elements/beam/pforc3.F
27!||====================================================================
28 SUBROUTINE pcurv3(
29 1 R, GEO, OFFG, OFF,
30 2 EXX, EXY, EXZ, KXX,
31 3 KYY, KZZ, AL, NC1,
32 4 NC2, NC3, RX1G, RX2G,
33 5 RY1G, RY2G, RZ1G, RZ2G,
34 6 E1X, E1Y, E1Z, E2X,
35 7 E2Y, E2Z, E3X, E3Y,
36 8 E3Z, PID, NEL)
37C-----------------------------------------------
38C I m p l i c i t T y p e s
39C-----------------------------------------------
40#include "implicit_f.inc"
41C-----------------------------------------------
42C G l o b a l P a r a m e t e r s
43C-----------------------------------------------
44#include "mvsiz_p.inc"
45C-----------------------------------------------
46C C o m m o n B l o c k s
47C-----------------------------------------------
48#include "com08_c.inc"
49#include "param_c.inc"
50#include "impl1_c.inc"
51C-----------------------------------------------
52C D u m m y A r g u m e n t s
53C-----------------------------------------------
54 INTEGER, INTENT(IN) :: NEL
55 INTEGER NC1(MVSIZ),NC2(MVSIZ),NC3(MVSIZ),PID(MVSIZ)
56 my_real
57 . R(3,*), GEO(NPROPG,*),
58 . OFFG(*),OFF(*),AL(MVSIZ),EXX(MVSIZ),EXY(MVSIZ),EXZ(MVSIZ),
59 . KXX(MVSIZ),KYY(MVSIZ),KZZ(MVSIZ),RX1G(MVSIZ),RX2G(MVSIZ),
60 . RY1G(MVSIZ),RY2G(MVSIZ),RZ1G(MVSIZ),RZ2G(MVSIZ),
61 . RX1(MVSIZ),RX2(MVSIZ),RY1(MVSIZ),RY2(MVSIZ),RZ1(MVSIZ),RZ2(MVSIZ),
62 . e1x(mvsiz),e1y(mvsiz),e1z(mvsiz),e2x(mvsiz),e2y(mvsiz),
63 . e2z(mvsiz),e3x(mvsiz),e3y(mvsiz),e3z(mvsiz)
64C-----------------------------------------------
65C L o c a l V a r i a b l e s
66C-----------------------------------------------
67 INTEGER I, IG, IRX, IR1Y, IR1Z,
68 . IR2Y, IR2Z, IRY, IRZ, J
69 my_real
70 . RXAV(MVSIZ), RYAV(MVSIZ), RZAV(MVSIZ),EXX00(MVSIZ), EXY00(MVSIZ),
71 . EXZ00(MVSIZ), EXY0(MVSIZ), EXZ0(MVSIZ),RZ10(MVSIZ),
72 . RY10(MVSIZ), RZ20(MVSIZ), RY20(MVSIZ), EXX00PHI,EXY00PHI,
73 . EXZ00PHI, EXY0PHI, EXZ0PHI, RX10PHI, RY10PHI, RZ10PHI,
74 . RX20PHI, RY20PHI, RZ20PHI,OFF_L,DT05
75C-----------------------------------------------
76 DO i=1,nel
77 rx1(i)=e1x(i)*rx1g(i)+e1y(i)*ry1g(i)+e1z(i)*rz1g(i)
78 ry1(i)=e2x(i)*rx1g(i)+e2y(i)*ry1g(i)+e2z(i)*rz1g(i)
79 rz1(i)=e3x(i)*rx1g(i)+e3y(i)*ry1g(i)+e3z(i)*rz1g(i)
80 rx2(i)=e1x(i)*rx2g(i)+e1y(i)*ry2g(i)+e1z(i)*rz2g(i)
81 ry2(i)=e2x(i)*rx2g(i)+e2y(i)*ry2g(i)+e2z(i)*rz2g(i)
82 rz2(i)=e3x(i)*rx2g(i)+e3y(i)*ry2g(i)+e3z(i)*rz2g(i)
83 ENDDO
84C---------------------------------
85C SECOND ORDRE TRANSLATIONS ROTATIONS
86C---------------------------------
87 dt05=half*dt1
88 IF (impl_s > 0 .AND. ismdisp > 0) dt05=zero
89C
90 DO i=1,nel
91 rxav(i)= half*dt05*(rx1(i)+rx2(i))
92 exx00(i)=exx(i)
93 exy00(i)=exy(i)
94 exz00(i)=exz(i)
95C
96 exy0(i)=dt05*exy(i)
97 exz0(i)=dt05*exz(i)
98 exx(i)=exx(i)-(exy0(i)*exy00(i)+exz0(i)*exz00(i))
99 exy(i)=exy(i)+exz0(i)*exx00(i)
100 exz(i)=exz(i)+exy0(i)*exx00(i)
101 rz10(i)=rz1(i)
102 ry10(i)=ry1(i)
103 rz20(i)=rz2(i)
104 ry20(i)=ry2(i)
105 rx1(i)=rx1(i)-exy0(i)*ry10(i)-exz0(i)*rz10(i)
106 ry1(i)=ry1(i)-rxav(i)*(rz10(i)-exy(i))
107 rz1(i)=rz1(i)+rxav(i)*(ry10(i)+exz(i))
108 rx2(i)=rx2(i)-exy0(i)*ry20(i)-exz0(i)*rz20(i)
109 ry2(i)=ry2(i)-rxav(i)*(rz20(i)-exy(i))
110 rz2(i)=rz2(i)+rxav(i)*(ry20(i)+exz(i))
111 ENDDO
112C---------------------------------------------------
113C LIBERATION DES ROTATIONS
114C---------------------------------------------------
115 DO i=1,nel
116 ig=pid(i)
117 irx =nint(geo(7 ,ig))
118 ir1y=nint(geo(8 ,ig))
119 ir1z=nint(geo(9 ,ig))
120 ir2y=nint(geo(10,ig))
121 ir2z=nint(geo(11,ig))
122 iry =min(1,ir1y+ir2y)
123 irz =min(1,ir1z+ir2z)
124 rx1(i)=rx1(i)*irx
125 ry1(i)=ry1(i)*iry
126 rz1(i)=rz1(i)*irz
127 rx2(i)=rx2(i)*irx
128 ry2(i)=ry2(i)*iry
129 rz2(i)=rz2(i)*irz
130 exz(i)=exz(i)*iry
131 exy(i)=exy(i)*irz
132C ... !!!!!!!
133 ry1(i)=ir1y*ry1(i)
134 + -(one -ir1y)*(three_half*exz(i)+half*ry2(i))
135 ry2(i)=ir2y*ry2(i)
136 + -(one -ir2y)*(three_half*exz(i)+half*ry1(i))
137 rz1(i)=ir1z*rz1(i)
138 + +(one-ir1z)*(three_half*exy(i)-half*rz2(i))
139 rz2(i)=ir2z*rz2(i)
140 + +(one -ir2z)*(three_half*exy(i)-half*rz1(i))
141 ENDDO
142C
143 DO i=1,nel
144 kxx(i)=(rx2(i)-rx1(i))/al(i)
145 kyy(i)=(ry2(i)-ry1(i))/al(i)
146 kzz(i)=(rz2(i)-rz1(i))/al(i)
147 ENDDO
148C
149 DO i=1,nel
150 rxav(i)=rx1(i)+rx2(i)
151 rzav(i)=rz1(i)+rz2(i)
152 ryav(i)=ry1(i)+ry2(i)
153 ENDDO
154C---------------------------------
155 DO i=1,nel
156 exz(i)=exz(i) + half*ryav(i)
157 exy(i)=exy(i) - half*rzav(i)
158 ENDDO
159C----------------------------
160C OFF
161C----------------------------
162 off_l = zero
163 DO i=1,nel
164 off(i) = min(one,abs(offg(i)))
165 off(i) = max(zero,off(i))
166 off_l = min(off_l,offg(i))
167 ENDDO
168 IF (off_l < zero) THEN
169 DO i=1,nel
170 IF (offg(i) < zero) THEN
171 exx(i)=zero
172 exz(i)=zero
173 exy(i)=zero
174 kxx(i)=zero
175 kyy(i)=zero
176 kzz(i)=zero
177 ENDIF
178 ENDDO
179 ENDIF
180C---------------------------------
181 RETURN
182 END
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
subroutine pcurv3(r, geo, offg, off, exx, exy, exz, kxx, kyy, kzz, al, nc1, nc2, nc3, rx1g, rx2g, ry1g, ry2g, rz1g, rz2g, e1x, e1y, e1z, e2x, e2y, e2z, e3x, e3y, e3z, pid, nel)
Definition pcurv3.F:37