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,), 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,ICOUNT,LIST(MVSIZ),ERROR, ALE_OR_EULER, ID_MIN
112 INTEGER :: JALE_FROM_MAT, JALE_FROM_PROP
113 my_real :: DD(MVSIZ), AL(MVSIZ),
114 . DTX(MVSIZ), AD(MVSIZ), QX(MVSIZ), CX(MVSIZ), RHO0(MVSIZ), NRHO(MVSIZ),
115 . DTY(MVSIZ), QA, QB, VISI, FACQ,QAA,
116 . CNS1, CNS2, SPH, AK1, BK1, AK2, BK2, TLI, AKK, XMU, TMU, RPR,
118 my_real :: tidt,tvol,trho,taire, dtmin(mvsiz),facpg
119 my_real :: cns1_0,cns2_0,qaa_0
121 my_real,
PARAMETER :: real_three = 3.0d0
122 my_real,
PARAMETER :: real_one = 1.0d0
124 my_real,
PARAMETER :: real_three = 3.0
125 my_real,
PARAMETER :: real_one = 1.0
133 jale_from_mat = nint(pm(72,mt))
134 jale_from_prop = igeo(62,pid(1))
135 IF(jale_from_mat == 1 .OR. jale_from_mat == 2) ale_or_euler = 1
136 IF(jale_from_prop == 1 .OR. jale_from_prop == 2)ale_or_euler = 1
137 IF(
ale%GLOBAL%I_DT_NODA_ALE_ON==1) ale_or_euler = 0
141 dd(i)=-d1(i)-d2(i)-d3(i)
144 cx(i)=ssp(i) + sqrt(vd2(i))
146 IF((impl_s>0.AND.idyna==0).OR.ismdisp>0)
THEN
160 dd(i)=-d1(i)-d2(i)-d3(i)
174 ad(i)=
max(zero,dd(i))
179 IF (facpg>one) facpg=facpg**(real_one/real_three)
182 IF(vol(i) > zero)
THEN
183 al(i) = vol(i)**(real_one/real_three)
187 ad(i)=
max(zero,dd(i))
194 IF(.NOT.(idtmins==2.AND.jsms/=0))
THEN
198 nrho(i)=sqrt(rhoref(i)*rho0(i))
200 qa =facq*geo(14,pid(1))
201 qb =facq*geo(15,pid(1))
202 cns1_0=facpg*geo(16,pid(1))
203 cns2_0=facpg*geo(17,pid(1))
207 dtmin(1:nel) = geo(172,pid(1))
209 cns1=cns1_0*al(i)*nrho(i)*ssp(i)*off(i)
210 cns2=cns2_0*al(i)*nrho(i)*ssp(i)*off(i)
216 qx(i)=qb*ssp(i)+al(i) * qaa
217 . + visi*two*vis(i) /
max(em20,rho(i)*deltax(i))
218 . + (cns1+visi*cns2) /
max(em20,rhoref(i)*deltax(i))
219 qvis(i)=rho(i)*ad(i)*al(i)*(qaa*al(i)+qb*ssp(i))
225 nrho(i)=sqrt(rhoref(i)*rho0(i))
228 qa =facq*geo(14,pid(1))
229 qb =facq*geo(15,pid(1))
233 dtmin(1:nel) = geo(172,pid(1))
235 IF(geo(16,pid(1)) >= zero)
THEN
236 cns1_0=facpg*geo(16,pid(1))
237 cns2_0=facpg*geo(17,pid(1))
239 cns1=cns1_0*al(i)*nrho(i)*ssp(i)*off(i)
240 cns2=cns2_0*al(i)*nrho(i)*ssp(i)*off(i)
242 nui =rho(i)*al(i)*(qaa*al(i)+qb*ssp(i))
244 qx(i) =(nui + cns1+visi*(two*vis(i)+cns2))/
max(em20,rhoref(i)*deltax(i))
247 cns1_0=abs(geo(16,pid(1)))
248 cns2_0=abs(geo(17,pid(1)))
250 cns1=cns1_0*nrho(i)*ssp(i)**2*off(i)
251 cns2=cns2_0*nrho(i)*ssp(i)**2*off(i)
253 nui =rho(i)*al(i)*(qaa*al(i)+qb*ssp(i))
255 qx(i) =(nui + cns1+visi*(two*vis(i)+cns2))/
max(em20,rhoref(i)*deltax(i))
261 ssp_eq(i) =
max(em20,qx(i)+sqrt(qx(i)*qx(i)+cx(i)*cx(i)))
262 dtx(i) = deltax(i) / ssp_eq(i)
275 IF(dtx(i)<dt22_min)
THEN
299 xmu = rho(i)*pm(24,mt)
302 atu=rpr*tmu*rk(i)*rk(i)/(
max(em15,re(i)*vol(i))*xmu)
305 dtx(i) =
min(dtx(i),half*deltax(i)*deltax(i)*sph/
max(akk,em20))
309 IF(.NOT.(idtmins==2.AND.jsms/=0))
THEN
310 IF(kdtsmstr==1.AND.ismstr==1.OR.
311 . ((ismstr==2.OR.ismstr==12).AND.idtmin(1)==3))
THEN
319 IF(off(i)==zero.OR.offg(i)<zero)
GO TO 50
320 IF(ipm(251,mt)/=0)
GO TO 50
324 trho = rho0(i) * tidt
325 tvol = vol0(i) * tidt
337 taire = aire(i) * tidt
338 sti(i) = half * trho * taire
342 IF(ale_or_euler==0)
THEN
344 dtx(i)= dtfac1(ity)*dtx(i)
348 dtx(i)= dtfac1(102)*dtx(i)
352 IF(ale_or_euler==1 .OR. nodadt==0)
THEN
354 IF(vol(i)>zero .AND. (off(i)/=zero.AND.offg(i)>=zero))dt2t=
min(dtx(i),dt2t)
359 IF(ismstr == 11)
THEN
363 IF(off(i)==zero.OR.offg(i)<zero) cycle
364 IF(ipm(251,mt)/=0) cycle
366 trho = rho0(i) * tidt
367 tvol = vol0(i) * tidt
373 IF(off(i)==zero.OR.offg(i)<zero) cycle
374 IF(ipm(251,mt)/=0) cycle
377 taire = aire(i) * tidt
378 sti(i) = half * trho * taire
384 IF(off(i)==zero.OR.offg(i)<zero)
GO TO 60
385 IF(ipm(251,mt)/=0)
GO TO 60
396 taire = aire(i) * tidt
397 sti(i) = half * trho * taire
402 IF(ale_or_euler==0)
THEN
404 dtx(i)= dtfac1(ity)*dtx(i)
408 dtx(i)= dtfac1(102)*dtx(i)
412 IF(ale_or_euler==1 .OR. nodadt==0)
THEN
414 IF(vol(i)>zero .AND. (off(i)/=zero.AND.offg(i)>=zero))dt2t=
min(dtx(i),dt2t)
422 dtx(i)= dtfac1(ity)*dtx(i)
427 IF(idtmin(ity)==1)
THEN
430 IF(dtx(i)>dtmin1(ity).OR.off
431 . or.offg(i)<zero)
GO TO 70
438 IF(dtx(i)>dtmin1(ity).OR.off(i)==zero.
439 . or.offg(i)<zero) cycle
442 .
' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SOLID ELEMENT',
444#include "lockoff.inc"
448 .
' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SOLID ELEMENTS'
449#include "lockoff.inc"
451 ELSEIF(idtmin(ity)==2)
THEN
454 IF(dtmin(i)/=zero)
THEN
455 IF(dtx(i)>dtmin(i).OR.off(i)==zero.
456 . or.offg(i)<zero)
GO TO 75
458 IF(dtx(i)>dtmin1(ity).OR.off(i)==zero.
459 . or.offg(i)<zero)
GO TO 75
470 .
' -- DELETE SOLID ELEMENTS',ngl(i)
472 .
' -- DELETE SOLID ELEMENTS',ngl(i)
473#include "lockoff.inc"
476 ELSEIF(idtmin(ity)==3.AND.(ismstr==2.OR.ismstr==12))
THEN
479 IF(dtmin(i)/=zero)
THEN
480 IF(dtx(i)>dtmin(i).OR.
481 . off(i)<one.OR.offg(i)<=zero.OR.offg(i)==two)
GO TO 76
483 IF(dtx(i)>dtmin1(ity).OR.
484 . off(i)<one.OR.offg(i)<=zero.OR.offg(i)==two)
GO TO 76
495 .
'-- CONSTANT TIME STEP FOR SOLID ELEMENT NUMBER ',ngl(i)
497 .
'-- CONSTANT TIME STEP FOR SOLID ELEMENT NUMBER ',ngl(i)
498#include "lockoff.inc"
500 ELSEIF(idtmin(ity)==5)
THEN
503 IF(dtx(i)>dtmin1(ity).OR.off(i)==zero.
504 . or.offg(i)<zero)
GO TO 570
510 IF(dtx(i)>dtmin1(ity).OR.off(i)==zero.
511 . or.offg(i)<zero) cycle
514 .
' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SOLID ELEMENT',
516#include "lockoff.inc"
520 .
' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SOLID ELEMENTS'
521#include "lockoff.inc"
526 IF(idtmins == 2 .AND. jsms /= 0)
THEN
528 + ((ismstr==2.OR.ismstr==12).AND.idtmin(1)==3))
THEN
535 IF(off(i)==zero.OR.offg(i)<zero) cycle
536 IF(ipm(251,mt)/=0) cycle
541 trho = rho0(i) * tidt
542 tvol = vol0(i) * tidt
553 taire = aire(i) * tidt
554 sti(i) = half * trho * taire
560 dmels(i)=
max(dmels(i),
561 . two*mssa(i)*((dtmins/(dtfacs*dty(i)))**2 - one))
562 dtx(i)=dtfacs*sqrt(one+dmels(i)/(two*mssa(i)))*dty(i)
568 IF(off(i)==zero.OR.offg(i)<zero) cycle
569 IF(ipm(251,mt)/=0) cycle
581 taire = aire(i) * tidt
582 sti(i) = half * trho * taire
588 dmels(i)=
max(dmels(i),
589 . two*mssa(i)*((dtmins/(dtfacs*dty(i)))**2 - one))
590 dtx(i)=dtfacs*sqrt(one+dmels(i)/(two*mssa(i)))*dty(i)
597 IF(off(i)==zero.OR.offg(i)<zero) cycle
610 xmu = rho(i)*pm(24,mt)
613 atu=rpr*tmu*rk(i)*rk(i)/(
max(em15,re(i)*vol(i))*xmu)
616 dtx(i) =
min(dtx(i),dtfacs*half*deltax(i)*deltax(i)*
622 IF(nodadt==0 .OR. (idtmins == 2 .AND. jsms /= 0) .OR. ale_or_euler==1)
THEN
625 IF(dtx(i)>dt2t .OR. off(i)<=zero .OR. offg(i)<=zero) cycle
627 IF(vol(i)<=zero)cycle
633 IF(dt2t<dtmin1(102).AND.id_min>0)
THEN
635 print *,
"DT=",dt2t,dtmin1(102)
637 WRITE(iout,*)
' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR ALE/EULER CELL',ngl(id_min)
638 WRITE(istdo,*)
' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR ALE/EULER CELL',ngl(id_min)
639#include "lockoff.inc"
646 IF (jthe < 0 .AND. glob_therm%IDT_THERM == 1)
THEN
661 xmu = rho(i)*pm(24,mt)
664 atu = rpr*tmu*rk(i)*rk(i)/(
max(em15,re(i)*vol(i))*xmu)
667 akk = akk * glob_therm%THEACCFACT
668 dt = glob_therm%DTFACTHERM*half*deltax(i)*deltax(i)*sph/
max(akk,em20)
669 IF(dt< glob_therm%DT_THERM.AND.off(i)>zero.AND.offg(i)>zero) glob_therm%DT_THERM = dt
670 conde(i) = four*vol(i)*akk/(deltax(i)*deltax(i))
671 conde(i) = conde(i)*off(i)
subroutine m22law(pm, off, sig, eint, rho, qold, epxe, epd, vol, pdam, stifn, dt2t, neltst, ityptst, offg, geo, pid, amu, vol_avg, mumax, mat, ngl, ssp, dvol, aire, vnew, vd2, deltax, vis, d1, d2, d3, d4, d5, d6, pnew, psh, qnew, ssp_eq, sold1, sold2, sold3, sold4, sold5, sold6, ipla, sigy, defp, dpla, mssa, dmels, conde, dtel, g_dt, nel, ipm, rhoref, rhosp, nft, jsph, ity, jtur, jthe, ismstr, jsms, npg, glob_therm, numgeo, igeo)
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)