consistent name 'ph' and cleaning
This commit is contained in:
parent
341e8ddd6a
commit
53bab41b47
|
@ -78,7 +78,7 @@ module function plastic_dislotungsten_init() result(myPlasticity)
|
||||||
|
|
||||||
logical, dimension(:), allocatable :: myPlasticity
|
logical, dimension(:), allocatable :: myPlasticity
|
||||||
integer :: &
|
integer :: &
|
||||||
p, i, &
|
ph, i, &
|
||||||
Nconstituents, &
|
Nconstituents, &
|
||||||
sizeState, sizeDotState, &
|
sizeState, sizeDotState, &
|
||||||
startIndex, endIndex
|
startIndex, endIndex
|
||||||
|
@ -114,15 +114,13 @@ module function plastic_dislotungsten_init() result(myPlasticity)
|
||||||
allocate(dependentState(phases%length))
|
allocate(dependentState(phases%length))
|
||||||
|
|
||||||
|
|
||||||
do p = 1, phases%length
|
do ph = 1, phases%length
|
||||||
if(.not. myPlasticity(p)) cycle
|
if(.not. myPlasticity(ph)) cycle
|
||||||
phase => phases%get(p)
|
|
||||||
|
associate(prm => param(ph), dot => dotState(ph), stt => state(ph), dst => dependentState(ph))
|
||||||
|
|
||||||
|
phase => phases%get(ph)
|
||||||
mech => phase%get('mechanics')
|
mech => phase%get('mechanics')
|
||||||
i = p
|
|
||||||
associate(prm => param(i), &
|
|
||||||
dot => dotState(i), &
|
|
||||||
stt => state(i), &
|
|
||||||
dst => dependentState(i))
|
|
||||||
pl => mech%get('plasticity')
|
pl => mech%get('plasticity')
|
||||||
|
|
||||||
#if defined (__GFORTRAN__)
|
#if defined (__GFORTRAN__)
|
||||||
|
@ -132,7 +130,7 @@ module function plastic_dislotungsten_init() result(myPlasticity)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
! This data is read in already in lattice
|
! This data is read in already in lattice
|
||||||
prm%mu = lattice_mu(p)
|
prm%mu = lattice_mu(ph)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! slip related parameters
|
! slip related parameters
|
||||||
|
@ -222,41 +220,41 @@ module function plastic_dislotungsten_init() result(myPlasticity)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! allocate state arrays
|
! allocate state arrays
|
||||||
Nconstituents = count(material_phaseAt2 == p)
|
Nconstituents = count(material_phaseAt2 == ph)
|
||||||
sizeDotState = size(['rho_mob ','rho_dip ','gamma_sl']) * prm%sum_N_sl
|
sizeDotState = size(['rho_mob ','rho_dip ','gamma_sl']) * prm%sum_N_sl
|
||||||
sizeState = sizeDotState
|
sizeState = sizeDotState
|
||||||
|
|
||||||
call phase_allocateState(plasticState(p),Nconstituents,sizeState,sizeDotState,0)
|
call phase_allocateState(plasticState(ph),Nconstituents,sizeState,sizeDotState,0)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! state aliases and initialization
|
! state aliases and initialization
|
||||||
startIndex = 1
|
startIndex = 1
|
||||||
endIndex = prm%sum_N_sl
|
endIndex = prm%sum_N_sl
|
||||||
stt%rho_mob => plasticState(p)%state(startIndex:endIndex,:)
|
stt%rho_mob => plasticState(ph)%state(startIndex:endIndex,:)
|
||||||
stt%rho_mob = spread(rho_mob_0,2,Nconstituents)
|
stt%rho_mob = spread(rho_mob_0,2,Nconstituents)
|
||||||
dot%rho_mob => plasticState(p)%dotState(startIndex:endIndex,:)
|
dot%rho_mob => plasticState(ph)%dotState(startIndex:endIndex,:)
|
||||||
plasticState(p)%atol(startIndex:endIndex) = pl%get_asFloat('atol_rho',defaultVal=1.0_pReal)
|
plasticState(ph)%atol(startIndex:endIndex) = pl%get_asFloat('atol_rho',defaultVal=1.0_pReal)
|
||||||
if (any(plasticState(p)%atol(startIndex:endIndex) < 0.0_pReal)) extmsg = trim(extmsg)//' atol_rho'
|
if (any(plasticState(ph)%atol(startIndex:endIndex) < 0.0_pReal)) extmsg = trim(extmsg)//' atol_rho'
|
||||||
|
|
||||||
startIndex = endIndex + 1
|
startIndex = endIndex + 1
|
||||||
endIndex = endIndex + prm%sum_N_sl
|
endIndex = endIndex + prm%sum_N_sl
|
||||||
stt%rho_dip => plasticState(p)%state(startIndex:endIndex,:)
|
stt%rho_dip => plasticState(ph)%state(startIndex:endIndex,:)
|
||||||
stt%rho_dip = spread(rho_dip_0,2,Nconstituents)
|
stt%rho_dip = spread(rho_dip_0,2,Nconstituents)
|
||||||
dot%rho_dip => plasticState(p)%dotState(startIndex:endIndex,:)
|
dot%rho_dip => plasticState(ph)%dotState(startIndex:endIndex,:)
|
||||||
plasticState(p)%atol(startIndex:endIndex) = pl%get_asFloat('atol_rho',defaultVal=1.0_pReal)
|
plasticState(ph)%atol(startIndex:endIndex) = pl%get_asFloat('atol_rho',defaultVal=1.0_pReal)
|
||||||
|
|
||||||
startIndex = endIndex + 1
|
startIndex = endIndex + 1
|
||||||
endIndex = endIndex + prm%sum_N_sl
|
endIndex = endIndex + prm%sum_N_sl
|
||||||
stt%gamma_sl => plasticState(p)%state(startIndex:endIndex,:)
|
stt%gamma_sl => plasticState(ph)%state(startIndex:endIndex,:)
|
||||||
dot%gamma_sl => plasticState(p)%dotState(startIndex:endIndex,:)
|
dot%gamma_sl => plasticState(ph)%dotState(startIndex:endIndex,:)
|
||||||
plasticState(p)%atol(startIndex:endIndex) = 1.0e-2_pReal
|
plasticState(ph)%atol(startIndex:endIndex) = 1.0e-2_pReal
|
||||||
! global alias
|
! global alias
|
||||||
plasticState(p)%slipRate => plasticState(p)%dotState(startIndex:endIndex,:)
|
plasticState(ph)%slipRate => plasticState(ph)%dotState(startIndex:endIndex,:)
|
||||||
|
|
||||||
allocate(dst%Lambda_sl(prm%sum_N_sl,Nconstituents), source=0.0_pReal)
|
allocate(dst%Lambda_sl(prm%sum_N_sl,Nconstituents), source=0.0_pReal)
|
||||||
allocate(dst%threshold_stress(prm%sum_N_sl,Nconstituents), source=0.0_pReal)
|
allocate(dst%threshold_stress(prm%sum_N_sl,Nconstituents), source=0.0_pReal)
|
||||||
|
|
||||||
plasticState(p)%state0 = plasticState(p)%state ! ToDo: this could be done centrally
|
plasticState(ph)%state0 = plasticState(ph)%state ! ToDo: this could be done centrally
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
|
|
||||||
|
|
|
@ -126,7 +126,7 @@ module function plastic_dislotwin_init() result(myPlasticity)
|
||||||
|
|
||||||
logical, dimension(:), allocatable :: myPlasticity
|
logical, dimension(:), allocatable :: myPlasticity
|
||||||
integer :: &
|
integer :: &
|
||||||
p, i, &
|
ph, i, &
|
||||||
Nconstituents, &
|
Nconstituents, &
|
||||||
sizeState, sizeDotState, &
|
sizeState, sizeDotState, &
|
||||||
startIndex, endIndex
|
startIndex, endIndex
|
||||||
|
@ -167,15 +167,13 @@ module function plastic_dislotwin_init() result(myPlasticity)
|
||||||
allocate(dependentState(phases%length))
|
allocate(dependentState(phases%length))
|
||||||
|
|
||||||
|
|
||||||
do p = 1, phases%length
|
do ph = 1, phases%length
|
||||||
if(.not. myPlasticity(p)) cycle
|
if(.not. myPlasticity(ph)) cycle
|
||||||
phase => phases%get(p)
|
|
||||||
|
associate(prm => param(ph), dot => dotState(ph), stt => state(ph), dst => dependentState(ph))
|
||||||
|
|
||||||
|
phase => phases%get(ph)
|
||||||
mech => phase%get('mechanics')
|
mech => phase%get('mechanics')
|
||||||
i = p
|
|
||||||
associate(prm => param(i), &
|
|
||||||
dot => dotState(i), &
|
|
||||||
stt => state(i), &
|
|
||||||
dst => dependentState(i))
|
|
||||||
pl => mech%get('plasticity')
|
pl => mech%get('plasticity')
|
||||||
|
|
||||||
#if defined (__GFORTRAN__)
|
#if defined (__GFORTRAN__)
|
||||||
|
@ -185,9 +183,9 @@ module function plastic_dislotwin_init() result(myPlasticity)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
! This data is read in already in lattice
|
! This data is read in already in lattice
|
||||||
prm%mu = lattice_mu(p)
|
prm%mu = lattice_mu(ph)
|
||||||
prm%nu = lattice_nu(p)
|
prm%nu = lattice_nu(ph)
|
||||||
prm%C66 = lattice_C66(1:6,1:6,p)
|
prm%C66 = lattice_C66(1:6,1:6,ph)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! slip related parameters
|
! slip related parameters
|
||||||
|
@ -204,8 +202,7 @@ module function plastic_dislotwin_init() result(myPlasticity)
|
||||||
|
|
||||||
prm%n0_sl = lattice_slip_normal(N_sl,phase%get_asString('lattice'),&
|
prm%n0_sl = lattice_slip_normal(N_sl,phase%get_asString('lattice'),&
|
||||||
phase%get_asFloat('c/a',defaultVal=0.0_pReal))
|
phase%get_asFloat('c/a',defaultVal=0.0_pReal))
|
||||||
prm%fccTwinTransNucleation = merge(.true., .false., lattice_structure(p) == lattice_FCC_ID) &
|
prm%fccTwinTransNucleation = lattice_structure(ph) == lattice_FCC_ID .and. (N_sl(1) == 12)
|
||||||
.and. (N_sl(1) == 12)
|
|
||||||
if(prm%fccTwinTransNucleation) prm%fcc_twinNucleationSlipPair = lattice_FCC_TWINNUCLEATIONSLIPPAIR
|
if(prm%fccTwinTransNucleation) prm%fcc_twinNucleationSlipPair = lattice_FCC_TWINNUCLEATIONSLIPPAIR
|
||||||
|
|
||||||
rho_mob_0 = pl%get_asFloats('rho_mob_0', requiredSize=size(N_sl))
|
rho_mob_0 = pl%get_asFloats('rho_mob_0', requiredSize=size(N_sl))
|
||||||
|
@ -234,7 +231,7 @@ module function plastic_dislotwin_init() result(myPlasticity)
|
||||||
! multiplication factor according to crystal structure (nearest neighbors bcc vs fcc/hex)
|
! multiplication factor according to crystal structure (nearest neighbors bcc vs fcc/hex)
|
||||||
! details: Argon & Moffat, Acta Metallurgica, Vol. 29, pg 293 to 299, 1981
|
! details: Argon & Moffat, Acta Metallurgica, Vol. 29, pg 293 to 299, 1981
|
||||||
prm%omega = pl%get_asFloat('omega', defaultVal = 1000.0_pReal) &
|
prm%omega = pl%get_asFloat('omega', defaultVal = 1000.0_pReal) &
|
||||||
* merge(12.0_pReal,8.0_pReal,any(lattice_structure(p) == [lattice_FCC_ID,lattice_HEX_ID]))
|
* merge(12.0_pReal,8.0_pReal,any(lattice_structure(ph) == [lattice_FCC_ID,lattice_HEX_ID]))
|
||||||
|
|
||||||
! expand: family => system
|
! expand: family => system
|
||||||
rho_mob_0 = math_expand(rho_mob_0, N_sl)
|
rho_mob_0 = math_expand(rho_mob_0, N_sl)
|
||||||
|
@ -342,7 +339,7 @@ module function plastic_dislotwin_init() result(myPlasticity)
|
||||||
pl%get_asFloat('a_cI', defaultVal=0.0_pReal), &
|
pl%get_asFloat('a_cI', defaultVal=0.0_pReal), &
|
||||||
pl%get_asFloat('a_cF', defaultVal=0.0_pReal))
|
pl%get_asFloat('a_cF', defaultVal=0.0_pReal))
|
||||||
|
|
||||||
if (lattice_structure(p) /= lattice_FCC_ID) then
|
if (lattice_structure(ph) /= lattice_FCC_ID) then
|
||||||
prm%dot_N_0_tr = pl%get_asFloats('dot_N_0_tr')
|
prm%dot_N_0_tr = pl%get_asFloats('dot_N_0_tr')
|
||||||
prm%dot_N_0_tr = math_expand(prm%dot_N_0_tr,N_tr)
|
prm%dot_N_0_tr = math_expand(prm%dot_N_0_tr,N_tr)
|
||||||
endif
|
endif
|
||||||
|
@ -357,7 +354,7 @@ module function plastic_dislotwin_init() result(myPlasticity)
|
||||||
if ( prm%i_tr < 0.0_pReal) extmsg = trim(extmsg)//' i_tr'
|
if ( prm%i_tr < 0.0_pReal) extmsg = trim(extmsg)//' i_tr'
|
||||||
if (any(prm%t_tr < 0.0_pReal)) extmsg = trim(extmsg)//' t_tr'
|
if (any(prm%t_tr < 0.0_pReal)) extmsg = trim(extmsg)//' t_tr'
|
||||||
if (any(prm%s < 0.0_pReal)) extmsg = trim(extmsg)//' p_tr'
|
if (any(prm%s < 0.0_pReal)) extmsg = trim(extmsg)//' p_tr'
|
||||||
if (lattice_structure(p) /= lattice_FCC_ID) then
|
if (lattice_structure(ph) /= lattice_FCC_ID) then
|
||||||
if (any(prm%dot_N_0_tr < 0.0_pReal)) extmsg = trim(extmsg)//' dot_N_0_tr'
|
if (any(prm%dot_N_0_tr < 0.0_pReal)) extmsg = trim(extmsg)//' dot_N_0_tr'
|
||||||
endif
|
endif
|
||||||
else transActive
|
else transActive
|
||||||
|
@ -408,53 +405,53 @@ module function plastic_dislotwin_init() result(myPlasticity)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! allocate state arrays
|
! allocate state arrays
|
||||||
Nconstituents = count(material_phaseAt2 == p)
|
Nconstituents = count(material_phaseAt2 == ph)
|
||||||
sizeDotState = size(['rho_mob ','rho_dip ','gamma_sl']) * prm%sum_N_sl &
|
sizeDotState = size(['rho_mob ','rho_dip ','gamma_sl']) * prm%sum_N_sl &
|
||||||
+ size(['f_tw']) * prm%sum_N_tw &
|
+ size(['f_tw']) * prm%sum_N_tw &
|
||||||
+ size(['f_tr']) * prm%sum_N_tr
|
+ size(['f_tr']) * prm%sum_N_tr
|
||||||
sizeState = sizeDotState
|
sizeState = sizeDotState
|
||||||
|
|
||||||
|
|
||||||
call phase_allocateState(plasticState(p),Nconstituents,sizeState,sizeDotState,0)
|
call phase_allocateState(plasticState(ph),Nconstituents,sizeState,sizeDotState,0)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! locally defined state aliases and initialization of state0 and atol
|
! locally defined state aliases and initialization of state0 and atol
|
||||||
startIndex = 1
|
startIndex = 1
|
||||||
endIndex = prm%sum_N_sl
|
endIndex = prm%sum_N_sl
|
||||||
stt%rho_mob=>plasticState(p)%state(startIndex:endIndex,:)
|
stt%rho_mob=>plasticState(ph)%state(startIndex:endIndex,:)
|
||||||
stt%rho_mob= spread(rho_mob_0,2,Nconstituents)
|
stt%rho_mob= spread(rho_mob_0,2,Nconstituents)
|
||||||
dot%rho_mob=>plasticState(p)%dotState(startIndex:endIndex,:)
|
dot%rho_mob=>plasticState(ph)%dotState(startIndex:endIndex,:)
|
||||||
plasticState(p)%atol(startIndex:endIndex) = pl%get_asFloat('atol_rho',defaultVal=1.0_pReal)
|
plasticState(ph)%atol(startIndex:endIndex) = pl%get_asFloat('atol_rho',defaultVal=1.0_pReal)
|
||||||
if (any(plasticState(p)%atol(startIndex:endIndex) < 0.0_pReal)) extmsg = trim(extmsg)//' atol_rho'
|
if (any(plasticState(ph)%atol(startIndex:endIndex) < 0.0_pReal)) extmsg = trim(extmsg)//' atol_rho'
|
||||||
|
|
||||||
startIndex = endIndex + 1
|
startIndex = endIndex + 1
|
||||||
endIndex = endIndex + prm%sum_N_sl
|
endIndex = endIndex + prm%sum_N_sl
|
||||||
stt%rho_dip=>plasticState(p)%state(startIndex:endIndex,:)
|
stt%rho_dip=>plasticState(ph)%state(startIndex:endIndex,:)
|
||||||
stt%rho_dip= spread(rho_dip_0,2,Nconstituents)
|
stt%rho_dip= spread(rho_dip_0,2,Nconstituents)
|
||||||
dot%rho_dip=>plasticState(p)%dotState(startIndex:endIndex,:)
|
dot%rho_dip=>plasticState(ph)%dotState(startIndex:endIndex,:)
|
||||||
plasticState(p)%atol(startIndex:endIndex) = pl%get_asFloat('atol_rho',defaultVal=1.0_pReal)
|
plasticState(ph)%atol(startIndex:endIndex) = pl%get_asFloat('atol_rho',defaultVal=1.0_pReal)
|
||||||
|
|
||||||
startIndex = endIndex + 1
|
startIndex = endIndex + 1
|
||||||
endIndex = endIndex + prm%sum_N_sl
|
endIndex = endIndex + prm%sum_N_sl
|
||||||
stt%gamma_sl=>plasticState(p)%state(startIndex:endIndex,:)
|
stt%gamma_sl=>plasticState(ph)%state(startIndex:endIndex,:)
|
||||||
dot%gamma_sl=>plasticState(p)%dotState(startIndex:endIndex,:)
|
dot%gamma_sl=>plasticState(ph)%dotState(startIndex:endIndex,:)
|
||||||
plasticState(p)%atol(startIndex:endIndex) = 1.0e-2_pReal
|
plasticState(ph)%atol(startIndex:endIndex) = 1.0e-2_pReal
|
||||||
! global alias
|
! global alias
|
||||||
plasticState(p)%slipRate => plasticState(p)%dotState(startIndex:endIndex,:)
|
plasticState(ph)%slipRate => plasticState(ph)%dotState(startIndex:endIndex,:)
|
||||||
|
|
||||||
startIndex = endIndex + 1
|
startIndex = endIndex + 1
|
||||||
endIndex = endIndex + prm%sum_N_tw
|
endIndex = endIndex + prm%sum_N_tw
|
||||||
stt%f_tw=>plasticState(p)%state(startIndex:endIndex,:)
|
stt%f_tw=>plasticState(ph)%state(startIndex:endIndex,:)
|
||||||
dot%f_tw=>plasticState(p)%dotState(startIndex:endIndex,:)
|
dot%f_tw=>plasticState(ph)%dotState(startIndex:endIndex,:)
|
||||||
plasticState(p)%atol(startIndex:endIndex) = pl%get_asFloat('f_twin',defaultVal=1.0e-7_pReal)
|
plasticState(ph)%atol(startIndex:endIndex) = pl%get_asFloat('f_twin',defaultVal=1.0e-7_pReal)
|
||||||
if (any(plasticState(p)%atol(startIndex:endIndex) < 0.0_pReal)) extmsg = trim(extmsg)//' f_twin'
|
if (any(plasticState(ph)%atol(startIndex:endIndex) < 0.0_pReal)) extmsg = trim(extmsg)//' f_twin'
|
||||||
|
|
||||||
startIndex = endIndex + 1
|
startIndex = endIndex + 1
|
||||||
endIndex = endIndex + prm%sum_N_tr
|
endIndex = endIndex + prm%sum_N_tr
|
||||||
stt%f_tr=>plasticState(p)%state(startIndex:endIndex,:)
|
stt%f_tr=>plasticState(ph)%state(startIndex:endIndex,:)
|
||||||
dot%f_tr=>plasticState(p)%dotState(startIndex:endIndex,:)
|
dot%f_tr=>plasticState(ph)%dotState(startIndex:endIndex,:)
|
||||||
plasticState(p)%atol(startIndex:endIndex) = pl%get_asFloat('f_trans',defaultVal=1.0e-6_pReal)
|
plasticState(ph)%atol(startIndex:endIndex) = pl%get_asFloat('f_trans',defaultVal=1.0e-6_pReal)
|
||||||
if (any(plasticState(p)%atol(startIndex:endIndex) < 0.0_pReal)) extmsg = trim(extmsg)//' f_trans'
|
if (any(plasticState(ph)%atol(startIndex:endIndex) < 0.0_pReal)) extmsg = trim(extmsg)//' f_trans'
|
||||||
|
|
||||||
allocate(dst%Lambda_sl (prm%sum_N_sl,Nconstituents),source=0.0_pReal)
|
allocate(dst%Lambda_sl (prm%sum_N_sl,Nconstituents),source=0.0_pReal)
|
||||||
allocate(dst%tau_pass (prm%sum_N_sl,Nconstituents),source=0.0_pReal)
|
allocate(dst%tau_pass (prm%sum_N_sl,Nconstituents),source=0.0_pReal)
|
||||||
|
@ -469,7 +466,7 @@ module function plastic_dislotwin_init() result(myPlasticity)
|
||||||
allocate(dst%tau_r_tr (prm%sum_N_tr,Nconstituents),source=0.0_pReal)
|
allocate(dst%tau_r_tr (prm%sum_N_tr,Nconstituents),source=0.0_pReal)
|
||||||
allocate(dst%V_tr (prm%sum_N_tr,Nconstituents),source=0.0_pReal)
|
allocate(dst%V_tr (prm%sum_N_tr,Nconstituents),source=0.0_pReal)
|
||||||
|
|
||||||
plasticState(p)%state0 = plasticState(p)%state ! ToDo: this could be done centrally
|
plasticState(ph)%state0 = plasticState(ph)%state ! ToDo: this could be done centrally
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
|
|
||||||
|
|
|
@ -22,8 +22,6 @@ submodule(phase:plastic) isotropic
|
||||||
c_4, &
|
c_4, &
|
||||||
c_3, &
|
c_3, &
|
||||||
c_2
|
c_2
|
||||||
integer :: &
|
|
||||||
of_debug = 0
|
|
||||||
logical :: &
|
logical :: &
|
||||||
dilatation
|
dilatation
|
||||||
character(len=pStringLen), allocatable, dimension(:) :: &
|
character(len=pStringLen), allocatable, dimension(:) :: &
|
||||||
|
@ -53,8 +51,7 @@ module function plastic_isotropic_init() result(myPlasticity)
|
||||||
|
|
||||||
logical, dimension(:), allocatable :: myPlasticity
|
logical, dimension(:), allocatable :: myPlasticity
|
||||||
integer :: &
|
integer :: &
|
||||||
p, &
|
ph, &
|
||||||
i, &
|
|
||||||
Nconstituents, &
|
Nconstituents, &
|
||||||
sizeState, sizeDotState
|
sizeState, sizeDotState
|
||||||
real(pReal) :: &
|
real(pReal) :: &
|
||||||
|
@ -82,16 +79,14 @@ module function plastic_isotropic_init() result(myPlasticity)
|
||||||
allocate(state(phases%length))
|
allocate(state(phases%length))
|
||||||
allocate(dotState(phases%length))
|
allocate(dotState(phases%length))
|
||||||
|
|
||||||
do p = 1, phases%length
|
do ph = 1, phases%length
|
||||||
if(.not. myPlasticity(p)) cycle
|
if(.not. myPlasticity(ph)) cycle
|
||||||
phase => phases%get(p)
|
|
||||||
mech => phase%get('mechanics')
|
|
||||||
i = p
|
|
||||||
associate(prm => param(i), &
|
|
||||||
dot => dotState(i), &
|
|
||||||
stt => state(i))
|
|
||||||
pl => mech%get('plasticity')
|
|
||||||
|
|
||||||
|
associate(prm => param(ph), dot => dotState(ph), stt => state(ph))
|
||||||
|
|
||||||
|
phase => phases%get(ph)
|
||||||
|
mech => phase%get('mechanics')
|
||||||
|
pl => mech%get('plasticity')
|
||||||
|
|
||||||
#if defined (__GFORTRAN__)
|
#if defined (__GFORTRAN__)
|
||||||
prm%output = output_asStrings(pl)
|
prm%output = output_asStrings(pl)
|
||||||
|
@ -99,11 +94,6 @@ module function plastic_isotropic_init() result(myPlasticity)
|
||||||
prm%output = pl%get_asStrings('output',defaultVal=emptyStringArray)
|
prm%output = pl%get_asStrings('output',defaultVal=emptyStringArray)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
if (p==material_phaseAt(debugConstitutive%grain,debugConstitutive%element)) &
|
|
||||||
prm%of_debug = material_phasememberAt(debugConstitutive%grain,debugConstitutive%ip,debugConstitutive%element)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
xi_0 = pl%get_asFloat('xi_0')
|
xi_0 = pl%get_asFloat('xi_0')
|
||||||
prm%xi_inf = pl%get_asFloat('xi_inf')
|
prm%xi_inf = pl%get_asFloat('xi_inf')
|
||||||
prm%dot_gamma_0 = pl%get_asFloat('dot_gamma_0')
|
prm%dot_gamma_0 = pl%get_asFloat('dot_gamma_0')
|
||||||
|
@ -129,28 +119,28 @@ module function plastic_isotropic_init() result(myPlasticity)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! allocate state arrays
|
! allocate state arrays
|
||||||
Nconstituents = count(material_phaseAt2 == p)
|
Nconstituents = count(material_phaseAt2 == ph)
|
||||||
sizeDotState = size(['xi ','gamma'])
|
sizeDotState = size(['xi ','gamma'])
|
||||||
sizeState = sizeDotState
|
sizeState = sizeDotState
|
||||||
|
|
||||||
call phase_allocateState(plasticState(p),Nconstituents,sizeState,sizeDotState,0)
|
call phase_allocateState(plasticState(ph),Nconstituents,sizeState,sizeDotState,0)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! state aliases and initialization
|
! state aliases and initialization
|
||||||
stt%xi => plasticState(p)%state (1,:)
|
stt%xi => plasticState(ph)%state (1,:)
|
||||||
stt%xi = xi_0
|
stt%xi = xi_0
|
||||||
dot%xi => plasticState(p)%dotState(1,:)
|
dot%xi => plasticState(ph)%dotState(1,:)
|
||||||
plasticState(p)%atol(1) = pl%get_asFloat('atol_xi',defaultVal=1.0_pReal)
|
plasticState(ph)%atol(1) = pl%get_asFloat('atol_xi',defaultVal=1.0_pReal)
|
||||||
if (plasticState(p)%atol(1) < 0.0_pReal) extmsg = trim(extmsg)//' atol_xi'
|
if (plasticState(ph)%atol(1) < 0.0_pReal) extmsg = trim(extmsg)//' atol_xi'
|
||||||
|
|
||||||
stt%gamma => plasticState(p)%state (2,:)
|
stt%gamma => plasticState(ph)%state (2,:)
|
||||||
dot%gamma => plasticState(p)%dotState(2,:)
|
dot%gamma => plasticState(ph)%dotState(2,:)
|
||||||
plasticState(p)%atol(2) = pl%get_asFloat('atol_gamma',defaultVal=1.0e-6_pReal)
|
plasticState(ph)%atol(2) = pl%get_asFloat('atol_gamma',defaultVal=1.0e-6_pReal)
|
||||||
if (plasticState(p)%atol(2) < 0.0_pReal) extmsg = trim(extmsg)//' atol_gamma'
|
if (plasticState(ph)%atol(2) < 0.0_pReal) extmsg = trim(extmsg)//' atol_gamma'
|
||||||
! global alias
|
! global alias
|
||||||
plasticState(p)%slipRate => plasticState(p)%dotState(2:2,:)
|
plasticState(ph)%slipRate => plasticState(ph)%dotState(2:2,:)
|
||||||
|
|
||||||
plasticState(p)%state0 = plasticState(p)%state ! ToDo: this could be done centrally
|
plasticState(ph)%state0 = plasticState(ph)%state ! ToDo: this could be done centrally
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
|
|
||||||
|
@ -244,9 +234,7 @@ module subroutine plastic_isotropic_LiAndItsTangent(Li,dLi_dMi,Mi,ph,me)
|
||||||
Li = math_I3 &
|
Li = math_I3 &
|
||||||
* prm%dot_gamma_0/prm%M * (3.0_pReal*prm%M*stt%xi(me))**(-prm%n) &
|
* prm%dot_gamma_0/prm%M * (3.0_pReal*prm%M*stt%xi(me))**(-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
|
||||||
Li = 0.0_pReal
|
Li = 0.0_pReal
|
||||||
dLi_dMi = 0.0_pReal
|
dLi_dMi = 0.0_pReal
|
||||||
|
|
|
@ -25,8 +25,7 @@ submodule(phase:plastic) kinehardening
|
||||||
nonSchmid_pos, &
|
nonSchmid_pos, &
|
||||||
nonSchmid_neg
|
nonSchmid_neg
|
||||||
integer :: &
|
integer :: &
|
||||||
sum_N_sl, & !< total number of active slip system
|
sum_N_sl
|
||||||
of_debug = 0
|
|
||||||
logical :: &
|
logical :: &
|
||||||
nonSchmidActive = .false.
|
nonSchmidActive = .false.
|
||||||
character(len=pStringLen), allocatable, dimension(:) :: &
|
character(len=pStringLen), allocatable, dimension(:) :: &
|
||||||
|
@ -62,7 +61,7 @@ module function plastic_kinehardening_init() result(myPlasticity)
|
||||||
|
|
||||||
logical, dimension(:), allocatable :: myPlasticity
|
logical, dimension(:), allocatable :: myPlasticity
|
||||||
integer :: &
|
integer :: &
|
||||||
p, i, o, &
|
ph, o, &
|
||||||
Nconstituents, &
|
Nconstituents, &
|
||||||
sizeState, sizeDeltaState, sizeDotState, &
|
sizeState, sizeDeltaState, sizeDotState, &
|
||||||
startIndex, endIndex
|
startIndex, endIndex
|
||||||
|
@ -93,15 +92,13 @@ module function plastic_kinehardening_init() result(myPlasticity)
|
||||||
allocate(deltaState(phases%length))
|
allocate(deltaState(phases%length))
|
||||||
|
|
||||||
|
|
||||||
do p = 1, phases%length
|
do ph = 1, phases%length
|
||||||
if(.not. myPlasticity(p)) cycle
|
if(.not. myPlasticity(ph)) cycle
|
||||||
phase => phases%get(p)
|
|
||||||
|
associate(prm => param(ph), dot => dotState(ph), dlt => deltaState(ph), stt => state(ph))
|
||||||
|
|
||||||
|
phase => phases%get(ph)
|
||||||
mech => phase%get('mechanics')
|
mech => phase%get('mechanics')
|
||||||
i = p
|
|
||||||
associate(prm => param(i), &
|
|
||||||
dot => dotState(i), &
|
|
||||||
dlt => deltaState(i), &
|
|
||||||
stt => state(i))
|
|
||||||
pl => mech%get('plasticity')
|
pl => mech%get('plasticity')
|
||||||
|
|
||||||
#if defined (__GFORTRAN__)
|
#if defined (__GFORTRAN__)
|
||||||
|
@ -110,12 +107,6 @@ module function plastic_kinehardening_init() result(myPlasticity)
|
||||||
prm%output = pl%get_asStrings('output',defaultVal=emptyStringArray)
|
prm%output = pl%get_asStrings('output',defaultVal=emptyStringArray)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
if (p==material_phaseAt(debugConstitutive%grain,debugConstitutive%element)) then
|
|
||||||
prm%of_debug = material_phasememberAt(debugConstitutive%grain,debugConstitutive%ip,debugConstitutive%element)
|
|
||||||
endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! slip related parameters
|
! slip related parameters
|
||||||
N_sl = pl%get_asInts('N_sl',defaultVal=emptyIntArray)
|
N_sl = pl%get_asInts('N_sl',defaultVal=emptyIntArray)
|
||||||
|
@ -174,55 +165,55 @@ module function plastic_kinehardening_init() result(myPlasticity)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! allocate state arrays
|
! allocate state arrays
|
||||||
Nconstituents = count(material_phaseAt2 == p)
|
Nconstituents = count(material_phaseAt2 == ph)
|
||||||
sizeDotState = size(['crss ','crss_back', 'accshear ']) * prm%sum_N_sl!ToDo: adjust names, ask Philip
|
sizeDotState = size(['crss ','crss_back', 'accshear ']) * prm%sum_N_sl !ToDo: adjust names like in material.yaml
|
||||||
sizeDeltaState = size(['sense ', 'chi0 ', 'gamma0' ]) * prm%sum_N_sl !ToDo: adjust names
|
sizeDeltaState = size(['sense ', 'chi0 ', 'gamma0' ]) * prm%sum_N_sl !ToDo: adjust names like in material.yaml
|
||||||
sizeState = sizeDotState + sizeDeltaState
|
sizeState = sizeDotState + sizeDeltaState
|
||||||
|
|
||||||
call phase_allocateState(plasticState(p),Nconstituents,sizeState,sizeDotState,sizeDeltaState)
|
call phase_allocateState(plasticState(ph),Nconstituents,sizeState,sizeDotState,sizeDeltaState)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! state aliases and initialization
|
! state aliases and initialization
|
||||||
startIndex = 1
|
startIndex = 1
|
||||||
endIndex = prm%sum_N_sl
|
endIndex = prm%sum_N_sl
|
||||||
stt%crss => plasticState(p)%state (startIndex:endIndex,:)
|
stt%crss => plasticState(ph)%state (startIndex:endIndex,:)
|
||||||
stt%crss = spread(xi_0, 2, Nconstituents)
|
stt%crss = spread(xi_0, 2, Nconstituents)
|
||||||
dot%crss => plasticState(p)%dotState(startIndex:endIndex,:)
|
dot%crss => plasticState(ph)%dotState(startIndex:endIndex,:)
|
||||||
plasticState(p)%atol(startIndex:endIndex) = pl%get_asFloat('atol_xi',defaultVal=1.0_pReal)
|
plasticState(ph)%atol(startIndex:endIndex) = pl%get_asFloat('atol_xi',defaultVal=1.0_pReal)
|
||||||
if(any(plasticState(p)%atol(startIndex:endIndex) < 0.0_pReal)) extmsg = trim(extmsg)//' atol_xi'
|
if(any(plasticState(ph)%atol(startIndex:endIndex) < 0.0_pReal)) extmsg = trim(extmsg)//' atol_xi'
|
||||||
|
|
||||||
startIndex = endIndex + 1
|
startIndex = endIndex + 1
|
||||||
endIndex = endIndex + prm%sum_N_sl
|
endIndex = endIndex + prm%sum_N_sl
|
||||||
stt%crss_back => plasticState(p)%state (startIndex:endIndex,:)
|
stt%crss_back => plasticState(ph)%state (startIndex:endIndex,:)
|
||||||
dot%crss_back => plasticState(p)%dotState(startIndex:endIndex,:)
|
dot%crss_back => plasticState(ph)%dotState(startIndex:endIndex,:)
|
||||||
plasticState(p)%atol(startIndex:endIndex) = pl%get_asFloat('atol_xi',defaultVal=1.0_pReal)
|
plasticState(ph)%atol(startIndex:endIndex) = pl%get_asFloat('atol_xi',defaultVal=1.0_pReal)
|
||||||
|
|
||||||
startIndex = endIndex + 1
|
startIndex = endIndex + 1
|
||||||
endIndex = endIndex + prm%sum_N_sl
|
endIndex = endIndex + prm%sum_N_sl
|
||||||
stt%accshear => plasticState(p)%state (startIndex:endIndex,:)
|
stt%accshear => plasticState(ph)%state (startIndex:endIndex,:)
|
||||||
dot%accshear => plasticState(p)%dotState(startIndex:endIndex,:)
|
dot%accshear => plasticState(ph)%dotState(startIndex:endIndex,:)
|
||||||
plasticState(p)%atol(startIndex:endIndex) = pl%get_asFloat('atol_gamma',defaultVal=1.0e-6_pReal)
|
plasticState(ph)%atol(startIndex:endIndex) = pl%get_asFloat('atol_gamma',defaultVal=1.0e-6_pReal)
|
||||||
if(any(plasticState(p)%atol(startIndex:endIndex) < 0.0_pReal)) extmsg = trim(extmsg)//' atol_gamma'
|
if(any(plasticState(ph)%atol(startIndex:endIndex) < 0.0_pReal)) extmsg = trim(extmsg)//' atol_gamma'
|
||||||
! global alias
|
! global alias
|
||||||
plasticState(p)%slipRate => plasticState(p)%dotState(startIndex:endIndex,:)
|
plasticState(ph)%slipRate => plasticState(ph)%dotState(startIndex:endIndex,:)
|
||||||
|
|
||||||
o = plasticState(p)%offsetDeltaState
|
o = plasticState(ph)%offsetDeltaState
|
||||||
startIndex = endIndex + 1
|
startIndex = endIndex + 1
|
||||||
endIndex = endIndex + prm%sum_N_sl
|
endIndex = endIndex + prm%sum_N_sl
|
||||||
stt%sense => plasticState(p)%state (startIndex :endIndex ,:)
|
stt%sense => plasticState(ph)%state (startIndex :endIndex ,:)
|
||||||
dlt%sense => plasticState(p)%deltaState(startIndex-o:endIndex-o,:)
|
dlt%sense => plasticState(ph)%deltaState(startIndex-o:endIndex-o,:)
|
||||||
|
|
||||||
startIndex = endIndex + 1
|
startIndex = endIndex + 1
|
||||||
endIndex = endIndex + prm%sum_N_sl
|
endIndex = endIndex + prm%sum_N_sl
|
||||||
stt%chi0 => plasticState(p)%state (startIndex :endIndex ,:)
|
stt%chi0 => plasticState(ph)%state (startIndex :endIndex ,:)
|
||||||
dlt%chi0 => plasticState(p)%deltaState(startIndex-o:endIndex-o,:)
|
dlt%chi0 => plasticState(ph)%deltaState(startIndex-o:endIndex-o,:)
|
||||||
|
|
||||||
startIndex = endIndex + 1
|
startIndex = endIndex + 1
|
||||||
endIndex = endIndex + prm%sum_N_sl
|
endIndex = endIndex + prm%sum_N_sl
|
||||||
stt%gamma0 => plasticState(p)%state (startIndex :endIndex ,:)
|
stt%gamma0 => plasticState(ph)%state (startIndex :endIndex ,:)
|
||||||
dlt%gamma0 => plasticState(p)%deltaState(startIndex-o:endIndex-o,:)
|
dlt%gamma0 => plasticState(ph)%deltaState(startIndex-o:endIndex-o,:)
|
||||||
|
|
||||||
plasticState(p)%state0 = plasticState(p)%state ! ToDo: this could be done centrally
|
plasticState(ph)%state0 = plasticState(ph)%state ! ToDo: this could be done centrally
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
|
|
||||||
|
|
|
@ -16,8 +16,7 @@ module function plastic_none_init() result(myPlasticity)
|
||||||
|
|
||||||
logical, dimension(:), allocatable :: myPlasticity
|
logical, dimension(:), allocatable :: myPlasticity
|
||||||
integer :: &
|
integer :: &
|
||||||
p, &
|
ph
|
||||||
Nconstituents
|
|
||||||
class(tNode), pointer :: &
|
class(tNode), pointer :: &
|
||||||
phases
|
phases
|
||||||
|
|
||||||
|
@ -29,10 +28,9 @@ module function plastic_none_init() result(myPlasticity)
|
||||||
print'(a,i0)', ' # phases: ',count(myPlasticity); flush(IO_STDOUT)
|
print'(a,i0)', ' # phases: ',count(myPlasticity); flush(IO_STDOUT)
|
||||||
|
|
||||||
phases => config_material%get('phase')
|
phases => config_material%get('phase')
|
||||||
do p = 1, phases%length
|
do ph = 1, phases%length
|
||||||
if(.not. myPlasticity(p)) cycle
|
if(.not. myPlasticity(ph)) cycle
|
||||||
Nconstituents = count(material_phaseAt2 == p)
|
call phase_allocateState(plasticState(ph),count(material_phaseAt2 == ph),0,0,0)
|
||||||
call phase_allocateState(plasticState(p),Nconstituents,0,0,0)
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
end function plastic_none_init
|
end function plastic_none_init
|
||||||
|
|
|
@ -176,7 +176,7 @@ module function plastic_nonlocal_init() result(myPlasticity)
|
||||||
logical, dimension(:), allocatable :: myPlasticity
|
logical, dimension(:), allocatable :: myPlasticity
|
||||||
integer :: &
|
integer :: &
|
||||||
Ninstances, &
|
Ninstances, &
|
||||||
p, i, &
|
ph, &
|
||||||
Nconstituents, &
|
Nconstituents, &
|
||||||
sizeState, sizeDotState, sizeDependentState, sizeDeltaState, &
|
sizeState, sizeDotState, sizeDependentState, sizeDeltaState, &
|
||||||
s1, s2, &
|
s1, s2, &
|
||||||
|
@ -220,21 +220,17 @@ module function plastic_nonlocal_init() result(myPlasticity)
|
||||||
allocate(deltaState(phases%length))
|
allocate(deltaState(phases%length))
|
||||||
allocate(microstructure(phases%length))
|
allocate(microstructure(phases%length))
|
||||||
|
|
||||||
do p = 1, phases%length
|
do ph = 1, phases%length
|
||||||
if(.not. myPlasticity(p)) cycle
|
if(.not. myPlasticity(ph)) cycle
|
||||||
phase => phases%get(p)
|
|
||||||
mech => phase%get('mechanics')
|
|
||||||
|
|
||||||
i = p
|
associate(prm => param(ph), dot => dotState(ph), stt => state(ph), &
|
||||||
associate(prm => param(i), &
|
st0 => state0(ph), del => deltaState(ph), dst => microstructure(ph))
|
||||||
dot => dotState(i), &
|
|
||||||
stt => state(i), &
|
phase => phases%get(ph)
|
||||||
st0 => state0(i), &
|
mech => phase%get('mechanics')
|
||||||
del => deltaState(i), &
|
|
||||||
dst => microstructure(i))
|
|
||||||
pl => mech%get('plasticity')
|
pl => mech%get('plasticity')
|
||||||
|
|
||||||
phase_localPlasticity(p) = .not. pl%contains('nonlocal')
|
phase_localPlasticity(ph) = .not. pl%contains('nonlocal')
|
||||||
|
|
||||||
#if defined (__GFORTRAN__)
|
#if defined (__GFORTRAN__)
|
||||||
prm%output = output_asStrings(pl)
|
prm%output = output_asStrings(pl)
|
||||||
|
@ -245,8 +241,8 @@ module function plastic_nonlocal_init() result(myPlasticity)
|
||||||
prm%atol_rho = pl%get_asFloat('atol_rho',defaultVal=1.0e4_pReal)
|
prm%atol_rho = pl%get_asFloat('atol_rho',defaultVal=1.0e4_pReal)
|
||||||
|
|
||||||
! This data is read in already in lattice
|
! This data is read in already in lattice
|
||||||
prm%mu = lattice_mu(p)
|
prm%mu = lattice_mu(ph)
|
||||||
prm%nu = lattice_nu(p)
|
prm%nu = lattice_nu(ph)
|
||||||
|
|
||||||
ini%N_sl = pl%get_asInts('N_sl',defaultVal=emptyIntArray)
|
ini%N_sl = pl%get_asInts('N_sl',defaultVal=emptyIntArray)
|
||||||
prm%sum_N_sl = sum(abs(ini%N_sl))
|
prm%sum_N_sl = sum(abs(ini%N_sl))
|
||||||
|
@ -402,7 +398,7 @@ module function plastic_nonlocal_init() result(myPlasticity)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! allocate state arrays
|
! allocate state arrays
|
||||||
Nconstituents = count(material_phaseAt2 == p)
|
Nconstituents = count(material_phaseAt2 == ph)
|
||||||
sizeDotState = size([ 'rhoSglEdgePosMobile ','rhoSglEdgeNegMobile ', &
|
sizeDotState = size([ 'rhoSglEdgePosMobile ','rhoSglEdgeNegMobile ', &
|
||||||
'rhoSglScrewPosMobile ','rhoSglScrewNegMobile ', &
|
'rhoSglScrewPosMobile ','rhoSglScrewNegMobile ', &
|
||||||
'rhoSglEdgePosImmobile ','rhoSglEdgeNegImmobile ', &
|
'rhoSglEdgePosImmobile ','rhoSglEdgeNegImmobile ', &
|
||||||
|
@ -416,101 +412,101 @@ module function plastic_nonlocal_init() result(myPlasticity)
|
||||||
'maxDipoleHeightEdge ','maxDipoleHeightScrew' ]) * prm%sum_N_sl !< other dependent state variables that are not updated by microstructure
|
'maxDipoleHeightEdge ','maxDipoleHeightScrew' ]) * prm%sum_N_sl !< other dependent state variables that are not updated by microstructure
|
||||||
sizeDeltaState = sizeDotState
|
sizeDeltaState = sizeDotState
|
||||||
|
|
||||||
call phase_allocateState(plasticState(p),Nconstituents,sizeState,sizeDotState,sizeDeltaState)
|
call phase_allocateState(plasticState(ph),Nconstituents,sizeState,sizeDotState,sizeDeltaState)
|
||||||
|
|
||||||
allocate(geom(p)%V_0(Nconstituents))
|
allocate(geom(ph)%V_0(Nconstituents))
|
||||||
call storeGeometry(p)
|
call storeGeometry(ph)
|
||||||
|
|
||||||
plasticState(p)%nonlocal = pl%get_asBool('nonlocal')
|
plasticState(ph)%nonlocal = pl%get_asBool('nonlocal')
|
||||||
if(plasticState(p)%nonlocal .and. .not. allocated(IPneighborhood)) &
|
if(plasticState(ph)%nonlocal .and. .not. allocated(IPneighborhood)) &
|
||||||
call IO_error(212,ext_msg='IPneighborhood does not exist')
|
call IO_error(212,ext_msg='IPneighborhood does not exist')
|
||||||
|
|
||||||
|
|
||||||
plasticState(p)%offsetDeltaState = 0 ! ToDo: state structure does not follow convention
|
plasticState(ph)%offsetDeltaState = 0 ! ToDo: state structure does not follow convention
|
||||||
|
|
||||||
st0%rho => plasticState(p)%state0 (0*prm%sum_N_sl+1:10*prm%sum_N_sl,:)
|
st0%rho => plasticState(ph)%state0 (0*prm%sum_N_sl+1:10*prm%sum_N_sl,:)
|
||||||
stt%rho => plasticState(p)%state (0*prm%sum_N_sl+1:10*prm%sum_N_sl,:)
|
stt%rho => plasticState(ph)%state (0*prm%sum_N_sl+1:10*prm%sum_N_sl,:)
|
||||||
dot%rho => plasticState(p)%dotState (0*prm%sum_N_sl+1:10*prm%sum_N_sl,:)
|
dot%rho => plasticState(ph)%dotState (0*prm%sum_N_sl+1:10*prm%sum_N_sl,:)
|
||||||
del%rho => plasticState(p)%deltaState (0*prm%sum_N_sl+1:10*prm%sum_N_sl,:)
|
del%rho => plasticState(ph)%deltaState (0*prm%sum_N_sl+1:10*prm%sum_N_sl,:)
|
||||||
plasticState(p)%atol(1:10*prm%sum_N_sl) = prm%atol_rho
|
plasticState(ph)%atol(1:10*prm%sum_N_sl) = prm%atol_rho
|
||||||
|
|
||||||
stt%rhoSgl => plasticState(p)%state (0*prm%sum_N_sl+1: 8*prm%sum_N_sl,:)
|
stt%rhoSgl => plasticState(ph)%state (0*prm%sum_N_sl+1: 8*prm%sum_N_sl,:)
|
||||||
dot%rhoSgl => plasticState(p)%dotState (0*prm%sum_N_sl+1: 8*prm%sum_N_sl,:)
|
dot%rhoSgl => plasticState(ph)%dotState (0*prm%sum_N_sl+1: 8*prm%sum_N_sl,:)
|
||||||
del%rhoSgl => plasticState(p)%deltaState (0*prm%sum_N_sl+1: 8*prm%sum_N_sl,:)
|
del%rhoSgl => plasticState(ph)%deltaState (0*prm%sum_N_sl+1: 8*prm%sum_N_sl,:)
|
||||||
|
|
||||||
stt%rhoSglMobile => plasticState(p)%state (0*prm%sum_N_sl+1: 4*prm%sum_N_sl,:)
|
stt%rhoSglMobile => plasticState(ph)%state (0*prm%sum_N_sl+1: 4*prm%sum_N_sl,:)
|
||||||
dot%rhoSglMobile => plasticState(p)%dotState (0*prm%sum_N_sl+1: 4*prm%sum_N_sl,:)
|
dot%rhoSglMobile => plasticState(ph)%dotState (0*prm%sum_N_sl+1: 4*prm%sum_N_sl,:)
|
||||||
del%rhoSglMobile => plasticState(p)%deltaState (0*prm%sum_N_sl+1: 4*prm%sum_N_sl,:)
|
del%rhoSglMobile => plasticState(ph)%deltaState (0*prm%sum_N_sl+1: 4*prm%sum_N_sl,:)
|
||||||
|
|
||||||
stt%rho_sgl_mob_edg_pos => plasticState(p)%state (0*prm%sum_N_sl+1: 1*prm%sum_N_sl,:)
|
stt%rho_sgl_mob_edg_pos => plasticState(ph)%state (0*prm%sum_N_sl+1: 1*prm%sum_N_sl,:)
|
||||||
dot%rho_sgl_mob_edg_pos => plasticState(p)%dotState (0*prm%sum_N_sl+1: 1*prm%sum_N_sl,:)
|
dot%rho_sgl_mob_edg_pos => plasticState(ph)%dotState (0*prm%sum_N_sl+1: 1*prm%sum_N_sl,:)
|
||||||
del%rho_sgl_mob_edg_pos => plasticState(p)%deltaState (0*prm%sum_N_sl+1: 1*prm%sum_N_sl,:)
|
del%rho_sgl_mob_edg_pos => plasticState(ph)%deltaState (0*prm%sum_N_sl+1: 1*prm%sum_N_sl,:)
|
||||||
|
|
||||||
stt%rho_sgl_mob_edg_neg => plasticState(p)%state (1*prm%sum_N_sl+1: 2*prm%sum_N_sl,:)
|
stt%rho_sgl_mob_edg_neg => plasticState(ph)%state (1*prm%sum_N_sl+1: 2*prm%sum_N_sl,:)
|
||||||
dot%rho_sgl_mob_edg_neg => plasticState(p)%dotState (1*prm%sum_N_sl+1: 2*prm%sum_N_sl,:)
|
dot%rho_sgl_mob_edg_neg => plasticState(ph)%dotState (1*prm%sum_N_sl+1: 2*prm%sum_N_sl,:)
|
||||||
del%rho_sgl_mob_edg_neg => plasticState(p)%deltaState (1*prm%sum_N_sl+1: 2*prm%sum_N_sl,:)
|
del%rho_sgl_mob_edg_neg => plasticState(ph)%deltaState (1*prm%sum_N_sl+1: 2*prm%sum_N_sl,:)
|
||||||
|
|
||||||
stt%rho_sgl_mob_scr_pos => plasticState(p)%state (2*prm%sum_N_sl+1: 3*prm%sum_N_sl,:)
|
stt%rho_sgl_mob_scr_pos => plasticState(ph)%state (2*prm%sum_N_sl+1: 3*prm%sum_N_sl,:)
|
||||||
dot%rho_sgl_mob_scr_pos => plasticState(p)%dotState (2*prm%sum_N_sl+1: 3*prm%sum_N_sl,:)
|
dot%rho_sgl_mob_scr_pos => plasticState(ph)%dotState (2*prm%sum_N_sl+1: 3*prm%sum_N_sl,:)
|
||||||
del%rho_sgl_mob_scr_pos => plasticState(p)%deltaState (2*prm%sum_N_sl+1: 3*prm%sum_N_sl,:)
|
del%rho_sgl_mob_scr_pos => plasticState(ph)%deltaState (2*prm%sum_N_sl+1: 3*prm%sum_N_sl,:)
|
||||||
|
|
||||||
stt%rho_sgl_mob_scr_neg => plasticState(p)%state (3*prm%sum_N_sl+1: 4*prm%sum_N_sl,:)
|
stt%rho_sgl_mob_scr_neg => plasticState(ph)%state (3*prm%sum_N_sl+1: 4*prm%sum_N_sl,:)
|
||||||
dot%rho_sgl_mob_scr_neg => plasticState(p)%dotState (3*prm%sum_N_sl+1: 4*prm%sum_N_sl,:)
|
dot%rho_sgl_mob_scr_neg => plasticState(ph)%dotState (3*prm%sum_N_sl+1: 4*prm%sum_N_sl,:)
|
||||||
del%rho_sgl_mob_scr_neg => plasticState(p)%deltaState (3*prm%sum_N_sl+1: 4*prm%sum_N_sl,:)
|
del%rho_sgl_mob_scr_neg => plasticState(ph)%deltaState (3*prm%sum_N_sl+1: 4*prm%sum_N_sl,:)
|
||||||
|
|
||||||
stt%rhoSglImmobile => plasticState(p)%state (4*prm%sum_N_sl+1: 8*prm%sum_N_sl,:)
|
stt%rhoSglImmobile => plasticState(ph)%state (4*prm%sum_N_sl+1: 8*prm%sum_N_sl,:)
|
||||||
dot%rhoSglImmobile => plasticState(p)%dotState (4*prm%sum_N_sl+1: 8*prm%sum_N_sl,:)
|
dot%rhoSglImmobile => plasticState(ph)%dotState (4*prm%sum_N_sl+1: 8*prm%sum_N_sl,:)
|
||||||
del%rhoSglImmobile => plasticState(p)%deltaState (4*prm%sum_N_sl+1: 8*prm%sum_N_sl,:)
|
del%rhoSglImmobile => plasticState(ph)%deltaState (4*prm%sum_N_sl+1: 8*prm%sum_N_sl,:)
|
||||||
|
|
||||||
stt%rho_sgl_imm_edg_pos => plasticState(p)%state (4*prm%sum_N_sl+1: 5*prm%sum_N_sl,:)
|
stt%rho_sgl_imm_edg_pos => plasticState(ph)%state (4*prm%sum_N_sl+1: 5*prm%sum_N_sl,:)
|
||||||
dot%rho_sgl_imm_edg_pos => plasticState(p)%dotState (4*prm%sum_N_sl+1: 5*prm%sum_N_sl,:)
|
dot%rho_sgl_imm_edg_pos => plasticState(ph)%dotState (4*prm%sum_N_sl+1: 5*prm%sum_N_sl,:)
|
||||||
del%rho_sgl_imm_edg_pos => plasticState(p)%deltaState (4*prm%sum_N_sl+1: 5*prm%sum_N_sl,:)
|
del%rho_sgl_imm_edg_pos => plasticState(ph)%deltaState (4*prm%sum_N_sl+1: 5*prm%sum_N_sl,:)
|
||||||
|
|
||||||
stt%rho_sgl_imm_edg_neg => plasticState(p)%state (5*prm%sum_N_sl+1: 6*prm%sum_N_sl,:)
|
stt%rho_sgl_imm_edg_neg => plasticState(ph)%state (5*prm%sum_N_sl+1: 6*prm%sum_N_sl,:)
|
||||||
dot%rho_sgl_imm_edg_neg => plasticState(p)%dotState (5*prm%sum_N_sl+1: 6*prm%sum_N_sl,:)
|
dot%rho_sgl_imm_edg_neg => plasticState(ph)%dotState (5*prm%sum_N_sl+1: 6*prm%sum_N_sl,:)
|
||||||
del%rho_sgl_imm_edg_neg => plasticState(p)%deltaState (5*prm%sum_N_sl+1: 6*prm%sum_N_sl,:)
|
del%rho_sgl_imm_edg_neg => plasticState(ph)%deltaState (5*prm%sum_N_sl+1: 6*prm%sum_N_sl,:)
|
||||||
|
|
||||||
stt%rho_sgl_imm_scr_pos => plasticState(p)%state (6*prm%sum_N_sl+1: 7*prm%sum_N_sl,:)
|
stt%rho_sgl_imm_scr_pos => plasticState(ph)%state (6*prm%sum_N_sl+1: 7*prm%sum_N_sl,:)
|
||||||
dot%rho_sgl_imm_scr_pos => plasticState(p)%dotState (6*prm%sum_N_sl+1: 7*prm%sum_N_sl,:)
|
dot%rho_sgl_imm_scr_pos => plasticState(ph)%dotState (6*prm%sum_N_sl+1: 7*prm%sum_N_sl,:)
|
||||||
del%rho_sgl_imm_scr_pos => plasticState(p)%deltaState (6*prm%sum_N_sl+1: 7*prm%sum_N_sl,:)
|
del%rho_sgl_imm_scr_pos => plasticState(ph)%deltaState (6*prm%sum_N_sl+1: 7*prm%sum_N_sl,:)
|
||||||
|
|
||||||
stt%rho_sgl_imm_scr_neg => plasticState(p)%state (7*prm%sum_N_sl+1: 8*prm%sum_N_sl,:)
|
stt%rho_sgl_imm_scr_neg => plasticState(ph)%state (7*prm%sum_N_sl+1: 8*prm%sum_N_sl,:)
|
||||||
dot%rho_sgl_imm_scr_neg => plasticState(p)%dotState (7*prm%sum_N_sl+1: 8*prm%sum_N_sl,:)
|
dot%rho_sgl_imm_scr_neg => plasticState(ph)%dotState (7*prm%sum_N_sl+1: 8*prm%sum_N_sl,:)
|
||||||
del%rho_sgl_imm_scr_neg => plasticState(p)%deltaState (7*prm%sum_N_sl+1: 8*prm%sum_N_sl,:)
|
del%rho_sgl_imm_scr_neg => plasticState(ph)%deltaState (7*prm%sum_N_sl+1: 8*prm%sum_N_sl,:)
|
||||||
|
|
||||||
stt%rhoDip => plasticState(p)%state (8*prm%sum_N_sl+1:10*prm%sum_N_sl,:)
|
stt%rhoDip => plasticState(ph)%state (8*prm%sum_N_sl+1:10*prm%sum_N_sl,:)
|
||||||
dot%rhoDip => plasticState(p)%dotState (8*prm%sum_N_sl+1:10*prm%sum_N_sl,:)
|
dot%rhoDip => plasticState(ph)%dotState (8*prm%sum_N_sl+1:10*prm%sum_N_sl,:)
|
||||||
del%rhoDip => plasticState(p)%deltaState (8*prm%sum_N_sl+1:10*prm%sum_N_sl,:)
|
del%rhoDip => plasticState(ph)%deltaState (8*prm%sum_N_sl+1:10*prm%sum_N_sl,:)
|
||||||
|
|
||||||
stt%rho_dip_edg => plasticState(p)%state (8*prm%sum_N_sl+1: 9*prm%sum_N_sl,:)
|
stt%rho_dip_edg => plasticState(ph)%state (8*prm%sum_N_sl+1: 9*prm%sum_N_sl,:)
|
||||||
dot%rho_dip_edg => plasticState(p)%dotState (8*prm%sum_N_sl+1: 9*prm%sum_N_sl,:)
|
dot%rho_dip_edg => plasticState(ph)%dotState (8*prm%sum_N_sl+1: 9*prm%sum_N_sl,:)
|
||||||
del%rho_dip_edg => plasticState(p)%deltaState (8*prm%sum_N_sl+1: 9*prm%sum_N_sl,:)
|
del%rho_dip_edg => plasticState(ph)%deltaState (8*prm%sum_N_sl+1: 9*prm%sum_N_sl,:)
|
||||||
|
|
||||||
stt%rho_dip_scr => plasticState(p)%state (9*prm%sum_N_sl+1:10*prm%sum_N_sl,:)
|
stt%rho_dip_scr => plasticState(ph)%state (9*prm%sum_N_sl+1:10*prm%sum_N_sl,:)
|
||||||
dot%rho_dip_scr => plasticState(p)%dotState (9*prm%sum_N_sl+1:10*prm%sum_N_sl,:)
|
dot%rho_dip_scr => plasticState(ph)%dotState (9*prm%sum_N_sl+1:10*prm%sum_N_sl,:)
|
||||||
del%rho_dip_scr => plasticState(p)%deltaState (9*prm%sum_N_sl+1:10*prm%sum_N_sl,:)
|
del%rho_dip_scr => plasticState(ph)%deltaState (9*prm%sum_N_sl+1:10*prm%sum_N_sl,:)
|
||||||
|
|
||||||
stt%gamma => plasticState(p)%state (10*prm%sum_N_sl + 1:11*prm%sum_N_sl,1:Nconstituents)
|
stt%gamma => plasticState(ph)%state (10*prm%sum_N_sl + 1:11*prm%sum_N_sl,1:Nconstituents)
|
||||||
dot%gamma => plasticState(p)%dotState (10*prm%sum_N_sl + 1:11*prm%sum_N_sl,1:Nconstituents)
|
dot%gamma => plasticState(ph)%dotState (10*prm%sum_N_sl + 1:11*prm%sum_N_sl,1:Nconstituents)
|
||||||
del%gamma => plasticState(p)%deltaState (10*prm%sum_N_sl + 1:11*prm%sum_N_sl,1:Nconstituents)
|
del%gamma => plasticState(ph)%deltaState (10*prm%sum_N_sl + 1:11*prm%sum_N_sl,1:Nconstituents)
|
||||||
plasticState(p)%atol(10*prm%sum_N_sl+1:11*prm%sum_N_sl ) = pl%get_asFloat('atol_gamma', defaultVal = 1.0e-2_pReal)
|
plasticState(ph)%atol(10*prm%sum_N_sl+1:11*prm%sum_N_sl ) = pl%get_asFloat('atol_gamma', defaultVal = 1.0e-2_pReal)
|
||||||
if(any(plasticState(p)%atol(10*prm%sum_N_sl+1:11*prm%sum_N_sl) < 0.0_pReal)) &
|
if(any(plasticState(ph)%atol(10*prm%sum_N_sl+1:11*prm%sum_N_sl) < 0.0_pReal)) &
|
||||||
extmsg = trim(extmsg)//' atol_gamma'
|
extmsg = trim(extmsg)//' atol_gamma'
|
||||||
plasticState(p)%slipRate => plasticState(p)%dotState (10*prm%sum_N_sl + 1:11*prm%sum_N_sl,1:Nconstituents)
|
plasticState(ph)%slipRate => plasticState(ph)%dotState (10*prm%sum_N_sl + 1:11*prm%sum_N_sl,1:Nconstituents)
|
||||||
|
|
||||||
stt%rho_forest => plasticState(p)%state (11*prm%sum_N_sl + 1:12*prm%sum_N_sl,1:Nconstituents)
|
stt%rho_forest => plasticState(ph)%state (11*prm%sum_N_sl + 1:12*prm%sum_N_sl,1:Nconstituents)
|
||||||
stt%v => plasticState(p)%state (12*prm%sum_N_sl + 1:16*prm%sum_N_sl,1:Nconstituents)
|
stt%v => plasticState(ph)%state (12*prm%sum_N_sl + 1:16*prm%sum_N_sl,1:Nconstituents)
|
||||||
stt%v_edg_pos => plasticState(p)%state (12*prm%sum_N_sl + 1:13*prm%sum_N_sl,1:Nconstituents)
|
stt%v_edg_pos => plasticState(ph)%state (12*prm%sum_N_sl + 1:13*prm%sum_N_sl,1:Nconstituents)
|
||||||
stt%v_edg_neg => plasticState(p)%state (13*prm%sum_N_sl + 1:14*prm%sum_N_sl,1:Nconstituents)
|
stt%v_edg_neg => plasticState(ph)%state (13*prm%sum_N_sl + 1:14*prm%sum_N_sl,1:Nconstituents)
|
||||||
stt%v_scr_pos => plasticState(p)%state (14*prm%sum_N_sl + 1:15*prm%sum_N_sl,1:Nconstituents)
|
stt%v_scr_pos => plasticState(ph)%state (14*prm%sum_N_sl + 1:15*prm%sum_N_sl,1:Nconstituents)
|
||||||
stt%v_scr_neg => plasticState(p)%state (15*prm%sum_N_sl + 1:16*prm%sum_N_sl,1:Nconstituents)
|
stt%v_scr_neg => plasticState(ph)%state (15*prm%sum_N_sl + 1:16*prm%sum_N_sl,1:Nconstituents)
|
||||||
|
|
||||||
allocate(dst%tau_pass(prm%sum_N_sl,Nconstituents),source=0.0_pReal)
|
allocate(dst%tau_pass(prm%sum_N_sl,Nconstituents),source=0.0_pReal)
|
||||||
allocate(dst%tau_back(prm%sum_N_sl,Nconstituents),source=0.0_pReal)
|
allocate(dst%tau_back(prm%sum_N_sl,Nconstituents),source=0.0_pReal)
|
||||||
end associate
|
end associate
|
||||||
|
|
||||||
if (Nconstituents > 0) call stateInit(ini,p,Nconstituents)
|
if (Nconstituents > 0) call stateInit(ini,ph,Nconstituents)
|
||||||
plasticState(p)%state0 = plasticState(p)%state
|
plasticState(ph)%state0 = plasticState(ph)%state
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! exit if any parameter is out of range
|
! exit if any parameter is out of range
|
||||||
|
@ -526,35 +522,34 @@ module function plastic_nonlocal_init() result(myPlasticity)
|
||||||
allocate(iV(maxval(param%sum_N_sl),4,phases%length), source=0)
|
allocate(iV(maxval(param%sum_N_sl),4,phases%length), source=0)
|
||||||
allocate(iD(maxval(param%sum_N_sl),2,phases%length), source=0)
|
allocate(iD(maxval(param%sum_N_sl),2,phases%length), source=0)
|
||||||
|
|
||||||
do p = 1, phases%length
|
do ph = 1, phases%length
|
||||||
phase => phases%get(p)
|
|
||||||
|
|
||||||
if(.not. myPlasticity(p)) cycle
|
if(.not. myPlasticity(ph)) cycle
|
||||||
i = p
|
|
||||||
|
|
||||||
Nconstituents = count(material_phaseAt2 == p)
|
phase => phases%get(ph)
|
||||||
|
Nconstituents = count(material_phaseAt2 == ph)
|
||||||
l = 0
|
l = 0
|
||||||
do t = 1,4
|
do t = 1,4
|
||||||
do s = 1,param(i)%sum_N_sl
|
do s = 1,param(ph)%sum_N_sl
|
||||||
l = l + 1
|
l = l + 1
|
||||||
iRhoU(s,t,i) = l
|
iRhoU(s,t,ph) = l
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
l = l + (4+2+1+1)*param(i)%sum_N_sl ! immobile(4), dipole(2), shear, forest
|
l = l + (4+2+1+1)*param(ph)%sum_N_sl ! immobile(4), dipole(2), shear, forest
|
||||||
do t = 1,4
|
do t = 1,4
|
||||||
do s = 1,param(i)%sum_N_sl
|
do s = 1,param(ph)%sum_N_sl
|
||||||
l = l + 1
|
l = l + 1
|
||||||
iV(s,t,i) = l
|
iV(s,t,ph) = l
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
do t = 1,2
|
do t = 1,2
|
||||||
do s = 1,param(i)%sum_N_sl
|
do s = 1,param(ph)%sum_N_sl
|
||||||
l = l + 1
|
l = l + 1
|
||||||
iD(s,t,i) = l
|
iD(s,t,ph) = l
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
if (iD(param(i)%sum_N_sl,2,i) /= plasticState(p)%sizeState) &
|
if (iD(param(ph)%sum_N_sl,2,ph) /= plasticState(ph)%sizeState) &
|
||||||
call IO_error(0, ext_msg = 'state indices not properly set (nonlocal)')
|
error stop 'state indices not properly set (nonlocal)'
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
end function plastic_nonlocal_init
|
end function plastic_nonlocal_init
|
||||||
|
|
|
@ -70,7 +70,7 @@ module function plastic_phenopowerlaw_init() result(myPlasticity)
|
||||||
|
|
||||||
logical, dimension(:), allocatable :: myPlasticity
|
logical, dimension(:), allocatable :: myPlasticity
|
||||||
integer :: &
|
integer :: &
|
||||||
p, i, &
|
ph, i, &
|
||||||
Nconstituents, &
|
Nconstituents, &
|
||||||
sizeState, sizeDotState, &
|
sizeState, sizeDotState, &
|
||||||
startIndex, endIndex
|
startIndex, endIndex
|
||||||
|
@ -101,14 +101,13 @@ module function plastic_phenopowerlaw_init() result(myPlasticity)
|
||||||
allocate(state(phases%length))
|
allocate(state(phases%length))
|
||||||
allocate(dotState(phases%length))
|
allocate(dotState(phases%length))
|
||||||
|
|
||||||
do p = 1, phases%length
|
do ph = 1, phases%length
|
||||||
if(.not. myPlasticity(p)) cycle
|
if(.not. myPlasticity(ph)) cycle
|
||||||
phase => phases%get(p)
|
|
||||||
|
associate(prm => param(ph), dot => dotState(ph), stt => state(ph))
|
||||||
|
|
||||||
|
phase => phases%get(ph)
|
||||||
mech => phase%get('mechanics')
|
mech => phase%get('mechanics')
|
||||||
i = p
|
|
||||||
associate(prm => param(i), &
|
|
||||||
dot => dotState(i), &
|
|
||||||
stt => state(i))
|
|
||||||
pl => mech%get('plasticity')
|
pl => mech%get('plasticity')
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
@ -224,49 +223,49 @@ module function plastic_phenopowerlaw_init() result(myPlasticity)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! allocate state arrays
|
! allocate state arrays
|
||||||
Nconstituents = count(material_phaseAt2 == p)
|
Nconstituents = count(material_phaseAt2 == ph)
|
||||||
sizeDotState = size(['xi_sl ','gamma_sl']) * prm%sum_N_sl &
|
sizeDotState = size(['xi_sl ','gamma_sl']) * prm%sum_N_sl &
|
||||||
+ size(['xi_tw ','gamma_tw']) * prm%sum_N_tw
|
+ size(['xi_tw ','gamma_tw']) * prm%sum_N_tw
|
||||||
sizeState = sizeDotState
|
sizeState = sizeDotState
|
||||||
|
|
||||||
|
|
||||||
call phase_allocateState(plasticState(p),Nconstituents,sizeState,sizeDotState,0)
|
call phase_allocateState(plasticState(ph),Nconstituents,sizeState,sizeDotState,0)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! state aliases and initialization
|
! state aliases and initialization
|
||||||
startIndex = 1
|
startIndex = 1
|
||||||
endIndex = prm%sum_N_sl
|
endIndex = prm%sum_N_sl
|
||||||
stt%xi_slip => plasticState(p)%state (startIndex:endIndex,:)
|
stt%xi_slip => plasticState(ph)%state (startIndex:endIndex,:)
|
||||||
stt%xi_slip = spread(xi_0_sl, 2, Nconstituents)
|
stt%xi_slip = spread(xi_0_sl, 2, Nconstituents)
|
||||||
dot%xi_slip => plasticState(p)%dotState(startIndex:endIndex,:)
|
dot%xi_slip => plasticState(ph)%dotState(startIndex:endIndex,:)
|
||||||
plasticState(p)%atol(startIndex:endIndex) = pl%get_asFloat('atol_xi',defaultVal=1.0_pReal)
|
plasticState(ph)%atol(startIndex:endIndex) = pl%get_asFloat('atol_xi',defaultVal=1.0_pReal)
|
||||||
if(any(plasticState(p)%atol(startIndex:endIndex) < 0.0_pReal)) extmsg = trim(extmsg)//' atol_xi'
|
if(any(plasticState(ph)%atol(startIndex:endIndex) < 0.0_pReal)) extmsg = trim(extmsg)//' atol_xi'
|
||||||
|
|
||||||
startIndex = endIndex + 1
|
startIndex = endIndex + 1
|
||||||
endIndex = endIndex + prm%sum_N_tw
|
endIndex = endIndex + prm%sum_N_tw
|
||||||
stt%xi_twin => plasticState(p)%state (startIndex:endIndex,:)
|
stt%xi_twin => plasticState(ph)%state (startIndex:endIndex,:)
|
||||||
stt%xi_twin = spread(xi_0_tw, 2, Nconstituents)
|
stt%xi_twin = spread(xi_0_tw, 2, Nconstituents)
|
||||||
dot%xi_twin => plasticState(p)%dotState(startIndex:endIndex,:)
|
dot%xi_twin => plasticState(ph)%dotState(startIndex:endIndex,:)
|
||||||
plasticState(p)%atol(startIndex:endIndex) = pl%get_asFloat('atol_xi',defaultVal=1.0_pReal)
|
plasticState(ph)%atol(startIndex:endIndex) = pl%get_asFloat('atol_xi',defaultVal=1.0_pReal)
|
||||||
if(any(plasticState(p)%atol(startIndex:endIndex) < 0.0_pReal)) extmsg = trim(extmsg)//' atol_xi'
|
if(any(plasticState(ph)%atol(startIndex:endIndex) < 0.0_pReal)) extmsg = trim(extmsg)//' atol_xi'
|
||||||
|
|
||||||
startIndex = endIndex + 1
|
startIndex = endIndex + 1
|
||||||
endIndex = endIndex + prm%sum_N_sl
|
endIndex = endIndex + prm%sum_N_sl
|
||||||
stt%gamma_slip => plasticState(p)%state (startIndex:endIndex,:)
|
stt%gamma_slip => plasticState(ph)%state (startIndex:endIndex,:)
|
||||||
dot%gamma_slip => plasticState(p)%dotState(startIndex:endIndex,:)
|
dot%gamma_slip => plasticState(ph)%dotState(startIndex:endIndex,:)
|
||||||
plasticState(p)%atol(startIndex:endIndex) = pl%get_asFloat('atol_gamma',defaultVal=1.0e-6_pReal)
|
plasticState(ph)%atol(startIndex:endIndex) = pl%get_asFloat('atol_gamma',defaultVal=1.0e-6_pReal)
|
||||||
if(any(plasticState(p)%atol(startIndex:endIndex) < 0.0_pReal)) extmsg = trim(extmsg)//' atol_gamma'
|
if(any(plasticState(ph)%atol(startIndex:endIndex) < 0.0_pReal)) extmsg = trim(extmsg)//' atol_gamma'
|
||||||
! global alias
|
! global alias
|
||||||
plasticState(p)%slipRate => plasticState(p)%dotState(startIndex:endIndex,:)
|
plasticState(ph)%slipRate => plasticState(ph)%dotState(startIndex:endIndex,:)
|
||||||
|
|
||||||
startIndex = endIndex + 1
|
startIndex = endIndex + 1
|
||||||
endIndex = endIndex + prm%sum_N_tw
|
endIndex = endIndex + prm%sum_N_tw
|
||||||
stt%gamma_twin => plasticState(p)%state (startIndex:endIndex,:)
|
stt%gamma_twin => plasticState(ph)%state (startIndex:endIndex,:)
|
||||||
dot%gamma_twin => plasticState(p)%dotState(startIndex:endIndex,:)
|
dot%gamma_twin => plasticState(ph)%dotState(startIndex:endIndex,:)
|
||||||
plasticState(p)%atol(startIndex:endIndex) = pl%get_asFloat('atol_gamma',defaultVal=1.0e-6_pReal)
|
plasticState(ph)%atol(startIndex:endIndex) = pl%get_asFloat('atol_gamma',defaultVal=1.0e-6_pReal)
|
||||||
if(any(plasticState(p)%atol(startIndex:endIndex) < 0.0_pReal)) extmsg = trim(extmsg)//' atol_gamma'
|
if(any(plasticState(ph)%atol(startIndex:endIndex) < 0.0_pReal)) extmsg = trim(extmsg)//' atol_gamma'
|
||||||
|
|
||||||
plasticState(p)%state0 = plasticState(p)%state ! ToDo: this could be done centrally
|
plasticState(ph)%state0 = plasticState(ph)%state ! ToDo: this could be done centrally
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue