32 2 MAT, NGL, NELTST, ITYPTST,
33 3 DT2T, UVAR, SSP, OFF,
34 4 OFFG, AIRE, DELTAX, VIS,
35 5 VD2, QVIS, ITY, ISMSTR)
44#include "implicit_f.inc"
67 INTEGER,
INTENT(IN) :: ITY
68 INTEGER,
INTENT(IN) :: ISMSTR
70 INTEGER NELTST,,PID(*),MAT(*),NEL,(*)
72 my_real pm(npropm,nummat),
73 . geo(npropg,numgeo),deltax(*),ssp(*),
74 . aire(*),qvis(*),vis(*),uvar(nel,*),off(*),vd2(*),offg(*)
78 INTEGER I,J, MT, K,ICOUNT,LIST(MVSIZ),ERROR, ALE_OR_EULER
80 . DTX(MVSIZ), AD(MVSIZ), QX(MVSIZ), CX(MVSIZ),SSP_EQ(MVSIZ),
81 . RHO0(MVSIZ),DTMIN(MVSIZ),QA, QB, VISI, FACQ,QAA,
82 . CNS1, CNS2, SPH, AK1, BK1, AK2, BK2,
83 . tli, akk, xmu, tmu, rpr,
84 . atu, qad, qbd, qaap,dd
85 my_real tidt,tvol,trho,taire, dtinv
91 IF(nint(pm(72,mt))==1 .OR. nint(pm(72,mt))==2)ale_or_euler = 1
92 IF(
ale%GLOBAL%I_DT_NODA_ALE_ON==1)ale_or_euler = 0
94 dtinv = dt1 /
max(em20 , dt1**2)
99 cx(i)=ssp(i)+sqrt(vd2(i))
120 al(i)=uvar(i,3)**third
129 qa =facq*geo(14,pid(i))
130 qb =facq*geo(15,pid(i))
132 cns2=geo(17,pid(i))*ssp(i)*al(i)*uvar(i,1)
134 qx(i)=(qb+cns1)*ssp(i)+deltax(i) * qaa + visi*(two*vis(i)+cns2) /
max(em20,uvar(i,1)*deltax(i))
135 qvis(i)=uvar(i,1)*ad(i)*al(i)*(qaa*al(i)+qb*ssp(i))
136 dtmin(i) = geo(172,pid(i))
140 ssp_eq(i) =
max(em20,qx(i)+sqrt(qx(i)*qx(i)+cx(i)*cx(i)))
141 dtx(i) = deltax(i) / ssp_eq(i)
145 IF(kdtsmstr==1.AND.ismstr==1.OR.(ismstr==2.AND.idtmin(1)==3))
THEN
147 IF(off(i)==zero.OR.offg(i)<zero)
GO TO 50
151 trho = rho0(i) * tidt
154 tvol = uvar(i,3) * tidt
160 trho = uvar(i,1) * tidt
161 taire = aire(i) * tidt
165 IF(ale_or_euler==0)
THEN
167 dtx(i)= dtfac1(ity)*dtx(i)
171 dtx(i)= dtfac1(102)*dtx(i)
175 IF(ale_or_euler==1 .OR. nodadt==0)
THEN
177 IF(off(i)/=zero.AND.offg(i)>=zero)dt2t =
min(dtx(i),dt2t)
182 IF(off(i)==zero.OR.offg(i)<zero)
GO TO 60
185 trho = uvar(i,1) * tidt
186 tvol = uvar(i,3) * tidt
190 trho = uvar(i,1) * tidt
191 taire = aire(i) * tidt
195 IF(ale_or_euler==0)
THEN
197 dtx(i)= dtfac1(ity)*dtx(i)
201 dtx(i)= dtfac1(102)*dtx(i)
205 IF(ale_or_euler.eq .1.OR. nodadt==0)
THEN
207 IF(off(i)/=zero.AND.offg(i)>=zero)dt2t =
min(dtx(i),dt2t)
213 IF(idtmin(ity)==1)
THEN
216 IF(dtx(i)>dtmin1(ity).OR.off(i)==zero .OR.offg(i)<zero)
GO TO 70
223 WRITE(iout,*)
' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SOLID ELEMENTS'
224 WRITE(istdo,*)
' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SOLID ELEMENTS'
225#include "lockoff.inc"
227 ELSEIF(idtmin(ity)==2)
THEN
230 IF(dtx(i)>dtmin1(ity).OR.off(i)==zero.OR.offg(i)<zero)
GO TO 75
239 WRITE(iout,*)
' -- DELETE SOLID ELEMENTS',ngl(i)
240 WRITE(istdo,*)
' -- DELETE SOLID ELEMENTS',ngl(i)
241#include "lockoff.inc"
244 ELSEIF(idtmin(ity)==3.AND.ismstr==2)
THEN
248 IF(dtx(i)>dtmin(i).OR.off(i)<one.OR.offg(i)<=zero.OR.offg(i)==two)
GO TO 76
250 IF(dtx(i)>dtmin1(ity).OR.off(i)<one.OR.offg(i)<=zero.OR.offg(i)==two)
GO TO 76
260 WRITE(iout,*)
'-- CONSTANT TIME STEP FOR SOLID ELEMENT NUMBER ',ngl(i)
261 WRITE(istdo,*)
'-- CONSTANT TIME STEP FOR SOLID ELEMENT NUMBER ',ngl(i)
262#include "lockoff.inc"
264 ELSEIF(idtmin(ity)==5)
THEN
267 IF(dtx(i)>dtmin1(ity).OR.off(i)==zero.
268 . or.offg(i)<zero)
GO TO 570
274 WRITE(iout,*)
' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SOLID ELEMENTS'
275 WRITE(istdo,*)
' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SOLID ELEMENTS'
276#include "lockoff.inc"
282 IF(nodadt==0 .OR. ale_or_euler==1)
THEN
284 IF(dtx(i)>dt2t.OR.off(i)<=zero.OR.offg(i)<=zero)
GO TO 80
subroutine fmqviscb(nel, pm, geo, pid, mat, ngl, neltst, ityptst, dt2t, uvar, ssp, off, offg, aire, deltax, vis, vd2, qvis, ity, ismstr)