46 3 DT2T, NELTST, ITYPTST, AIRE,
47 4 OFFG, GEO, PID, VOL,
48 5 VD2, DELTAX, VIS, D1,
50 7 MAT, NGL, QVIS, SSP_EQ,
51 8 VOL0, MSSA, DMELS, IGEO,
52 9 FACQ0, CONDE, DTEL, G_DT,
53 A IPM, RHOREF, RHOSP, NEL,
54 B ITY, ISMSTR, JTUR, JTHE,
55 C JSMS, NPG , GLOB_THERM)
67#include "implicit_f.inc"
92 INTEGER,
INTENT(IN) :: NEL
93 INTEGER,
INTENT(IN) :: ITY
94 INTEGER,
INTENT(IN) :: ISMSTR
95 INTEGER,
INTENT(IN) :: JTUR
96 INTEGER,
INTENT(IN) :: JTHE
97 INTEGER,
INTENT(IN) :: JSMS,NPG
98 INTEGER NELTST,ITYPTST,PID(*),MAT(*), NGL(*),IGEO(NPROPGI,NUMGEO),G_DT,IPM(NPROPMI,NUMMAT)
100 my_real PM(NPROPM,NUMMAT), OFF(*), RHO(*), RK(*), TEMP(*), RE(*),STI(*),
101 . OFFG(*),GEO(NPROPG,NUMGEO),
102 . VOL(*), VD2(*), DELTAX(*), SSP(*), AIRE(*), VIS(*),
103 . PSH(*), PNEW(*),QVIS(*) ,SSP_EQ(*),CONDE(*),
104 . d1(*), d2(*), d3(*), vol0(*), mssa(*), dmels(*),facq0
105 my_real,
INTENT(IN) :: rhoref(mvsiz), rhosp(mvsiz)
106 my_real,
INTENT(INOUT) ::
dtel(mvsiz)
107 type (glob_therm_) ,
intent(inout) :: glob_therm
111 INTEGER I,J, MT, K,ICOUNT,LIST(MVSIZ),ERROR, ALE_OR_EULER, ID_MIN
112 my_real dd(mvsiz), al(mvsiz),
113 . dtx(mvsiz), ad(mvsiz), qx(mvsiz), cx(mvsiz), rho0(mvsiz), nrho(mvsiz),
114 . dty(mvsiz), qa, qb, visi, facq,qaa,
115 . cns1, cns2, sph, ak1, bk1, ak2, bk2, tli, akk, xmu, tmu, rpr,
116 . atu, qad, qbd, qaap, dt, nui
117 my_real tidt,tvol,trho,taire, dtmin(mvsiz), rhos(mvsiz),facpg
118 my_real :: cns1_0,cns2_0,qaa_0
120 my_real,
PARAMETER :: real_three = 3.0d0
121 my_real,
PARAMETER :: real_one = 1.0d0
123 my_real,
PARAMETER :: real_three = 3.0
124 my_real,
PARAMETER :: real_one = 1.0
132 IF(nint(pm(72,mt))==1 .OR. nint(pm(72,mt))==2)ale_or_euler = 1
133 IF(
ale%GLOBAL%I_DT_NODA_ALE_ON==1) ale_or_euler = 0
137 dd(i)=-d1(i)-d2(i)-d3(i)
140 cx(i)=ssp(i) + sqrt(vd2(i))
142 IF((impl_s>0.AND.idyna==0).OR.ismdisp>0)
THEN
156 dd(i)=-d1(i)-d2(i)-d3(i)
170 ad(i)=
max(zero,dd(i))
175 IF (facpg>one) facpg=facpg**(real_one/real_three)
179 al(i) = vol(i)**(real_one/real_three)
183 ad(i)=
max(zero,dd(i))
190 IF(.NOT.(idtmins==2.AND.jsms/=0))
THEN
194 nrho(i)=sqrt(rhoref(i)*rho0(i))
196 qa =facq*geo(14,pid(1))
197 qb =facq*geo(15,pid(1))
198 cns1_0=facpg*geo(16,pid(1))
199 cns2_0=facpg*geo(17,pid(1))
203 dtmin(1:nel) = geo(172,pid(1))
205 cns1=cns1_0*al(i)*nrho(i)*ssp(i)*off(i)
206 cns2=cns2_0*al(i)*nrho(i)*ssp(i)*off(i)
212 qx(i)=qb*ssp(i)+al(i) * qaa
213 . + visi*two*vis(i) /
max(em20,rho(i)*deltax(i))
214 . + (cns1+visi*cns2) /
max(em20,rhoref(i)*deltax(i))
215 qvis(i)=rho(i)*ad(i)*al(i)*(qaa*al(i)+qb*ssp(i))
221 nrho(i)=sqrt(rhoref(i)*rho0(i))
224 qa =facq*geo(14,pid(1))
225 qb =facq*geo(15,pid(1))
229 dtmin(1:nel) = geo(172,pid(1))
231 IF(geo(16,pid(1)) >= zero)
THEN
232 cns1_0=facpg*geo(16,pid(1))
233 cns2_0=facpg*geo(17,pid(1))
235 cns1=cns1_0*al(i)*nrho(i)*ssp(i)*off(i)
236 cns2=cns2_0*al(i)*nrho(i)*ssp(i)*off(i)
238 nui =rho(i)*al(i)*(qaa*al(i)+qb*ssp(i))
240 qx(i) =(nui + cns1+visi*(two*vis(i)+cns2))/
max(em20,rhoref(i)*deltax(i))
243 cns1_0=abs(geo(16,pid(1)))
244 cns2_0=abs(geo(17,pid(1)))
246 cns1=cns1_0*nrho(i)*ssp(i)**2*off(i)
247 cns2=cns2_0*nrho(i)*ssp(i)**2*off(i)
249 nui =rho(i)*al(i)*(qaa*al(i)+qb*ssp(i))
251 qx(i) =(nui + cns1+visi*(two*vis(i)+cns2))/
max(em20,rhoref(i)*deltax(i))
257 ssp_eq(i) =
max(em20,qx(i)+sqrt(qx(i)*qx(i)+cx(i)*cx(i)))
258 dtx(i) = deltax(i) / ssp_eq(i)
271 IF(dtx(i)<dt22_min)
THEN
295 xmu = rho(i)*pm(24,mt)
298 atu=rpr*tmu*rk(i)*rk(i)/(
max(em15,re(i)*vol(i))*xmu)
305 IF(.NOT.(idtmins==2.AND.jsms/=0))
THEN
306 IF(kdtsmstr==1.AND.ismstr==1.OR.
307 . ((ismstr==2.OR.ismstr==12).AND.idtmin(1)==3))
THEN
315 IF(off(i)==zero.OR.offg(i)<zero)
GO TO 50
316 IF(ipm(251,mt)/=0)
GO TO 50
320 trho = rho0(i) * tidt
321 tvol = vol0(i) * tidt
333 taire = aire(i) * tidt
334 sti(i) = half * trho * taire
338 IF(ale_or_euler==0)
THEN
340 dtx(i)= dtfac1(ity)*dtx(i)
344 dtx(i)= dtfac1(102)*dtx(i)
348 IF(ale_or_euler==1 .OR. nodadt==0)
THEN
350 IF(vol(i)>zero .AND. (off(i)/=zero.AND.offg(i)>=zero))dt2t=
min(dtx(i),dt2t)
355 IF(ismstr == 11)
THEN
359 IF(off(i)==zero.OR.offg(i)<zero) cycle
360 IF(ipm(251,mt)/=0) cycle
362 trho = rho0(i) * tidt
363 tvol = vol0(i) * tidt
369 IF(off(i)==zero.OR.offg(i)<zero) cycle
370 IF(ipm(251,mt)/=0) cycle
373 taire = aire(i) * tidt
374 sti(i) = half * trho * taire
380 IF(off(i)==zero.OR.offg(i)<zero)
GO TO 60
381 IF(ipm(251,mt)/=0)
GO TO 60
392 taire = aire(i) * tidt
393 sti(i) = half * trho * taire
398 IF(ale_or_euler==0)
THEN
400 dtx(i)= dtfac1(ity)*dtx(i)
404 dtx(i)= dtfac1(102)*dtx(i)
408 IF(ale_or_euler==1 .OR. nodadt==0)
THEN
410 IF(vol(i)>zero .AND. (off(i)/=zero.AND.offg(i)>=zero))dt2t=
min(dtx(i),dt2t)
418 dtx(i)= dtfac1(ity)*dtx(i)
423 IF(idtmin(ity)==1)
THEN
426 IF(dtx(i)>dtmin1(ity).OR.off(i)==zero.
427 . or.offg(i)<zero)
GO TO 70
434 IF(dtx(i)>dtmin1(ity).OR.off(i)==zero.
435 . or.offg(i)<zero) cycle
438 .
' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SOLID ELEMENT',
440#include "lockoff.inc"
444 .
' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SOLID ELEMENTS'
445#include "lockoff.inc"
447 ELSEIF(idtmin(ity)==2)
THEN
450 IF(dtmin(i)/=zero)
THEN
451 IF(dtx(i)>dtmin(i).OR.off(i)==zero.
452 . or.offg(i)<zero)
GO TO 75
454 IF(dtx(i)>dtmin1(ity).OR.off(i)==zero.
455 . or.offg(i)<zero)
GO TO 75
466 .
' -- DELETE SOLID ELEMENTS',ngl(i)
468 .
' -- DELETE SOLID ELEMENTS',ngl(i)
469#include "lockoff.inc"
472 ELSEIF(idtmin(ity)==3.AND.(ismstr==2.OR.ismstr==12))
THEN
475 IF(dtmin(i)/=zero)
THEN
476 IF(dtx(i)>dtmin(i).OR.
477 . off(i)<one.OR.offg(i)<=zero.OR.offg(i)==two)
GO TO 76
479 IF(dtx(i)>dtmin1(ity).OR.
480 . off(i)<one.OR.offg(i)<=zero.OR.offg(i)==two)
GO TO 76
491 .
'-- CONSTANT TIME STEP FOR SOLID ELEMENT NUMBER ',ngl(i)
493 .
'-- CONSTANT TIME STEP FOR SOLID ELEMENT NUMBER ',ngl(i)
494#include "lockoff.inc"
496 ELSEIF(idtmin(ity)==5)
THEN
499 IF(dtx(i)>dtmin1(ity).OR.off(i)==zero.
500 . or.offg(i)<zero)
GO TO 570
506 IF(dtx(i)>dtmin1(ity).OR.off(i)==zero.
507 . or.offg(i)<zero) cycle
510 .
' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SOLID ELEMENT',
512#include "lockoff.inc"
516 .
' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SOLID ELEMENTS'
517#include "lockoff.inc"
522 IF(idtmins == 2 .AND. jsms /= 0)
THEN
524 + ((ismstr==2.OR.ismstr==12).AND.idtmin(1)==3))
THEN
531 IF(off(i)==zero.OR.offg(i)<zero) cycle
532 IF(ipm(251,mt)/=0) cycle
537 trho = rho0(i) * tidt
538 tvol = vol0(i) * tidt
549 taire = aire(i) * tidt
550 sti(i) = half * trho * taire
556 dmels(i)=
max(dmels(i),
557 . two*mssa(i)*((dtmins/(dtfacs*dty(i)))**2 - one))
558 dtx(i)=dtfacs*sqrt(one+dmels(i)/(two*mssa(i)))*dty(i)
564 IF(off(i)==zero.OR.offg(i)<zero) cycle
565 IF(ipm(251,mt)/=0) cycle
577 taire = aire(i) * tidt
578 sti(i) = half * trho * taire
584 dmels(i)=
max(dmels(i),
585 . two*mssa(i)*((dtmins/(dtfacs*dty(i)))**2 - one))
586 dtx(i)=dtfacs*sqrt(one+dmels(i)/(two*mssa(i)))*dty(i)
593 IF(off(i)==zero.OR.offg(i)<zero) cycle
606 xmu = rho(i)*pm(24,mt)
609 atu=rpr*tmu*rk(i)*rk(i)/(
max(em15,re(i)*vol(i))*xmu)
612 dtx(i) =
min(dtx(i),dtfacs*half*deltax(i)*deltax(i)*
618 IF(nodadt==0 .OR. (idtmins == 2 .AND. jsms /= 0) .OR. ale_or_euler==1)
THEN
621 IF(dtx(i)>dt2t .OR. off(i)<=zero .OR. offg(i)<=zero) cycle
623 IF(vol(i)<=zero)cycle
629 IF(dt2t<dtmin1(102).AND.id_min>0)
THEN
631 print *,
"DT=",dt2t,dtmin1(102)
633 WRITE(iout,*)
' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR ALE/EULER CELL',ngl(id_min)
634 WRITE(istdo,*)
' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR ALE/EULER CELL',ngl(id_min)
635#include "lockoff.inc"
642 IF (jthe < 0 .AND. glob_therm%IDT_THERM == 1)
THEN
657 xmu = rho(i)*pm(24,mt)
660 atu = rpr*tmu*rk(i)*rk(i)/(
max(em15,re(i)*vol(i))*xmu)
663 akk = akk * glob_therm%THEACCFACT
664 dt = glob_therm%DTFACTHERM*half*deltax(i)*deltax(i)*sph/
max(akk,em20)
665 IF(dt< glob_therm%DT_THERM.AND.off(i)>zero.AND.offg(i)>zero) glob_therm%DT_THERM
666 conde(i) = four*vol(i)*akk/(deltax(i)*deltax(i))
667 conde(i) = conde(i)*off(i)
subroutine m46law(lft, llt, nft, mtn, pm, off, sig, eint, rho, qold, vol, uvar, bufmat, stifn, mat, ngl, nuvar, dt2t, neltst, rho0, ityptst, offg, jlag, geo, pid, ssp, aire, voln, vd2, deltax, vis, d1, d2, d3, pnew, psh, q, ssp_eq, wxx, wyy, wzz, ipm, mssa, dmels, dvol, sold1, sold2, sold3, sold4, sold5, sold6, conde, vol_avg, dtel, g_dt, nel, d4, d5, d6, rhoref, rhosp, ismstr, ity, jsms, jtur, jthe, npg, svis, glob_therm)
subroutine mmain(pm, elbuf_str, ix, nix, x, geo, iparg, nel, skew, bufmat, ipart, ipartel, nummat, matparam, imat, ipm, ngl, pid, npf, tf, mfxx, mfxy, mfxz, mfyx, mfyy, mfyz, mfzx, mfzy, mfzz, rx, ry, rz, sx, sy, sz, gama, voln, dvol, s1, s2, s3, s4, s5, s6, dxx, dyy, dzz, d4, d5, d6, wxx, wyy, wzz)
subroutine mqviscb(pm, off, rho, rk, temp, ssp, re, sti, dt2t, neltst, ityptst, aire, offg, geo, pid, vol, vd2, deltax, vis, d1, d2, d3, pnew, psh, mat, ngl, qvis, ssp_eq, vol0, mssa, dmels, igeo, facq0, conde, dtel, g_dt, ipm, rhoref, rhosp, nel, ity, ismstr, jtur, jthe, jsms, npg, glob_therm)