OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
cdt3.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!|| cdt3 ../engine/source/elements/shell/coque/cdt3.F
25!||--- called by ------------------------------------------------------
26!|| cforc3 ../engine/source/elements/shell/coque/cforc3.F
27!|| cforc3_crk ../engine/source/elements/xfem/cforc3_crk.F
28!||--- uses -----------------------------------------------------
29!|| element_mod ../common_source/modules/elements/element_mod.F90
30!||====================================================================
31 SUBROUTINE cdt3(JFT ,JLT ,YM ,OFF ,DT2T,
32 2 NELTST,ITYPTST,STI ,STIR ,OFFG,
33 3 DTC ,NDT ,DT2C ,IXC ,SSP ,
34 4 VISCMX,PX1 ,PX2 ,PY1 ,PY2 ,
35 5 VOL0 ,VOL00 ,RHO ,ALDT ,ALPE,
36 6 INDXOF,NGL ,ISMSTR,IOFC,MSC ,
37 7 DMELC ,JSMS ,G_DT ,DTEL)
38 use element_mod , only : nixc
39C-----------------------------------------------
40C I m p l i c i t T y p e s
41C-----------------------------------------------
42#include "implicit_f.inc"
43#include "comlock.inc"
44C-----------------------------------------------
45C G l o b a l P a r a m e t e r s
46C-----------------------------------------------
47#include "mvsiz_p.inc"
48C-----------------------------------------------
49C C o m m o n B l o c k s
50C-----------------------------------------------
51#include "com01_c.inc"
52#include "com08_c.inc"
53#include "scr02_c.inc"
54#include "scr07_c.inc"
55#include "scr17_c.inc"
56#include "scr18_c.inc"
57#include "sms_c.inc"
58#include "units_c.inc"
59C-----------------------------------------------
60C D u m m y A r g u m e n t s
61C-----------------------------------------------
62 INTEGER NDT(*),IXC(NIXC,*),INDXOF(MVSIZ),NGL(MVSIZ),
63 . JFT, JLT,NELTST,ITYPTST,NINDX,ISMSTR,IOFC, JSMS
64 my_real
65 . YM(*), OFF(*),STI(*),STIR(*),OFFG(*),DTC(*),
66 . SSP(*), DT2C(*),VISCMX(*),VOL0(*),VOL00(*),
67 . PX1(*), PX2(*), PY1(*), PY2(*), RHO(*), ALDT(*), ALPE(*),
68 . dt2t,
69 . msc(*), dmelc(*)
70 my_real,INTENT(INOUT) :: dtel(jft:jlt)
71 INTEGER,INTENT(IN) :: G_DT
72C-----------------------------------------------
73C L o c a l V a r i a b l e s
74C-----------------------------------------------
75 INTEGER J, I, IDT
76 my_real
77 . dt(mvsiz)
78 my_real divm,mas
79C=======================================================================
80 IF(idtmins == 2 .AND. jsms /= 0)THEN
81 DO i=jft,jlt
82 IF(offg(i) < zero .OR. off(i) == zero) cycle
83c
84c dmelc = 2*dmelc !!
85c w^2 < 2k / (m+dmelc+dmelc/3) < 2k / (m+dmelc)
86c dt = 2/w = sqrt( 2*(m+dmelc)/k)
87 dmelc(i)=max(dmelc(i),
88 . (dtmins/dtfacs)**2 * sti(i) - two*msc(i))
89 dt(i) = dtfacs*
90 . sqrt((two*msc(i)+dmelc(i))/max(em20,sti(i)))
91 IF(dt(i)<dt2t)THEN
92 dt2t = dt(i)
93 neltst = ngl(i)
94 ityptst = 3
95 END IF
96 END DO
97C
98 IF(idtmin(3)/=0)THEN
99 DO i=jft,jlt
100 mas = vol00(i)*rho(i)
101 dt(i) = dtfac1(3)*sqrt(half*mas/max(em20,sti(i)))
102 ENDDO
103 END IF
104C
105 ELSEIF(idt1sh==1.OR.idtmins==2)THEN
106 DO i=jft,jlt
107 mas = vol00(i)*rho(i)
108 dt(i) = dtfac1(3)*sqrt(half*mas/max(em20,sti(i)))
109 ENDDO
110 ELSE
111 DO i=jft,jlt
112 aldt(i)=aldt(i)*viscmx(i)
113 . / sqrt(alpe(i))
114 dt(i)=dtfac1(3)*aldt(i)/ssp(i)
115 ENDDO
116 ENDIF
117
118C------------------------------
119 IF(nodadt == 0)THEN
120 IF(idtmin(3) == 0)RETURN
121 ENDIF
122C------------------------------
123 IF(g_dt /= zero)THEN
124 DO i=jft,jlt
125 dtel(i) = dt(i)
126 ENDDO
127 ENDIF
128C------------------------------
129 IF(idtmin(3) == 1)THEN
130 nindx=iofc
131 DO i=jft,jlt
132 IF(dt(i) > dtmin1(3) .OR. off(i) < one .OR. offg(i) == two .OR. offg(i) < zero) cycle
133 nindx=nindx+1
134 indxof(nindx)=i
135 ENDDO
136C
137 DO j=iofc+1,nindx
138 i = indxof(j)
139 tstop = tt
140#include "lockon.inc"
141 WRITE(iout,1000) ngl(i)
142 WRITE(istdo,1000) ngl(i)
143#include "lockoff.inc"
144 ENDDO
145 nindx=iofc
146 ELSEIF(idtmin(3)==2)THEN
147 nindx=iofc
148 DO i=jft,jlt
149 IF(dt(i)>dtmin1(3).OR.off(i)<one .OR.offg(i)<zero) cycle
150 nindx=nindx+1
151 indxof(nindx)=i
152 ENDDO
153C
154 DO j=iofc+1,nindx
155 i = indxof(j)
156 off(i)=0.
157 idel7nok = 1
158#include "lockon.inc"
159 WRITE(iout,1200) ngl(i)
160 WRITE(istdo,1300) ngl(i),tt
161#include "lockoff.inc"
162 ENDDO
163 iofc = nindx
164 ELSEIF(idtmin(3)==3.AND.ismstr==2)THEN
165 nindx=iofc
166 DO i=jft,jlt
167 IF(dt(i)>dtmin1(3).OR.off(i)<one.OR.offg(i)==two.OR.offg(i)<zero)cycle
168 nindx=nindx+1
169 indxof(nindx)=i
170 ENDDO
171C
172 DO j=iofc+1,nindx
173 i = indxof(j)
174 offg(i)=2.
175#include "lockon.inc"
176 WRITE(iout,1400) ngl(i)
177 WRITE(istdo,1400) ngl(i)
178#include "lockoff.inc"
179 ENDDO
180 nindx=iofc
181 ELSEIF(idtmin(3)==5)THEN
182 nindx=iofc
183 DO i=jft,jlt
184 IF(dt(i)>dtmin1(3).OR.off(i)<one.OR.offg(i)==two.OR.offg(i)<zero)cycle
185 nindx=nindx+1
186 indxof(nindx)=i
187 ENDDO
188C
189 DO j=iofc+1,nindx
190 i = indxof(j)
191 mstop = 2
192#include "lockon.inc"
193 WRITE(iout,1000) ngl(i)
194 WRITE(istdo,1000) ngl(i)
195#include "lockoff.inc"
196 ENDDO
197 nindx=iofc
198 ENDIF
199C
200 IF (nodadt/=0.OR.(idtmins==2.AND.jsms/=0)) RETURN
201C-------------------------------------------------------------------
202C- VECTOR
203 idt=0
204 DO i=jft,jlt
205 IF(offg(i)>zero.AND.off(i)/=zero.AND.dt(i)<dt2t)idt=1
206 ENDDO
207C- NON VECTOR
208 IF(idt==1)THEN
209 DO i=jft,jlt
210 IF(offg(i)>zero.AND.off(i)/=zero.AND.dt(i)<dt2t)THEN
211 dt2t = dt(i)
212 neltst = ngl(i)
213 ityptst = 3
214 ENDIF
215 ENDDO
216 ENDIF
217C
218 IF (idtmins==2) RETURN
219C-------------------------------------------------------------------
220 IF(idt1sh==1)THEN
221 DO i=jft,jlt
222 sti(i) = sti(i) * off(i)
223 stir(i)= zero
224 ENDDO
225 ELSE
226 DO i=jft,jlt
227 divm=max(aldt(i)*aldt(i),em20)
228 sti(i) = half * vol0(i) * ym(i) / divm
229 sti(i) = zep81 * sti(i) * off(i)
230 stir(i)= zero
231 ENDDO
232 ENDIF
233C-------------------------------------------------------------------
234 1000 FORMAT(1x,'-- MINIMUM TIME STEP SHELL ELEMENT NUMBER ',i10)
235 1200 FORMAT(1x,'-- DELETE OF SHELL ELEMENT NUMBER ',i10)
236 1300 FORMAT(1x,'-- DELETE OF SHELL ELEMENT :',i10,' AT TIME :',g11.4)
237 1400 FORMAT(1x,'-- CONSTANT TIME STEP FOR SHELL ELEMENT NUMBER ',i10)
238C-------------------------------------------------------------------
239 RETURN
240 END
subroutine cdt3(jft, jlt, ym, off, dt2t, neltst, ityptst, sti, stir, offg, dtc, ndt, dt2c, ixc, ssp, viscmx, px1, px2, py1, py2, vol0, vol00, rho, aldt, alpe, indxof, ngl, ismstr, iofc, msc, dmelc, jsms, g_dt, dtel)
Definition cdt3.F:38
subroutine dtel(ssp, pm, geo, pid, mat, rho0, vis, deltax, aire, vol, dtx)
Definition dtel.F:46
#define max(a, b)
Definition macros.h:21