OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
r2len3.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!|| r2len3 ../engine/source/elements/spring/r2len3.F
25!||--- called by ------------------------------------------------------
26!|| r23law108 ../engine/source/elements/spring/r23law108.F
27!|| r23law113 ../engine/source/elements/spring/r23law113.F
28!|| r23law114 ../engine/source/elements/spring/r23law114.F
29!|| rforc3 ../engine/source/elements/spring/rforc3.F
30!||====================================================================
31 SUBROUTINE r2len3(
32 1 JFT, JLT, OFF, DT2T,
33 2 NELTST, ITYPTST, STI, STIR,
34 3 MS, IN, MSRT, DMELRT,
35 4 G_DT, DTEL, NGL, XCR,
36 5 XIN, XM, XKM, XCM,
37 6 XKR, NC1, NC2, JSMS)
38C-----------------------------------------------
39C I m p l i c i t T y p e s
40C-----------------------------------------------
41#include "implicit_f.inc"
42#include "comlock.inc"
43C-----------------------------------------------
44C G l o b a l P a r a m e t e r s
45C-----------------------------------------------
46#include "mvsiz_p.inc"
47C-----------------------------------------------
48C C o m m o n B l o c k s
49C-----------------------------------------------
50#include "com08_c.inc"
51#include "scr02_c.inc"
52#include "scr07_c.inc"
53#include "scr17_c.inc"
54#include "scr18_c.inc"
55#include "sms_c.inc"
56#include "units_c.inc"
57C-----------------------------------------------
58C D u m m y A r g u m e n t s
59C-----------------------------------------------
60 INTEGER, INTENT(IN) :: JSMS
61 INTEGER JFT,JLT,NELTST ,ITYPTST,NGL(*),NC1(*),NC2(*)
62 my_real DT2T,
63 . OFF(*), STI(3,*), STIR(3,*), MS(*), IN(*),
64 . MSRT(*), DMELRT(*),XCR(MVSIZ), XIN(MVSIZ),
65 . XM(MVSIZ),XKM(MVSIZ),XCM(MVSIZ),XKR(MVSIZ)
66 my_real,INTENT(INOUT) :: dtel(jft:jlt)
67 INTEGER,INTENT(IN) :: G_DT
68C-----------------------------------------------
69C L o c a l V a r i a b l e s
70C-----------------------------------------------
71 INTEGER I
72 my_real
73 . dt(mvsiz),dtc(mvsiz),
74 . a, mass2, in2, b, dta, dtb, mx
75C-----------------------------------------------
76 IF(nodadt/=0.OR.idtmins==2)THEN
77C
78 DO i=jft,jlt
79 sti(1,i) = zero
80 sti(2,i) = zero
81 stir(1,i) = zero
82 stir(2,i) = zero
83 IF(off(i)>zero)THEN
84 IF(ms(nc1(i))/=zero)THEN
85 mass2 = two * ms(nc1(i))
86 ELSE
87 mass2 = xm(i)
88 ENDIF
89 IF(xkm(i)/=zero.AND.xcm(i)/=zero.AND.
90 . mass2/=zero)THEN
91 sti(1,i) = (xcm(i) + sqrt(xcm(i)**2+xkm(i)*mass2))**2/mass2
92 ELSEIF(xkm(i)/=zero)THEN
93 sti(1,i) = xkm(i)
94 ELSEIF(xcm(i)/=zero.AND.mass2/=zero)THEN
95 a = four * xcm(i)**2
96 sti(1,i) = a / mass2
97 ENDIF
98C
99 IF(ms(nc2(i))/=zero)THEN
100 mass2 = two * ms(nc2(i))
101 ELSE
102 mass2 = xm(i)
103 ENDIF
104 IF(xkm(i)/=zero.AND.xcm(i)/=zero.AND.
105 . mass2/=zero)THEN
106 sti(2,i) = (xcm(i) + sqrt(xcm(i)**2+xkm(i)*mass2))**2/mass2
107 ELSEIF(xkm(i)/=zero)THEN
108 sti(2,i) = xkm(i)
109 ELSEIF(xcm(i)/=zero.AND.mass2/=zero)THEN
110 a = four * xcm(i)**2
111 sti(2,i) = a / mass2
112 ENDIF
113C
114 IF(in(nc1(i))/=zero)THEN
115 in2 = two * in(nc1(i))
116 ELSE
117 in2 = xin(i)
118 ENDIF
119 IF(xkr(i)/=zero.AND.xcr(i)/=zero.AND.
120 . in2/=zero)THEN
121 stir(1,i) = (xcr(i) + sqrt(xcr(i)**2+xkr(i)*in2))**2/in2
122 ELSEIF(xkr(i)/=zero)THEN
123 stir(1,i) = xkr(i)
124 ELSEIF(xcr(i)/=zero.AND.in2/=zero)THEN
125 a = four * xcr(i)**2
126 stir(1,i) = a / in2
127 ENDIF
128C
129 IF(in(nc2(i))/=zero)THEN
130 in2 = two * in(nc2(i))
131 ELSE
132 in2 = xin(i)
133 ENDIF
134 IF(xkr(i)/=zero.AND.xcr(i)/=zero.AND.
135 . in2/=zero)THEN
136 stir(2,i) = (xcr(i) + sqrt(xcr(i)**2+xkr(i)*in2))**2/in2
137 ELSEIF(xkr(i)/=zero)THEN
138 stir(2,i) = xkr(i)
139 ELSEIF(xcr(i)/=zero.AND.in2/=zero)THEN
140 a = four * xcr(i)**2
141 stir(2,i) = a / in2
142 ENDIF
143 ENDIF
144 ENDDO ! DO I=JFT,JLT
145C
146 IF(idtmin(6)==0.AND.(idtmins/=2.OR.jsms==0))RETURN
147C
148 IF(idtmins==2.AND.jsms/=0)THEN
149C
150C IDTMINS=2 & JSMS=1 <=> AMS & elementary time step
151C
152 dta=dtmins/dtfacs
153 dtb=dta*dta
154 DO i=jft,jlt
155 IF(off(i)<=zero) cycle
156 dmelrt(i)=max(dmelrt(i),
157 . xcm(i)*dta+half*xkm(i)*dtb-half*msrt(i))
158C
159C MX = 2*(Mn+2*DeltaM)
160 mx =msrt(i)+two*dmelrt(i)
161C
162 IF(xcm(i)+xkm(i)<em15)mx =one
163 xkm(i)= max(em15,xkm(i))
164
165 dt(i)=dtfacs*
166 . mx /max(em15,sqrt(xcm(i)*xcm(i)+mx*xkm(i))+xcm(i))
167 ENDDO
168C
169 DO i=jft,jlt
170 IF(off(i)<=zero) cycle
171 IF(dt(i)<dt2t) THEN
172 dt2t=dt(i)
173 neltst =ngl(i)
174 ityptst=6
175 ENDIF
176 ENDDO
177 ELSE
178C
179 DO i=jft,jlt
180 IF(xcm(i)+xkm(i)<em15)xm(i) =one
181 xkm(i)= max(em15,xkm(i))
182 dt(i)=xm(i)/max(em15,sqrt(xcm(i)*xcm(i)+xm(i)*xkm(i))+xcm(i))
183 IF(xcr(i)+xkr(i)<em15)xin(i)=one
184 xkr(i)= max(em15,xkr(i))
185 dtc(i)=xin(i)/max(em15,sqrt(xcr(i)*xcr(i)+xin(i)*xkr(i))+xcr(i))
186 dt(i)= min(dt(i),dtc(i))
187 ENDDO
188C
189 DO i=jft,jlt
190 IF(off(i)>zero)THEN
191 dt(i)=dtfac1(6)*dt(i)
192 IF(idtmin(6)==1.AND.dt(i)<dtmin1(6))THEN
193 tstop = tt
194#include "lockon.inc"
195 WRITE(iout,*)
196 . ' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SPRING ELEMENT'
197 WRITE(istdo,*)
198 . ' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SPRING ELEMENT'
199#include "lockoff.inc"
200 ELSEIF(idtmin(6)==5.AND.dt(i)<dtmin1(6))THEN
201 mstop = 2
202#include "lockon.inc"
203 WRITE(iout,*)
204 . ' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SPRING ELEMENT'
205 WRITE(istdo,*)
206 . ' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SPRING ELEMENT'
207#include "lockoff.inc"
208 ELSEIF(idtmin(6)==2.AND.dt(i)<dtmin1(6))THEN
209 off(i)=zero
210#include "lockon.inc"
211 WRITE(iout,*) '-- DELETE OF SPRING ELEMENT NUMBER',ngl(i)
212#include "lockoff.inc"
213 idel7nok = 1
214 ENDIF
215 ENDIF
216 ENDDO
217 END IF
218C
219 ELSE
220C
221 DO i=jft,jlt
222 IF(xcm(i)+xkm(i)<em15)xm(i) =one
223 xkm(i)= max(em15,xkm(i))
224 dt(i)=xm(i)/max(em15,sqrt(xcm(i)*xcm(i)+xm(i)*xkm(i))+xcm(i))
225 ENDDO
226C
227 DO i=jft,jlt
228 sti(1,i) = zero
229 sti(2,i) = zero
230 stir(1,i) = zero
231 stir(2,i) = zero
232 IF(off(i)>zero) THEN
233 sti(1,i) = xm(i) / dt(i)**2
234 sti(2,i) = sti(1,i)
235 ENDIF
236 ENDDO
237C
238 DO i=jft,jlt
239 IF(xcr(i)+xkr(i)<em15)xin(i)=one
240 xkr(i)= max(em15,xkr(i))
241 dtc(i)=xin(i)/max(em15,sqrt(xcr(i)*xcr(i)+xin(i)*xkr(i))+xcr(i))
242 dt(i)= min(dt(i),dtc(i))
243 ENDDO
244C
245 DO i=jft,jlt
246 IF(off(i)>zero)THEN
247 dt(i)=dtfac1(6)*dt(i)
248 IF(idtmin(6)==1.AND.dt(i)<dtmin1(6))THEN
249 tstop = tt
250#include "lockon.inc"
251 WRITE(iout,*)
252 . ' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SPRING ELEMENT'
253 WRITE(istdo,*)
254 . ' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SPRING ELEMENT'
255#include "lockoff.inc"
256 ELSEIF(idtmin(6)==5.AND.dt(i)<dtmin1(6))THEN
257 mstop = 2
258#include "lockon.inc"
259 WRITE(iout,*)
260 . ' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SPRING ELEMENT'
261 WRITE(istdo,*)
262 . ' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SPRING ELEMENT'
263#include "lockoff.inc"
264 ELSEIF(idtmin(6)==2.AND.dt(i)<dtmin1(6))THEN
265 off(i)=zero
266#include "lockon.inc"
267 WRITE(iout,*) '-- DELETE OF SPRING ELEMENT NUMBER',ngl(i)
268#include "lockoff.inc"
269 idel7nok = 1
270 ENDIF
271 IF(dt(i)<dt2t)THEN
272 dt2t=dt(i)
273 neltst =ngl(i)
274 ityptst=6
275 ENDIF
276 ENDIF
277 ENDDO
278 ENDIF
279C------------------------------
280 IF(g_dt/=0)THEN
281 DO i=jft,jlt
282 dtel(i) = dt(i)
283 ENDDO
284 ENDIF
285C------------------------------
286
287 RETURN
288C
289 END
subroutine dtel(ssp, pm, geo, pid, mat, rho0, vis, deltax, aire, vol, dtx)
Definition dtel.F:46
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
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