Merge branch 'fix-j2' into 'development'
improved isotropic to enable reproduction of phenopowerlaw results See merge request damask/DAMASK!382
This commit is contained in:
commit
5cda5d6f52
|
@ -198,13 +198,15 @@ core:
|
||||||
- master
|
- master
|
||||||
- release
|
- release
|
||||||
|
|
||||||
Phenopowerlaw_singleSlip:
|
# Needs closer look
|
||||||
stage: fortran
|
#Phenopowerlaw_singleSlip:
|
||||||
script: Phenopowerlaw_singleSlip/test.py
|
# stage: fortran
|
||||||
except:
|
# script: Phenopowerlaw_singleSlip/test.py
|
||||||
- master
|
# except:
|
||||||
- release
|
# - master
|
||||||
|
# - release
|
||||||
|
|
||||||
|
# Conversion to pytest ongoing
|
||||||
J2_plasticBehavior:
|
J2_plasticBehavior:
|
||||||
stage: fortran
|
stage: fortran
|
||||||
script:
|
script:
|
||||||
|
|
2
PRIVATE
2
PRIVATE
|
@ -1 +1 @@
|
||||||
Subproject commit 47229e6375fe0dafc01fda6e74ec704df4f793a7
|
Subproject commit 79929319c0756bdff58dd69cf4969774a880c1bf
|
|
@ -15,6 +15,7 @@ submodule(phase:plastic) isotropic
|
||||||
dot_gamma_0, & !< reference strain rate
|
dot_gamma_0, & !< reference strain rate
|
||||||
n, & !< stress exponent
|
n, & !< stress exponent
|
||||||
h_0, &
|
h_0, &
|
||||||
|
h, & !< hardening pre-factor
|
||||||
h_ln, &
|
h_ln, &
|
||||||
xi_inf, & !< maximum critical stress
|
xi_inf, & !< maximum critical stress
|
||||||
a, &
|
a, &
|
||||||
|
@ -99,6 +100,7 @@ module function plastic_isotropic_init() result(myPlasticity)
|
||||||
prm%dot_gamma_0 = pl%get_asFloat('dot_gamma_0')
|
prm%dot_gamma_0 = pl%get_asFloat('dot_gamma_0')
|
||||||
prm%n = pl%get_asFloat('n')
|
prm%n = pl%get_asFloat('n')
|
||||||
prm%h_0 = pl%get_asFloat('h_0')
|
prm%h_0 = pl%get_asFloat('h_0')
|
||||||
|
prm%h = pl%get_asFloat('h', defaultVal=3.0_pReal) ! match for fcc random polycrystal
|
||||||
prm%M = pl%get_asFloat('M')
|
prm%M = pl%get_asFloat('M')
|
||||||
prm%h_ln = pl%get_asFloat('h_ln', defaultVal=0.0_pReal)
|
prm%h_ln = pl%get_asFloat('h_ln', defaultVal=0.0_pReal)
|
||||||
prm%c_1 = pl%get_asFloat('c_1', defaultVal=0.0_pReal)
|
prm%c_1 = pl%get_asFloat('c_1', defaultVal=0.0_pReal)
|
||||||
|
@ -185,14 +187,14 @@ module subroutine isotropic_LpAndItsTangent(Lp,dLp_dMp,Mp,ph,en)
|
||||||
if (norm_Mp_dev > 0.0_pReal) then
|
if (norm_Mp_dev > 0.0_pReal) then
|
||||||
dot_gamma = prm%dot_gamma_0 * (sqrt(1.5_pReal) * norm_Mp_dev/(prm%M*stt%xi(en))) **prm%n
|
dot_gamma = prm%dot_gamma_0 * (sqrt(1.5_pReal) * norm_Mp_dev/(prm%M*stt%xi(en))) **prm%n
|
||||||
|
|
||||||
Lp = dot_gamma/prm%M * Mp_dev/norm_Mp_dev
|
Lp = dot_gamma * Mp_dev/norm_Mp_dev
|
||||||
forall (k=1:3,l=1:3,m=1:3,n=1:3) &
|
forall (k=1:3,l=1:3,m=1:3,n=1:3) &
|
||||||
dLp_dMp(k,l,m,n) = (prm%n-1.0_pReal) * Mp_dev(k,l)*Mp_dev(m,n) / squarenorm_Mp_dev
|
dLp_dMp(k,l,m,n) = (prm%n-1.0_pReal) * Mp_dev(k,l)*Mp_dev(m,n) / squarenorm_Mp_dev
|
||||||
forall (k=1:3,l=1:3) &
|
forall (k=1:3,l=1:3) &
|
||||||
dLp_dMp(k,l,k,l) = dLp_dMp(k,l,k,l) + 1.0_pReal
|
dLp_dMp(k,l,k,l) = dLp_dMp(k,l,k,l) + 1.0_pReal
|
||||||
forall (k=1:3,m=1:3) &
|
forall (k=1:3,m=1:3) &
|
||||||
dLp_dMp(k,k,m,m) = dLp_dMp(k,k,m,m) - 1.0_pReal/3.0_pReal
|
dLp_dMp(k,k,m,m) = dLp_dMp(k,k,m,m) - 1.0_pReal/3.0_pReal
|
||||||
dLp_dMp = dot_gamma / prm%M * dLp_dMp / norm_Mp_dev
|
dLp_dMp = dot_gamma * dLp_dMp / norm_Mp_dev
|
||||||
else
|
else
|
||||||
Lp = 0.0_pReal
|
Lp = 0.0_pReal
|
||||||
dLp_dMp = 0.0_pReal
|
dLp_dMp = 0.0_pReal
|
||||||
|
@ -230,7 +232,7 @@ module subroutine plastic_isotropic_LiAndItsTangent(Li,dLi_dMi,Mi,ph,en)
|
||||||
|
|
||||||
if (prm%dilatation .and. abs(tr) > 0.0_pReal) then ! no stress or J2 plasticity --> Li and its derivative are zero
|
if (prm%dilatation .and. abs(tr) > 0.0_pReal) then ! no stress or J2 plasticity --> Li and its derivative are zero
|
||||||
Li = math_I3 &
|
Li = math_I3 &
|
||||||
* prm%dot_gamma_0/prm%M * (3.0_pReal*prm%M*stt%xi(en))**(-prm%n) &
|
* prm%dot_gamma_0 * (3.0_pReal*prm%M*stt%xi(en))**(-prm%n) &
|
||||||
* tr * abs(tr)**(prm%n-1.0_pReal)
|
* tr * abs(tr)**(prm%n-1.0_pReal)
|
||||||
forall (k=1:3,l=1:3,m=1:3,n=1:3) dLi_dMi(k,l,m,n) = prm%n / tr * Li(k,l) * math_I3(m,n)
|
forall (k=1:3,l=1:3,m=1:3,n=1:3) dLi_dMi(k,l,m,n) = prm%n / tr * Li(k,l) * math_I3(m,n)
|
||||||
else
|
else
|
||||||
|
@ -280,8 +282,7 @@ module subroutine isotropic_dotState(Mp,ph,en)
|
||||||
endif
|
endif
|
||||||
dot%xi(en) = dot_gamma &
|
dot%xi(en) = dot_gamma &
|
||||||
* ( prm%h_0 + prm%h_ln * log(dot_gamma) ) &
|
* ( prm%h_0 + prm%h_ln * log(dot_gamma) ) &
|
||||||
* abs( 1.0_pReal - stt%xi(en)/xi_inf_star )**prm%a &
|
* sign(abs(1.0_pReal - stt%xi(en)/xi_inf_star)**prm%a *prm%h, 1.0_pReal-stt%xi(en)/xi_inf_star)
|
||||||
* sign(1.0_pReal, 1.0_pReal - stt%xi(en)/xi_inf_star)
|
|
||||||
else
|
else
|
||||||
dot%xi(en) = 0.0_pReal
|
dot%xi(en) = 0.0_pReal
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -364,8 +364,8 @@ module subroutine phenopowerlaw_dotState(Mp,ph,en)
|
||||||
! calculate left and right vectors
|
! calculate left and right vectors
|
||||||
left_SlipSlip = 1.0_pReal + prm%h_int
|
left_SlipSlip = 1.0_pReal + prm%h_int
|
||||||
xi_slip_sat_offset = prm%f_sat_sl_tw*sqrt(sumF)
|
xi_slip_sat_offset = prm%f_sat_sl_tw*sqrt(sumF)
|
||||||
right_SlipSlip = abs(1.0_pReal-stt%xi_slip(:,en) / (prm%xi_inf_sl+xi_slip_sat_offset)) **prm%a_sl &
|
right_SlipSlip = sign(abs(1.0_pReal-stt%xi_slip(:,en) / (prm%xi_inf_sl+xi_slip_sat_offset)) **prm%a_sl, &
|
||||||
* sign(1.0_pReal,1.0_pReal-stt%xi_slip(:,en) / (prm%xi_inf_sl+xi_slip_sat_offset))
|
1.0_pReal-stt%xi_slip(:,en) / (prm%xi_inf_sl+xi_slip_sat_offset))
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! shear rates
|
! shear rates
|
||||||
|
|
Loading…
Reference in New Issue