OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
r23law114.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!|| r23law114 ../engine/source/elements/spring/r23law114.F
25!||--- called by ------------------------------------------------------
26!|| r23forc3 ../engine/source/elements/spring/r23forc3.F
27!||--- calls -----------------------------------------------------
28!|| r23_114_coor3 ../engine/source/tools/seatbelts/r23_114_coor3.F
29!|| r23bilan ../engine/source/elements/spring/r23bilan.F
30!|| r23coor3 ../engine/source/elements/spring/r23coor3.F
31!|| r23l114def3 ../engine/source/elements/spring/r23l114def3.F
32!|| r23sens3 ../engine/source/elements/spring/r23sens3.F
33!|| r2len3 ../engine/source/elements/spring/r2len3.F
34!|| r4cum3 ../engine/source/elements/spring/r4cum3.F
35!|| r4cum3p ../engine/source/elements/spring/r4cum3p.F
36!|| r4evec3 ../engine/source/elements/spring/r4evec3.F
37!|| r4tors ../engine/source/elements/spring/r4tors.F
38!||--- uses -----------------------------------------------------
39!|| elbufdef_mod ../common_source/modules/mat_elem/elbufdef_mod.F90
40!|| h3d_mod ../engine/share/modules/h3d_mod.F
41!|| python_funct_mod ../common_source/modules/python_mod.F90
42!|| sensor_mod ../common_source/modules/sensor_mod.F90
43!|| table_mod ../engine/share/modules/table_mod.F
44!||====================================================================
45 SUBROUTINE r23law114(PYTHON,
46 1 ELBUF_STR, JFT, JLT, NEL,
47 2 MTN, IGEO, GEO, IPM,
48 3 IXR, X, TABLE, XDP,
49 4 F, NPF, TF, SKEW,
50 5 FLG_KJ2, VR, AR, V,
51 6 DT2T, NELTST, ITYPTST, STIFN,
52 7 STIFR, MS, IN, FSKY,
53 8 IADR, SENSOR_TAB, OFFSET, ANIM,
54 9 PARTSAV, IPARTR, TANI, FR_WAVE,
55 A BUFMAT, BUFGEO, PM, RBY,
56 B FX1, FX2, FY1, FY2,
57 C FZ1, FZ2, MX1, MX2,
58 D MY1, MY2, MZ1, MZ2,
59 E GRESAV, GRTH, IGRTH, MSRT,
60 F DMELRT, FLAG_SLIPRING_UPDATE, FLAG_RETRACTOR_UPDATE,H3D_DATA,
61 G JSMS, IGRE, NFT, NSENSOR,
62 h STF, SANIN , IRESP, SNPC)
63C-----------------------------------------------
64C M o d u l e s
65C-----------------------------------------------
66 USE elbufdef_mod
67 USE table_mod
68 USE h3d_mod
69 USE sensor_mod
70 USE python_funct_mod
71C-----------------------------------------------
72C I m p l i c i t T y p e s
73C-----------------------------------------------
74#include "implicit_f.inc"
75C-----------------------------------------------
76C G l o b a l P a r a m e t e r s
77C-----------------------------------------------
78#include "mvsiz_p.inc"
79C-----------------------------------------------
80C C o m m o n B l o c k s
81C-----------------------------------------------
82#include "param_c.inc"
83#include "parit_c.inc"
84#include "com04_c.inc"
85C-----------------------------------------------
86C D u m m y A r g u m e n t s
87C-----------------------------------------------
88 type(python_), intent(in) :: PYTHON
89 INTEGER, INTENT(IN) :: STF !< Size of TF
90 INTEGER, INTENT(IN) :: SANIN !< Size of ANIM
91 INTEGER, INTENT(IN) :: IRESP !< Single Precision flag
92 INTEGER, INTENT(IN) :: SNPC !< Size of NPF
93 INTEGER, INTENT(IN) :: IGRE,NSENSOR
94 INTEGER, INTENT(IN) :: NFT
95 INTEGER, INTENT(IN) :: JSMS
96 INTEGER IXR(NIXR,*), NPF(*),IADR(3,*),IPARTR(*),
97 . IGEO(NPROPGI,*),JFT,JLT,NELTST ,ITYPTST,OFFSET,
98 . NEL,MTN,GRTH(*),IGRTH(*),FLG_KJ2,IPM(NPROPMI,*),FLAG_SLIPRING_UPDATE,
99 . FLAG_RETRACTOR_UPDATE
100 my_real DT2T ,
101 . GEO(NPROPG,*),X(*),F(*),TF(STF),SKEW(LSKEW,*),FSKY(*),
102 . VR(*), V(*), AR(*), STIFN(*),STIFR(*),MS(*), IN(*),
103 . ANIM(*),PARTSAV(*),TANI(15,*),
104 . FR_WAVE(*),BUFMAT(*),BUFGEO(*),PM(*),RBY(*),
105 . fx1(mvsiz),fy1(mvsiz),fz1(mvsiz),
106 . fx2(mvsiz),fy2(mvsiz),fz2(mvsiz),
107 . mx1(mvsiz),my1(mvsiz),mz1(mvsiz),
108 . mx2(mvsiz),my2(mvsiz),mz2(mvsiz),gresav(*),
109 . msrt(*), dmelrt(*)
110 DOUBLE PRECISION XDP(3,*)
111 TYPE(ttable) TABLE(*)
112C
113 TYPE (ELBUF_STRUCT_), TARGET :: ELBUF_STR
114 TYPE(H3D_DATABASE) :: H3D_DATA
115 TYPE (SENSOR_STR_) ,DIMENSION(NSENSOR) , INTENT(IN) :: SENSOR_TAB
116C-----------------------------------------------
117C L o c a l V a r i a b l e s
118C-----------------------------------------------
119 INTEGER NGL(MVSIZ),PID(MVSIZ),NC1(MVSIZ),NC2(MVSIZ),NC3(MVSIZ),
120 . MID(MVSIZ)
121C REAL
122 my_real
123 . STI(3,MVSIZ),STIR(3,MVSIZ),VISI(MVSIZ),VISIR(MVSIZ),
124 . USTI(MVSIZ),USTIR(MVSIZ),DF(MVSIZ),AL(MVSIZ),UNUSED(MVSIZ),
125 . UINER(MVSIZ),FR_W_E(MVSIZ),OFF(MVSIZ),BID
126 my_real
127 . exx2(mvsiz), eyx2(mvsiz), ezx2(mvsiz),
128 . exy2(mvsiz), eyy2(mvsiz), ezy2(mvsiz),
129 . exz2(mvsiz), eyz2(mvsiz), ezz2(mvsiz),
130 . al2(mvsiz),x1(mvsiz),y1(mvsiz),z1(mvsiz),
131 . x2(mvsiz),y2(mvsiz),z2(mvsiz),x3(mvsiz),y3(mvsiz),z3(mvsiz),
132 . ex(mvsiz),ey(mvsiz),ez(mvsiz),
133 . exx(mvsiz),eyx(mvsiz),ezx(mvsiz),
134 . exy(mvsiz),eyy(mvsiz),ezy(mvsiz),
135 . exz(mvsiz),eyz(mvsiz),ezz(mvsiz),
136 . xcr(mvsiz),xk(mvsiz),xm(mvsiz),xc(mvsiz),rx1(mvsiz),rx2(mvsiz),
137 . ry1(mvsiz),ry2(mvsiz),rz1(mvsiz),rz2(mvsiz),xin(mvsiz),
138 . ak(mvsiz),xkm(mvsiz),xcm(mvsiz),xkr(mvsiz),
139 . ex2(mvsiz),ey2(mvsiz),ez2(mvsiz),vx1(mvsiz),vx2(mvsiz),
140 . vy1(mvsiz),vy2(mvsiz),vz1(mvsiz),vz2(mvsiz),vx3(mvsiz),
141 . vy3(mvsiz),vz3(mvsiz)
142 INTEGER IGTYP,I,I0,NUVAR,IADBUF
143 double precision
144 . x1dp(3,mvsiz),x2dp(3,mvsiz),x3dp(3,mvsiz),
145 . elx(3,mvsiz),al2dp(mvsiz),aldp(mvsiz)
146C-----------------------------------------------
147 TYPE(g_bufel_),POINTER :: GBUF
148 INTEGER II(9)
149C=======================================================================
150 GBUF => elbuf_str%GBUF
151!
152 fx1(1:mvsiz) = zero
153 fx2(1:mvsiz) = zero
154 fy1(1:mvsiz) = zero
155 fy2(1:mvsiz) = zero
156 fz1(1:mvsiz) = zero
157 fz2(1:mvsiz) = zero
158 mx1(1:mvsiz) = zero
159 mx2(1:mvsiz) = zero
160 my1(1:mvsiz) = zero
161 my2(1:mvsiz) = zero
162 mz1(1:mvsiz) = zero
163 mz2(1:mvsiz) = zero
164!
165 DO i=1,9
166 ii(i) = (i-1)*nel + 1
167 ENDDO
168C
169 i0 = ixr(1,1)
170 igtyp = igeo(11,i0)
171C
172 bid = zero
173C
174 fr_w_e(1:nel) = zero
175C=======================================================================
176C=======================================================================
177 CALL r23coor3(
178 1 x, vr, ixr, xdp,
179 2 x1dp, x2dp, ngl, x1,
180 3 y1, z1, x2, y2,
181 4 z2, pid, mid, rx1,
182 5 ry1, rz1, rx2, ry2,
183 6 rz2, nc1, nc2, nel)
184 CALL r23sens3(
185 1 geo, gbuf%OFF, sensor_tab, gbuf%TOTDEPL(ii(1)),
186 2 gbuf%TOTDEPL(ii(2)),gbuf%TOTDEPL(ii(3)),gbuf%LENGTH(ii(1)), gbuf%LENGTH(ii(2)),
187 3 gbuf%LENGTH(ii(3)), gbuf%TOTROT(ii(1)), gbuf%TOTROT(ii(2)), gbuf%TOTROT(ii(3)),
188 4 igeo, pid, nel, nsensor )
189C
190 DO i=jft,jlt
191 IF (gbuf%OFF(i) /= -ten) THEN
192 off(i)=min(one,abs(gbuf%OFF(i)))
193 ELSE
194C spring may be activated by sensor and is actually inactive.
195 off(i)=zero
196 ENDIF
197 ENDDO
198C
199 CALL r4evec3(
200 1 gbuf%SKEW, v, exx2, eyx2,
201 2 ezx2, exy2, eyy2, ezy2,
202 3 exz2, eyz2, ezz2, al2dp,
203 4 x1dp, x2dp, al2, aldp,
204 5 gbuf%SKEW_ERR,ngl, al, exx,
205 6 eyx, ezx, exy, eyy,
206 7 ezy, exz, eyz, ezz,
207 8 rx1, ry1, rz1, rx2,
208 9 ry2, rz2, vx1, vx2,
209 a vy1, vy2, vz1, vz2,
210 b nc1, nc2, nel)
211C
212C
213 IF (nslipring > 0) THEN
214 CALL r23_114_coor3(
215 1 x, v, ixr, xdp,
216 2 x3dp, nc3, vx3, vy3,
217 3 vz3, nel)
218 ENDIF
219C
220 nuvar = nint(geo(25,i0)) !! from Mid
221 DO i=jft,jlt
222 mid(i) = ixr(5,i)
223 iadbuf = ipm(7,mid(i)) - 1
224 nuvar = max(nuvar, nint(bufmat(iadbuf + 4)))
225 ENDDO
226!! is like r4def3 (spring type113)
227 CALL r23l114def3(python,
228 1 skew, ipm, igeo, mid,
229 2 pid, geo, bufmat, gbuf%FOR(ii(1)),
230 3 gbuf%FOR(ii(2)), gbuf%FOR(ii(3)), gbuf%EINT, gbuf%TOTDEPL(ii(1)),
231 4 gbuf%TOTDEPL(ii(2)), gbuf%TOTDEPL(ii(3)), npf, tf,
232 5 off, gbuf%DEP_IN_TENS(ii(1)),gbuf%DEP_IN_TENS(ii(2)),gbuf%DEP_IN_TENS(ii(3)),
233 6 gbuf%DEP_IN_COMP(ii(1)),gbuf%DEP_IN_COMP(ii(2)),gbuf%DEP_IN_COMP(ii(3)),gbuf%FOREP(ii(1)),
234 7 gbuf%FOREP(ii(2)), gbuf%FOREP(ii(3)), gbuf%LENGTH(ii(1)), gbuf%LENGTH(ii(2)),
235 8 gbuf%LENGTH(ii(3)), gbuf%MOM(ii(1)), gbuf%MOM(ii(2)), gbuf%MOM(ii(3)),
236 9 gbuf%TOTROT(ii(1)), gbuf%TOTROT(ii(2)), gbuf%TOTROT(ii(3)), gbuf%ROT_IN_TENS(ii(1)),
237 a gbuf%ROT_IN_TENS(ii(2)),gbuf%ROT_IN_TENS(ii(3)),gbuf%MOMEP(ii(1)), gbuf%MOMEP(ii(2)),
238 b gbuf%MOMEP(ii(3)), gbuf%ROT_IN_COMP(ii(1)),gbuf%ROT_IN_COMP(ii(2)),gbuf%ROT_IN_COMP(ii(3)),
239 c anim, gbuf%POSX, gbuf%POSY, gbuf%POSZ,
240 d gbuf%POSXX, gbuf%POSYY, gbuf%POSZZ, fr_wave,
241 e gbuf%E6, nel, exx2, eyx2,
242 f ezx2, exy2, eyy2, ezy2,
243 g exz2, eyz2, ezz2, al2dp,
244 h ngl, gbuf%RUPTCRIT, gbuf%LENGTH_ERR, aldp,
245 i gbuf%YIELD(ii(1)), gbuf%YIELD(ii(2)), gbuf%YIELD(ii(3)), gbuf%YIELD(ii(4)),
246 j gbuf%YIELD(ii(5)), gbuf%YIELD(ii(6)), exx, eyx,
247 k ezx, exy, eyy, ezy,
248 l exz, eyz, ezz, xcr,
249 m rx1, ry1, rz1, rx2,
250 n ry2, rz2, xin, ak,
251 o xm, xkm, xcm, xkr,
252 p vx1, vx2, vy1, vy2,
253 q vz1, vz2, nuvar, gbuf%VAR,
254 r gbuf%MASS, gbuf%DEFINI(ii(1)), gbuf%DEFINI(ii(2)), gbuf%DEFINI(ii(3)),
255 s gbuf%DEFINI(ii(4)), gbuf%DEFINI(ii(5)), gbuf%DEFINI(ii(6)), gbuf%SLIPRING_STRAND,
256 t gbuf%DFS, gbuf%RINGSLIP, gbuf%LENGTH(ii(2)), gbuf%LENGTH(ii(3)),
257 u gbuf%SLIPRING_ID, gbuf%UPDATE, gbuf%RETRACTOR_ID, gbuf%ADD_NODE(1),
258 v gbuf%ADD_NODE(nel+1), nc1, nc2, nc3,
259 w x1dp, x2dp, x3dp, vx3,
260 x vy3, vz3, flag_slipring_update, flag_retractor_update,
261 y sensor_tab, gbuf%INTVAR(ii(1)), gbuf%SLIPRING_FRAM_ID, gbuf%FRAM_FACTOR,
262 z gbuf%INTVAR(ii(2)), gbuf%INTVAR(ii(3)), gbuf%INTVAR(ii(4)), gbuf%INTVAR(ii(5)),
263 1 gbuf%INTVAR(ii(6)), gbuf%INTVAR(ii(7)), gbuf%INTVAR(ii(8)), gbuf%INTVAR(ii(9)),
264 2 nft , nsensor, stf, sanin,
265 3 iresp, snpc)
266C
267 DO i=jft,jlt
268 IF (gbuf%UPDATE(i) == -1) THEN
269 gbuf%OFF(i) = off(i)
270 gbuf%UPDATE(i) = 0
271 ELSEIF (gbuf%OFF(i) /= -ten .AND. off(i) < one) THEN
272 gbuf%OFF(i) = off(i)
273 ENDIF
274 ENDDO
275C
276 CALL r2len3(
277 1 jft, jlt, gbuf%OFF, dt2t,
278 2 neltst, ityptst, sti, stir,
279 3 ms, in, msrt, dmelrt,
280 4 gbuf%G_DT,gbuf%DT, ngl, xcr,
281 5 xin, xm, xkm, xcm,
282 6 xkr, nc1, nc2, jsms)
283 CALL r23bilan(
284 1 gbuf%EINT,partsav, ixr, geo,
285 2 v, ipartr, gbuf%MASS,gresav,
286 3 grth, igrth, gbuf%OFF, nc1,
287 4 nc2, x, vr, nel,
288 5 igre)
289 CALL r4tors(
290 1 gbuf%FOR(ii(1)),gbuf%FOR(ii(2)),gbuf%FOR(ii(3)),gbuf%MOM(ii(1)),
291 2 gbuf%MOM(ii(2)),gbuf%MOM(ii(3)),tani, al,
292 3 h3d_data, nel)
293 IF (iparit == 0) THEN
294 CALL r4cum3(
295 1 f, gbuf%FOR(ii(1)),gbuf%FOR(ii(2)),gbuf%FOR(ii(3)),
296 2 ar, gbuf%MOM(ii(1)),gbuf%MOM(ii(2)),gbuf%MOM(ii(3)),
297 3 sti, stir, stifn, stifr,
298 4 fx1, fx2, fy1, fy2,
299 5 fz1, fz2, mx1, mx2,
300 6 my1, my2, mz1, mz2,
301 7 al, exx, eyx, ezx,
302 8 exy, eyy, ezy, exz,
303 9 eyz, ezz, nc1, nc2,
304 a nel)
305 ELSE
306 CALL r4cum3p(
307 1 gbuf%FOR(ii(1)),gbuf%FOR(ii(2)),gbuf%FOR(ii(3)),gbuf%MOM(ii(1)),
308 2 gbuf%MOM(ii(2)),gbuf%MOM(ii(3)),sti, stir,
309 3 fsky, fsky, iadr, fx1,
310 4 fx2, fy1, fy2, fz1,
311 5 fz2, mx1, mx2, my1,
312 6 my2, mz1, mz2, exx,
313 7 eyx, ezx, exy, eyy,
314 8 ezy, exz, eyz, ezz,
315 9 al, nel, nft)
316 ENDIF
317C-----------------------------------------------
318 RETURN
319 END SUBROUTINE r23law114
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
subroutine r23_114_coor3(x, v, ixr, xdp, x3dp, nc3, vx3, vy3, vz3, nel)
subroutine r23bilan(eint, partsav, ixr, geo, v, ipartr, mass, gresav, grth, igrth, off_dum, nc1, nc2, x, vr, nel, igre)
Definition r23bilan.F:38
subroutine r23coor3(x, vr, ixr, xdp, x1dp, x2dp, ngl, x1, y1, z1, x2, y2, z2, pid, mat, rx1, ry1, rz1, rx2, ry2, rz2, nc1, nc2, nel)
Definition r23coor3.F:37
subroutine r23l114def3(python, skew, ipm, igeo, mid, pid, geo, uparam, fx, fy, fz, e, dx, dy, dz, npf, tf, off, dpx, dpy, dpz, dpx2, dpy2, dpz2, fxep, fyep, fzep, x0, y0, z0, xmom, ymom, zmom, rx, ry, rz, rpx, rpy, rpz, xmep, ymep, zmep, rpx2, rpy2, rpz2, anim, posx, posy, posz, posxx, posyy, poszz, fr_wave, e6, nel, exx2, eyx2, ezx2, exy2, eyy2, ezy2, exz2, eyz2, ezz2, al2dp, ngl, crit_new, x0_err, aldp, yieldx, yieldy, yieldz, yieldx2, yieldy2, yieldz2, exx, eyx, ezx, exy, eyy, ezy, exz, eyz, ezz, xcr, rx1, ry1, rz1, rx2, ry2, rz2, xin, ak, xm, xkm, xcm, xkr, vx1, vx2, vy1, vy2, vz1, vz2, nuvar, uvar, mass, dx0, dy0, dz0, rx0, ry0, rz0, slipring_strand, dfs, ring_slip, x02, lmin, slipring_id, update_flag, retractor_id, add_node1, add_node2, nc1, nc2, nc3, x1dp, x2dp, x3dp, vx3, vy3, vz3, flag_slipring_update, flag_retractor_update, sensor_tab, uiner, fr_id, fram_factor, eps_old, fx_b2, dpx_b2, yieldx_b2, xx_old_b2, fxep_b2, posx_b2, eps_old_b2, nft, nsensor, stf, sanin, iresp, snpc)
Definition r23l114def3.F:78
subroutine r23law114(python, elbuf_str, jft, jlt, nel, mtn, igeo, geo, ipm, ixr, x, table, xdp, f, npf, tf, skew, flg_kj2, vr, ar, v, dt2t, neltst, ityptst, stifn, stifr, ms, in, fsky, iadr, sensor_tab, offset, anim, partsav, ipartr, tani, fr_wave, bufmat, bufgeo, pm, rby, fx1, fx2, fy1, fy2, fz1, fz2, mx1, mx2, my1, my2, mz1, mz2, gresav, grth, igrth, msrt, dmelrt, flag_slipring_update, flag_retractor_update, h3d_data, jsms, igre, nft, nsensor, stf, sanin, iresp, snpc)
Definition r23law114.F:63
subroutine r23sens3(geo, off, sensor_tab, dx, dy, dz, x0, y0, z0, rx, ry, rz, igeo, pid, nel, nsensor)
Definition r23sens3.F:37
subroutine r2len3(jft, jlt, off, dt2t, neltst, ityptst, sti, stir, ms, in, msrt, dmelrt, g_dt, dtel, ngl, xcr, xin, xm, xkm, xcm, xkr, nc1, nc2, jsms)
Definition r2len3.F:38
subroutine r4cum3(f, forx, fory, forz, xm, xmom, ymom, zmom, sti, stir, stifn, stifr, fx1, fx2, fy1, fy2, fz1, fz2, mx1, mx2, my1, my2, mz1, mz2, al, exx, eyx, ezx, exy, eyy, ezy, exz, eyz, ezz, nc1, nc2, nel)
Definition r4cum3.F:41
subroutine r4cum3p(forx, fory, forz, xmom, ymom, zmom, sti, stir, fsky, fskyv, iadr, fx1, fx2, fy1, fy2, fz1, fz2, mx1, mx2, my1, my2, mz1, mz2, exx, eyx, ezx, exy, eyy, ezy, exz, eyz, ezz, al, nel, nft)
Definition r4cum3p.F:40
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
subroutine r4tors(forx, fory, forz, xmom, ymom, zmom, tani, al, h3d_data, nel)
Definition r4tors.F:36