Merge branch 'phenopower-inline-expansion' into 'development'
Single-step parameter expansion over slip systems See merge request damask/DAMASK!766
This commit is contained in:
commit
04f9b3d161
|
@ -82,13 +82,14 @@ module function plastic_isotropic_init() result(myPlasticity)
|
||||||
do ph = 1, phases%length
|
do ph = 1, phases%length
|
||||||
if (.not. myPlasticity(ph)) cycle
|
if (.not. myPlasticity(ph)) cycle
|
||||||
|
|
||||||
associate(prm => param(ph), stt => state(ph))
|
associate(prm => param(ph), &
|
||||||
|
stt => state(ph))
|
||||||
|
|
||||||
phase => phases%get_dict(ph)
|
phase => phases%get_dict(ph)
|
||||||
mech => phase%get_dict('mechanical')
|
mech => phase%get_dict('mechanical')
|
||||||
pl => mech%get_dict('plastic')
|
pl => mech%get_dict('plastic')
|
||||||
|
|
||||||
print'(/,1x,a,i0,a)', 'phase ',ph,': '//phases%key(ph)
|
print'(/,1x,a,1x,i0,a)', 'phase',ph,': '//phases%key(ph)
|
||||||
refs = config_listReferences(pl,indent=3)
|
refs = config_listReferences(pl,indent=3)
|
||||||
if (len(refs) > 0) print'(/,1x,a)', refs
|
if (len(refs) > 0) print'(/,1x,a)', refs
|
||||||
|
|
||||||
|
|
|
@ -116,14 +116,15 @@ module function plastic_kinehardening_init() result(myPlasticity)
|
||||||
do ph = 1, phases%length
|
do ph = 1, phases%length
|
||||||
if (.not. myPlasticity(ph)) cycle
|
if (.not. myPlasticity(ph)) cycle
|
||||||
|
|
||||||
associate(prm => param(ph), stt => state(ph), dlt => deltaState(ph), &
|
associate(prm => param(ph), &
|
||||||
|
stt => state(ph), dlt => deltaState(ph), &
|
||||||
idx_dot => indexDotState(ph))
|
idx_dot => indexDotState(ph))
|
||||||
|
|
||||||
phase => phases%get_dict(ph)
|
phase => phases%get_dict(ph)
|
||||||
mech => phase%get_dict('mechanical')
|
mech => phase%get_dict('mechanical')
|
||||||
pl => mech%get_dict('plastic')
|
pl => mech%get_dict('plastic')
|
||||||
|
|
||||||
print'(/,1x,a,i0,a)', 'phase ',ph,': '//phases%key(ph)
|
print'(/,1x,a,1x,i0,a)', 'phase',ph,': '//phases%key(ph)
|
||||||
refs = config_listReferences(pl,indent=3)
|
refs = config_listReferences(pl,indent=3)
|
||||||
if (len(refs) > 0) print'(/,1x,a)', refs
|
if (len(refs) > 0) print'(/,1x,a)', refs
|
||||||
|
|
||||||
|
@ -150,28 +151,21 @@ module function plastic_kinehardening_init() result(myPlasticity)
|
||||||
prm%P_nS_pos = prm%P
|
prm%P_nS_pos = prm%P
|
||||||
prm%P_nS_neg = prm%P
|
prm%P_nS_neg = prm%P
|
||||||
end if
|
end if
|
||||||
prm%h_sl_sl = lattice_interaction_SlipBySlip(N_sl,pl%get_as1dReal('h_sl-sl'), &
|
|
||||||
phase_lattice(ph))
|
|
||||||
|
|
||||||
xi_0 = pl%get_as1dReal('xi_0', requiredSize=size(N_sl))
|
|
||||||
prm%xi_inf = pl%get_as1dReal('xi_inf', requiredSize=size(N_sl))
|
|
||||||
prm%chi_inf = pl%get_as1dReal('chi_inf', requiredSize=size(N_sl))
|
|
||||||
prm%h_0_xi = pl%get_as1dReal('h_0_xi', requiredSize=size(N_sl))
|
|
||||||
prm%h_0_chi = pl%get_as1dReal('h_0_chi', requiredSize=size(N_sl))
|
|
||||||
prm%h_inf_xi = pl%get_as1dReal('h_inf_xi', requiredSize=size(N_sl))
|
|
||||||
prm%h_inf_chi = pl%get_as1dReal('h_inf_chi', requiredSize=size(N_sl))
|
|
||||||
|
|
||||||
prm%dot_gamma_0 = pl%get_asReal('dot_gamma_0')
|
prm%dot_gamma_0 = pl%get_asReal('dot_gamma_0')
|
||||||
prm%n = pl%get_asReal('n')
|
prm%n = pl%get_asReal('n')
|
||||||
|
|
||||||
! expand: family => system
|
prm%h_sl_sl = lattice_interaction_SlipBySlip(N_sl,pl%get_as1dReal('h_sl-sl'), &
|
||||||
xi_0 = math_expand(xi_0, N_sl)
|
phase_lattice(ph))
|
||||||
prm%xi_inf = math_expand(prm%xi_inf, N_sl)
|
|
||||||
prm%chi_inf = math_expand(prm%chi_inf, N_sl)
|
xi_0 = math_expand(pl%get_as1dReal('xi_0', requiredSize=size(N_sl)),N_sl)
|
||||||
prm%h_0_xi = math_expand(prm%h_0_xi, N_sl)
|
prm%xi_inf = math_expand(pl%get_as1dReal('xi_inf', requiredSize=size(N_sl)),N_sl)
|
||||||
prm%h_0_chi = math_expand(prm%h_0_chi, N_sl)
|
prm%chi_inf = math_expand(pl%get_as1dReal('chi_inf', requiredSize=size(N_sl)),N_sl)
|
||||||
prm%h_inf_xi = math_expand(prm%h_inf_xi, N_sl)
|
prm%h_0_xi = math_expand(pl%get_as1dReal('h_0_xi', requiredSize=size(N_sl)),N_sl)
|
||||||
prm%h_inf_chi = math_expand(prm%h_inf_chi, N_sl)
|
prm%h_0_chi = math_expand(pl%get_as1dReal('h_0_chi', requiredSize=size(N_sl)),N_sl)
|
||||||
|
prm%h_inf_xi = math_expand(pl%get_as1dReal('h_inf_xi', requiredSize=size(N_sl)),N_sl)
|
||||||
|
prm%h_inf_chi = math_expand(pl%get_as1dReal('h_inf_chi', requiredSize=size(N_sl)),N_sl)
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! sanity checks
|
! sanity checks
|
||||||
|
@ -183,7 +177,13 @@ module function plastic_kinehardening_init() result(myPlasticity)
|
||||||
|
|
||||||
else slipActive
|
else slipActive
|
||||||
xi_0 = emptyRealArray
|
xi_0 = emptyRealArray
|
||||||
allocate(prm%xi_inf,prm%chi_inf,prm%h_0_xi,prm%h_inf_xi,prm%h_0_chi,prm%h_inf_chi,source=emptyRealArray)
|
allocate(prm%xi_inf, &
|
||||||
|
prm%chi_inf, &
|
||||||
|
prm%h_0_xi, &
|
||||||
|
prm%h_0_chi, &
|
||||||
|
prm%h_inf_xi, &
|
||||||
|
prm%h_inf_chi, &
|
||||||
|
source=emptyRealArray)
|
||||||
allocate(prm%h_sl_sl(0,0))
|
allocate(prm%h_sl_sl(0,0))
|
||||||
end if slipActive
|
end if slipActive
|
||||||
|
|
||||||
|
|
|
@ -29,9 +29,12 @@ module function plastic_none_init() result(myPlasticity)
|
||||||
|
|
||||||
|
|
||||||
phases => config_material%get_dict('phase')
|
phases => config_material%get_dict('phase')
|
||||||
|
|
||||||
do ph = 1, phases%length
|
do ph = 1, phases%length
|
||||||
if (.not. myPlasticity(ph)) cycle
|
if (.not. myPlasticity(ph)) cycle
|
||||||
print'(a,i0,a)', ' phase ',ph
|
|
||||||
|
print'(/,1x,a,1x,i0,a)', 'phase',ph,': '//phases%key(ph)
|
||||||
|
|
||||||
call phase_allocateState(plasticState(ph),count(material_ID_phase == ph),0,0,0)
|
call phase_allocateState(plasticState(ph),count(material_ID_phase == ph),0,0,0)
|
||||||
end do
|
end do
|
||||||
|
|
||||||
|
|
|
@ -92,17 +92,13 @@ submodule(phase:plastic) nonlocal
|
||||||
mu, &
|
mu, &
|
||||||
nu
|
nu
|
||||||
real(pREAL), dimension(:), allocatable :: &
|
real(pREAL), dimension(:), allocatable :: &
|
||||||
d_ed, & !< minimum stable edge dipole height
|
|
||||||
d_sc, & !< minimum stable screw dipole height
|
|
||||||
tau_Peierls_ed, &
|
|
||||||
tau_Peierls_sc, &
|
|
||||||
i_sl, & !< mean free path prefactor for each
|
i_sl, & !< mean free path prefactor for each
|
||||||
b_sl !< absolute length of Burgers vector [m]
|
b_sl !< absolute length of Burgers vector [m]
|
||||||
real(pREAL), dimension(:,:), allocatable :: &
|
real(pREAL), dimension(:,:), allocatable :: &
|
||||||
slip_normal, &
|
slip_normal, &
|
||||||
slip_direction, &
|
slip_direction, &
|
||||||
slip_transverse, &
|
slip_transverse, &
|
||||||
minDipoleHeight, & ! edge and screw
|
minDipoleHeight, & ! minimum stable dipole height edge and screw
|
||||||
peierlsstress, & ! edge and screw
|
peierlsstress, & ! edge and screw
|
||||||
h_sl_sl ,& !< coefficients for slip-slip interaction
|
h_sl_sl ,& !< coefficients for slip-slip interaction
|
||||||
forestProjection_Edge, & !< matrix of forest projections of edge dislocations
|
forestProjection_Edge, & !< matrix of forest projections of edge dislocations
|
||||||
|
@ -236,7 +232,7 @@ module function plastic_nonlocal_init() result(myPlasticity)
|
||||||
mech => phase%get_dict('mechanical')
|
mech => phase%get_dict('mechanical')
|
||||||
pl => mech%get_dict('plastic')
|
pl => mech%get_dict('plastic')
|
||||||
|
|
||||||
print'(/,1x,a,i0,a)', 'phase ',ph,': '//phases%key(ph)
|
print'(/,1x,a,1x,i0,a)', 'phase',ph,': '//phases%key(ph)
|
||||||
refs = config_listReferences(pl,indent=3)
|
refs = config_listReferences(pl,indent=3)
|
||||||
if (len(refs) > 0) print'(/,1x,a)', refs
|
if (len(refs) > 0) print'(/,1x,a)', refs
|
||||||
|
|
||||||
|
@ -295,27 +291,16 @@ module function plastic_nonlocal_init() result(myPlasticity)
|
||||||
ini%rho_d_ed_0 = pl%get_as1dReal('rho_d_ed_0', requiredSize=size(ini%N_sl))
|
ini%rho_d_ed_0 = pl%get_as1dReal('rho_d_ed_0', requiredSize=size(ini%N_sl))
|
||||||
ini%rho_d_sc_0 = pl%get_as1dReal('rho_d_sc_0', requiredSize=size(ini%N_sl))
|
ini%rho_d_sc_0 = pl%get_as1dReal('rho_d_sc_0', requiredSize=size(ini%N_sl))
|
||||||
|
|
||||||
prm%i_sl = pl%get_as1dReal('i_sl', requiredSize=size(ini%N_sl))
|
prm%i_sl = math_expand(pl%get_as1dReal('i_sl', requiredSize=size(ini%N_sl)),ini%N_sl)
|
||||||
prm%b_sl = pl%get_as1dReal('b_sl', requiredSize=size(ini%N_sl))
|
prm%b_sl = math_expand(pl%get_as1dReal('b_sl', requiredSize=size(ini%N_sl)),ini%N_sl)
|
||||||
|
|
||||||
prm%i_sl = math_expand(prm%i_sl,ini%N_sl)
|
|
||||||
prm%b_sl = math_expand(prm%b_sl,ini%N_sl)
|
|
||||||
|
|
||||||
prm%d_ed = pl%get_as1dReal('d_ed', requiredSize=size(ini%N_sl))
|
|
||||||
prm%d_sc = pl%get_as1dReal('d_sc', requiredSize=size(ini%N_sl))
|
|
||||||
prm%d_ed = math_expand(prm%d_ed,ini%N_sl)
|
|
||||||
prm%d_sc = math_expand(prm%d_sc,ini%N_sl)
|
|
||||||
allocate(prm%minDipoleHeight(prm%sum_N_sl,2))
|
allocate(prm%minDipoleHeight(prm%sum_N_sl,2))
|
||||||
prm%minDipoleHeight(:,1) = prm%d_ed
|
prm%minDipoleHeight(:,1) = math_expand(pl%get_as1dReal('d_ed', requiredSize=size(ini%N_sl)),ini%N_sl)
|
||||||
prm%minDipoleHeight(:,2) = prm%d_sc
|
prm%minDipoleHeight(:,2) = math_expand(pl%get_as1dReal('d_sc', requiredSize=size(ini%N_sl)),ini%N_sl)
|
||||||
|
|
||||||
prm%tau_Peierls_ed = pl%get_as1dReal('tau_Peierls_ed', requiredSize=size(ini%N_sl))
|
|
||||||
prm%tau_Peierls_sc = pl%get_as1dReal('tau_Peierls_sc', requiredSize=size(ini%N_sl))
|
|
||||||
prm%tau_Peierls_ed = math_expand(prm%tau_Peierls_ed,ini%N_sl)
|
|
||||||
prm%tau_Peierls_sc = math_expand(prm%tau_Peierls_sc,ini%N_sl)
|
|
||||||
allocate(prm%peierlsstress(prm%sum_N_sl,2))
|
allocate(prm%peierlsstress(prm%sum_N_sl,2))
|
||||||
prm%peierlsstress(:,1) = prm%tau_Peierls_ed
|
prm%peierlsstress(:,1) = math_expand(pl%get_as1dReal('tau_Peierls_ed', requiredSize=size(ini%N_sl)),ini%N_sl)
|
||||||
prm%peierlsstress(:,2) = prm%tau_Peierls_sc
|
prm%peierlsstress(:,2) = math_expand(pl%get_as1dReal('tau_Peierls_sc', requiredSize=size(ini%N_sl)),ini%N_sl)
|
||||||
|
|
||||||
prm%rho_significant = pl%get_asReal('rho_significant')
|
prm%rho_significant = pl%get_asReal('rho_significant')
|
||||||
prm%rho_min = pl%get_asReal('rho_min', 0.0_pREAL)
|
prm%rho_min = pl%get_asReal('rho_min', 0.0_pREAL)
|
||||||
|
|
|
@ -139,7 +139,18 @@ module function plastic_phenopowerlaw_init() result(myPlasticity)
|
||||||
N_sl = pl%get_as1dInt('N_sl',defaultVal=emptyIntArray)
|
N_sl = pl%get_as1dInt('N_sl',defaultVal=emptyIntArray)
|
||||||
prm%sum_N_sl = sum(abs(N_sl))
|
prm%sum_N_sl = sum(abs(N_sl))
|
||||||
slipActive: if (prm%sum_N_sl > 0) then
|
slipActive: if (prm%sum_N_sl > 0) then
|
||||||
prm%systems_sl = lattice_labels_slip(N_sl,phase_lattice(ph))
|
prm%dot_gamma_0_sl = pl%get_asReal('dot_gamma_0_sl')
|
||||||
|
prm%n_sl = pl%get_asReal('n_sl')
|
||||||
|
prm%a_sl = pl%get_asReal('a_sl')
|
||||||
|
prm%h_0_sl_sl = pl%get_asReal('h_0_sl-sl')
|
||||||
|
|
||||||
|
xi_0_sl = math_expand(pl%get_as1dReal('xi_0_sl', requiredSize=size(N_sl)),N_sl)
|
||||||
|
prm%xi_inf_sl = math_expand(pl%get_as1dReal('xi_inf_sl', requiredSize=size(N_sl)),N_sl)
|
||||||
|
prm%h_int = math_expand(pl%get_as1dReal('h_int', requiredSize=size(N_sl), &
|
||||||
|
defaultVal=[(0.0_pREAL,i=1,size(N_sl))]),N_sl)
|
||||||
|
|
||||||
|
prm%h_sl_sl = lattice_interaction_SlipBySlip(N_sl,pl%get_as1dReal('h_sl-sl'),phase_lattice(ph))
|
||||||
|
|
||||||
prm%P_sl = lattice_SchmidMatrix_slip(N_sl,phase_lattice(ph),phase_cOverA(ph))
|
prm%P_sl = lattice_SchmidMatrix_slip(N_sl,phase_lattice(ph),phase_cOverA(ph))
|
||||||
|
|
||||||
if (phase_lattice(ph) == 'cI') then
|
if (phase_lattice(ph) == 'cI') then
|
||||||
|
@ -151,22 +162,8 @@ module function plastic_phenopowerlaw_init() result(myPlasticity)
|
||||||
prm%P_nS_pos = prm%P_sl
|
prm%P_nS_pos = prm%P_sl
|
||||||
prm%P_nS_neg = prm%P_sl
|
prm%P_nS_neg = prm%P_sl
|
||||||
end if
|
end if
|
||||||
prm%h_sl_sl = lattice_interaction_SlipBySlip(N_sl,pl%get_as1dReal('h_sl-sl'),phase_lattice(ph))
|
|
||||||
|
|
||||||
xi_0_sl = pl%get_as1dReal('xi_0_sl', requiredSize=size(N_sl))
|
prm%systems_sl = lattice_labels_slip(N_sl,phase_lattice(ph))
|
||||||
prm%xi_inf_sl = pl%get_as1dReal('xi_inf_sl', requiredSize=size(N_sl))
|
|
||||||
prm%h_int = pl%get_as1dReal('h_int', requiredSize=size(N_sl), &
|
|
||||||
defaultVal=[(0.0_pREAL,i=1,size(N_sl))])
|
|
||||||
|
|
||||||
prm%dot_gamma_0_sl = pl%get_asReal('dot_gamma_0_sl')
|
|
||||||
prm%n_sl = pl%get_asReal('n_sl')
|
|
||||||
prm%a_sl = pl%get_asReal('a_sl')
|
|
||||||
prm%h_0_sl_sl = pl%get_asReal('h_0_sl-sl')
|
|
||||||
|
|
||||||
! expand: family => system
|
|
||||||
xi_0_sl = math_expand(xi_0_sl, N_sl)
|
|
||||||
prm%xi_inf_sl = math_expand(prm%xi_inf_sl,N_sl)
|
|
||||||
prm%h_int = math_expand(prm%h_int, N_sl)
|
|
||||||
|
|
||||||
! sanity checks
|
! sanity checks
|
||||||
if ( prm%dot_gamma_0_sl <= 0.0_pREAL) extmsg = trim(extmsg)//' dot_gamma_0_sl'
|
if ( prm%dot_gamma_0_sl <= 0.0_pREAL) extmsg = trim(extmsg)//' dot_gamma_0_sl'
|
||||||
|
@ -177,7 +174,9 @@ module function plastic_phenopowerlaw_init() result(myPlasticity)
|
||||||
|
|
||||||
else slipActive
|
else slipActive
|
||||||
xi_0_sl = emptyRealArray
|
xi_0_sl = emptyRealArray
|
||||||
allocate(prm%xi_inf_sl,prm%h_int,source=emptyRealArray)
|
allocate(prm%xi_inf_sl, &
|
||||||
|
prm%h_int, &
|
||||||
|
source=emptyRealArray)
|
||||||
allocate(prm%h_sl_sl(0,0))
|
allocate(prm%h_sl_sl(0,0))
|
||||||
end if slipActive
|
end if slipActive
|
||||||
|
|
||||||
|
@ -186,13 +185,6 @@ module function plastic_phenopowerlaw_init() result(myPlasticity)
|
||||||
N_tw = pl%get_as1dInt('N_tw', defaultVal=emptyIntArray)
|
N_tw = pl%get_as1dInt('N_tw', defaultVal=emptyIntArray)
|
||||||
prm%sum_N_tw = sum(abs(N_tw))
|
prm%sum_N_tw = sum(abs(N_tw))
|
||||||
twinActive: if (prm%sum_N_tw > 0) then
|
twinActive: if (prm%sum_N_tw > 0) then
|
||||||
prm%systems_tw = lattice_labels_twin(N_tw,phase_lattice(ph))
|
|
||||||
prm%P_tw = lattice_SchmidMatrix_twin(N_tw,phase_lattice(ph),phase_cOverA(ph))
|
|
||||||
prm%h_tw_tw = lattice_interaction_TwinByTwin(N_tw,pl%get_as1dReal('h_tw-tw'),phase_lattice(ph))
|
|
||||||
prm%gamma_char = lattice_characteristicShear_twin(N_tw,phase_lattice(ph),phase_cOverA(ph))
|
|
||||||
|
|
||||||
xi_0_tw = pl%get_as1dReal('xi_0_tw',requiredSize=size(N_tw))
|
|
||||||
|
|
||||||
prm%c_1 = pl%get_asReal('c_1',defaultVal=0.0_pREAL)
|
prm%c_1 = pl%get_asReal('c_1',defaultVal=0.0_pREAL)
|
||||||
prm%c_2 = pl%get_asReal('c_2',defaultVal=1.0_pREAL)
|
prm%c_2 = pl%get_asReal('c_2',defaultVal=1.0_pREAL)
|
||||||
prm%c_3 = pl%get_asReal('c_3',defaultVal=0.0_pREAL)
|
prm%c_3 = pl%get_asReal('c_3',defaultVal=0.0_pREAL)
|
||||||
|
@ -202,8 +194,13 @@ module function plastic_phenopowerlaw_init() result(myPlasticity)
|
||||||
prm%f_sat_sl_tw = pl%get_asReal('f_sat_sl-tw')
|
prm%f_sat_sl_tw = pl%get_asReal('f_sat_sl-tw')
|
||||||
prm%h_0_tw_tw = pl%get_asReal('h_0_tw-tw')
|
prm%h_0_tw_tw = pl%get_asReal('h_0_tw-tw')
|
||||||
|
|
||||||
! expand: family => system
|
xi_0_tw = math_expand(pl%get_as1dReal('xi_0_tw',requiredSize=size(N_tw)),N_tw)
|
||||||
xi_0_tw = math_expand(xi_0_tw,N_tw)
|
|
||||||
|
prm%gamma_char = lattice_characteristicShear_twin(N_tw,phase_lattice(ph),phase_cOverA(ph))
|
||||||
|
prm%h_tw_tw = lattice_interaction_TwinByTwin(N_tw,pl%get_as1dReal('h_tw-tw'),phase_lattice(ph))
|
||||||
|
|
||||||
|
prm%P_tw = lattice_SchmidMatrix_twin(N_tw,phase_lattice(ph),phase_cOverA(ph))
|
||||||
|
prm%systems_tw = lattice_labels_twin(N_tw,phase_lattice(ph))
|
||||||
|
|
||||||
! sanity checks
|
! sanity checks
|
||||||
if (prm%dot_gamma_0_tw <= 0.0_pREAL) extmsg = trim(extmsg)//' dot_gamma_0_tw'
|
if (prm%dot_gamma_0_tw <= 0.0_pREAL) extmsg = trim(extmsg)//' dot_gamma_0_tw'
|
||||||
|
|
Loading…
Reference in New Issue