no need to store atol
This commit is contained in:
parent
eb08f9f0b2
commit
38b755740b
|
@ -12,7 +12,6 @@ submodule(constitutive) plastic_disloUCLA
|
||||||
|
|
||||||
type :: tParameters
|
type :: tParameters
|
||||||
real(pReal) :: &
|
real(pReal) :: &
|
||||||
aTol_rho, &
|
|
||||||
D, & !< grain size
|
D, & !< grain size
|
||||||
mu, &
|
mu, &
|
||||||
D_0, & !< prefactor for self-diffusion coefficient
|
D_0, & !< prefactor for self-diffusion coefficient
|
||||||
|
@ -92,7 +91,7 @@ module subroutine plastic_disloUCLA_init
|
||||||
character(len=pStringLen) :: &
|
character(len=pStringLen) :: &
|
||||||
extmsg = ''
|
extmsg = ''
|
||||||
|
|
||||||
write(6,'(/,a)') ' <<<+- plastic_'//PLASTICITY_DISLOUCLA_label//' init -+>>>'; flush(6)
|
write(6,'(/,a)') ' <<<+- plastic_'//PLASTICITY_DISLOUCLA_LABEL//' init -+>>>'; flush(6)
|
||||||
|
|
||||||
write(6,'(/,a)') ' Cereceda et al., International Journal of Plasticity 78:242–256, 2016'
|
write(6,'(/,a)') ' Cereceda et al., International Journal of Plasticity 78:242–256, 2016'
|
||||||
write(6,'(a)') ' https://dx.doi.org/10.1016/j.ijplas.2015.09.002'
|
write(6,'(a)') ' https://dx.doi.org/10.1016/j.ijplas.2015.09.002'
|
||||||
|
@ -115,15 +114,11 @@ module subroutine plastic_disloUCLA_init
|
||||||
dst => dependentState(phase_plasticityInstance(p)), &
|
dst => dependentState(phase_plasticityInstance(p)), &
|
||||||
config => config_phase(p))
|
config => config_phase(p))
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
prm%output = config%getStrings('(output)',defaultVal=emptyStringArray)
|
||||||
! optional parameters that need to be defined
|
|
||||||
|
! This data is read in already in lattice
|
||||||
prm%mu = lattice_mu(p)
|
prm%mu = lattice_mu(p)
|
||||||
|
|
||||||
prm%aTol_rho = config%getFloat('atol_rho')
|
|
||||||
|
|
||||||
! sanity checks
|
|
||||||
if (prm%aTol_rho <= 0.0_pReal) extmsg = trim(extmsg)//' atol_rho'
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! slip related parameters
|
! slip related parameters
|
||||||
prm%N_sl = config%getInts('nslip',defaultVal=emptyIntArray)
|
prm%N_sl = config%getInts('nslip',defaultVal=emptyIntArray)
|
||||||
|
@ -209,15 +204,6 @@ module subroutine plastic_disloUCLA_init
|
||||||
allocate(prm%rho_dip_0(0))
|
allocate(prm%rho_dip_0(0))
|
||||||
endif slipActive
|
endif slipActive
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
! exit if any parameter is out of range
|
|
||||||
if (extmsg /= '') &
|
|
||||||
call IO_error(211,ext_msg=trim(extmsg)//'('//PLASTICITY_DISLOUCLA_label//')')
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
! output pararameters
|
|
||||||
prm%output = config%getStrings('(output)',defaultVal=emptyStringArray)
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! allocate state arrays
|
! allocate state arrays
|
||||||
NipcMyPhase = count(material_phaseAt == p) * discretization_nIP
|
NipcMyPhase = count(material_phaseAt == p) * discretization_nIP
|
||||||
|
@ -227,26 +213,28 @@ module subroutine plastic_disloUCLA_init
|
||||||
call material_allocatePlasticState(p,NipcMyPhase,sizeState,sizeDotState,0)
|
call material_allocatePlasticState(p,NipcMyPhase,sizeState,sizeDotState,0)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! locally defined state aliases and initialization of state0 and aTolState
|
! locally defined state aliases and initialization of state0 and atolState
|
||||||
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(p)%state(startIndex:endIndex,:)
|
||||||
stt%rho_mob= spread(prm%rho_mob_0,2,NipcMyPhase)
|
stt%rho_mob= spread(prm%rho_mob_0,2,NipcMyPhase)
|
||||||
dot%rho_mob=>plasticState(p)%dotState(startIndex:endIndex,:)
|
dot%rho_mob=>plasticState(p)%dotState(startIndex:endIndex,:)
|
||||||
plasticState(p)%aTolState(startIndex:endIndex) = prm%aTol_rho
|
plasticState(p)%atolState(startIndex:endIndex) = config%getFloat('atol_rho')
|
||||||
|
if (any(plasticState(p)%atolState(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(p)%state(startIndex:endIndex,:)
|
||||||
stt%rho_dip= spread(prm%rho_dip_0,2,NipcMyPhase)
|
stt%rho_dip= spread(prm%rho_dip_0,2,NipcMyPhase)
|
||||||
dot%rho_dip=>plasticState(p)%dotState(startIndex:endIndex,:)
|
dot%rho_dip=>plasticState(p)%dotState(startIndex:endIndex,:)
|
||||||
plasticState(p)%aTolState(startIndex:endIndex) = prm%aTol_rho
|
plasticState(p)%atolState(startIndex:endIndex) = config%getFloat('atol_rho')
|
||||||
|
|
||||||
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(p)%state(startIndex:endIndex,:)
|
||||||
dot%gamma_sl=>plasticState(p)%dotState(startIndex:endIndex,:)
|
dot%gamma_sl=>plasticState(p)%dotState(startIndex:endIndex,:)
|
||||||
plasticState(p)%aTolState(startIndex:endIndex) = 1.0e6_pReal ! Don't use for convergence check
|
plasticState(p)%atolState(startIndex:endIndex) = 1.0e6_pReal ! Don't use for convergence check
|
||||||
! global alias
|
! global alias
|
||||||
plasticState(p)%slipRate => plasticState(p)%dotState(startIndex:endIndex,:)
|
plasticState(p)%slipRate => plasticState(p)%dotState(startIndex:endIndex,:)
|
||||||
|
|
||||||
|
@ -257,6 +245,10 @@ module subroutine plastic_disloUCLA_init
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
! exit if any parameter is out of range
|
||||||
|
if (extmsg /= '') call IO_error(211,ext_msg=trim(extmsg)//'('//PLASTICITY_DISLOUCLA_LABEL//')')
|
||||||
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
end subroutine plastic_disloUCLA_init
|
end subroutine plastic_disloUCLA_init
|
||||||
|
|
|
@ -22,9 +22,7 @@ submodule(constitutive) plastic_isotropic
|
||||||
c_1, &
|
c_1, &
|
||||||
c_4, &
|
c_4, &
|
||||||
c_3, &
|
c_3, &
|
||||||
c_2, &
|
c_2
|
||||||
aTol_xi, &
|
|
||||||
aTol_gamma
|
|
||||||
integer :: &
|
integer :: &
|
||||||
of_debug = 0
|
of_debug = 0
|
||||||
logical :: &
|
logical :: &
|
||||||
|
@ -63,7 +61,7 @@ module subroutine plastic_isotropic_init
|
||||||
character(len=pStringLen) :: &
|
character(len=pStringLen) :: &
|
||||||
extmsg = ''
|
extmsg = ''
|
||||||
|
|
||||||
write(6,'(/,a)') ' <<<+- plastic_'//PLASTICITY_ISOTROPIC_label//' init -+>>>'; flush(6)
|
write(6,'(/,a)') ' <<<+- plastic_'//PLASTICITY_ISOTROPIC_LABEL//' init -+>>>'; flush(6)
|
||||||
|
|
||||||
write(6,'(/,a)') ' Maiti and Eisenlohr, Scripta Materialia 145:37–40, 2018'
|
write(6,'(/,a)') ' Maiti and Eisenlohr, Scripta Materialia 145:37–40, 2018'
|
||||||
write(6,'(a)') ' https://doi.org/10.1016/j.scriptamat.2017.09.047'
|
write(6,'(a)') ' https://doi.org/10.1016/j.scriptamat.2017.09.047'
|
||||||
|
@ -83,6 +81,8 @@ module subroutine plastic_isotropic_init
|
||||||
stt => state(phase_plasticityInstance(p)), &
|
stt => state(phase_plasticityInstance(p)), &
|
||||||
config => config_phase(p))
|
config => config_phase(p))
|
||||||
|
|
||||||
|
prm%output = config%getStrings('(output)',defaultVal=emptyStringArray)
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
if (p==material_phaseAt(debug_g,debug_e)) &
|
if (p==material_phaseAt(debug_g,debug_e)) &
|
||||||
prm%of_debug = material_phasememberAt(debug_g,debug_i,debug_e)
|
prm%of_debug = material_phasememberAt(debug_g,debug_i,debug_e)
|
||||||
|
@ -100,31 +100,16 @@ module subroutine plastic_isotropic_init
|
||||||
prm%c_3 = config%getFloat('tausat_sinhfitc',defaultVal=0.0_pReal)
|
prm%c_3 = config%getFloat('tausat_sinhfitc',defaultVal=0.0_pReal)
|
||||||
prm%c_2 = config%getFloat('tausat_sinhfitd',defaultVal=0.0_pReal)
|
prm%c_2 = config%getFloat('tausat_sinhfitd',defaultVal=0.0_pReal)
|
||||||
prm%a = config%getFloat('a')
|
prm%a = config%getFloat('a')
|
||||||
prm%aTol_xi = config%getFloat('atol_flowstress',defaultVal=1.0_pReal)
|
|
||||||
prm%aTol_gamma = config%getFloat('atol_shear', defaultVal=1.0e-6_pReal)
|
|
||||||
|
|
||||||
prm%dilatation = config%keyExists('/dilatation/')
|
prm%dilatation = config%keyExists('/dilatation/')
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! sanity checks
|
! sanity checks
|
||||||
extmsg = ''
|
|
||||||
if (prm%aTol_gamma <= 0.0_pReal) extmsg = trim(extmsg)//' aTol_gamma'
|
|
||||||
if (prm%xi_0 < 0.0_pReal) extmsg = trim(extmsg)//' xi_0'
|
if (prm%xi_0 < 0.0_pReal) extmsg = trim(extmsg)//' xi_0'
|
||||||
if (prm%dot_gamma_0 <= 0.0_pReal) extmsg = trim(extmsg)//' dot_gamma_0'
|
if (prm%dot_gamma_0 <= 0.0_pReal) extmsg = trim(extmsg)//' dot_gamma_0'
|
||||||
if (prm%n <= 0.0_pReal) extmsg = trim(extmsg)//' n'
|
if (prm%n <= 0.0_pReal) extmsg = trim(extmsg)//' n'
|
||||||
if (prm%a <= 0.0_pReal) extmsg = trim(extmsg)//' a'
|
if (prm%a <= 0.0_pReal) extmsg = trim(extmsg)//' a'
|
||||||
if (prm%M <= 0.0_pReal) extmsg = trim(extmsg)//' m'
|
if (prm%M <= 0.0_pReal) extmsg = trim(extmsg)//' m'
|
||||||
if (prm%aTol_xi <= 0.0_pReal) extmsg = trim(extmsg)//' atol_xi'
|
|
||||||
if (prm%aTol_gamma <= 0.0_pReal) extmsg = trim(extmsg)//' atol_shear'
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
! exit if any parameter is out of range
|
|
||||||
if (extmsg /= '') &
|
|
||||||
call IO_error(211,ext_msg=trim(extmsg)//'('//PLASTICITY_ISOTROPIC_label//')')
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
! output pararameters
|
|
||||||
prm%output = config%getStrings('(output)',defaultVal=emptyStringArray)
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! allocate state arrays
|
! allocate state arrays
|
||||||
|
@ -135,15 +120,18 @@ module subroutine plastic_isotropic_init
|
||||||
call material_allocatePlasticState(p,NipcMyPhase,sizeState,sizeDotState,0)
|
call material_allocatePlasticState(p,NipcMyPhase,sizeState,sizeDotState,0)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! locally defined state aliases and initialization of state0 and aTolState
|
! locally defined state aliases and initialization of state0 and atolState
|
||||||
stt%xi => plasticState(p)%state (1,:)
|
stt%xi => plasticState(p)%state (1,:)
|
||||||
stt%xi = prm%xi_0
|
stt%xi = prm%xi_0
|
||||||
dot%xi => plasticState(p)%dotState(1,:)
|
dot%xi => plasticState(p)%dotState(1,:)
|
||||||
plasticState(p)%aTolState(1) = prm%aTol_xi
|
plasticState(p)%atolState(1) = config%getFloat('atol_flowstress',defaultVal=1.0_pReal)
|
||||||
|
if (plasticState(p)%atolState(1) <= 0.0_pReal) extmsg = trim(extmsg)//' atol_xi'
|
||||||
|
|
||||||
stt%gamma => plasticState(p)%state (2,:)
|
stt%gamma => plasticState(p)%state (2,:)
|
||||||
dot%gamma => plasticState(p)%dotState(2,:)
|
dot%gamma => plasticState(p)%dotState(2,:)
|
||||||
plasticState(p)%aTolState(2) = prm%aTol_gamma
|
plasticState(p)%atolState(2) = config%getFloat('atol_shear',defaultVal=1.0e-6_pReal)
|
||||||
|
if (plasticState(p)%atolState(2) <= 0.0_pReal) extmsg = trim(extmsg)//' atol_gamma'
|
||||||
|
|
||||||
! global alias
|
! global alias
|
||||||
plasticState(p)%slipRate => plasticState(p)%dotState(2:2,:)
|
plasticState(p)%slipRate => plasticState(p)%dotState(2:2,:)
|
||||||
|
|
||||||
|
@ -151,6 +139,10 @@ module subroutine plastic_isotropic_init
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
! exit if any parameter is out of range
|
||||||
|
if (extmsg /= '') call IO_error(211,ext_msg=trim(extmsg)//'('//PLASTICITY_ISOTROPIC_LABEL//')')
|
||||||
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
end subroutine plastic_isotropic_init
|
end subroutine plastic_isotropic_init
|
||||||
|
|
|
@ -10,9 +10,7 @@ submodule(constitutive) plastic_kinehardening
|
||||||
type :: tParameters
|
type :: tParameters
|
||||||
real(pReal) :: &
|
real(pReal) :: &
|
||||||
gdot0, & !< reference shear strain rate for slip
|
gdot0, & !< reference shear strain rate for slip
|
||||||
n, & !< stress exponent for slip
|
n !< stress exponent for slip
|
||||||
aTolResistance, &
|
|
||||||
aTolShear
|
|
||||||
real(pReal), allocatable, dimension(:) :: &
|
real(pReal), allocatable, dimension(:) :: &
|
||||||
crss0, & !< initial critical shear stress for slip
|
crss0, & !< initial critical shear stress for slip
|
||||||
theta0, & !< initial hardening rate of forward stress for each slip
|
theta0, & !< initial hardening rate of forward stress for each slip
|
||||||
|
@ -74,7 +72,7 @@ module subroutine plastic_kinehardening_init
|
||||||
character(len=pStringLen) :: &
|
character(len=pStringLen) :: &
|
||||||
extmsg = ''
|
extmsg = ''
|
||||||
|
|
||||||
write(6,'(/,a)') ' <<<+- plastic_'//PLASTICITY_KINEHARDENING_label//' init -+>>>'; flush(6)
|
write(6,'(/,a)') ' <<<+- plastic_'//PLASTICITY_KINEHARDENING_LABEL//' init -+>>>'; flush(6)
|
||||||
|
|
||||||
Ninstance = count(phase_plasticity == PLASTICITY_KINEHARDENING_ID)
|
Ninstance = count(phase_plasticity == PLASTICITY_KINEHARDENING_ID)
|
||||||
if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0) &
|
if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0) &
|
||||||
|
@ -93,21 +91,14 @@ module subroutine plastic_kinehardening_init
|
||||||
stt => state(phase_plasticityInstance(p)),&
|
stt => state(phase_plasticityInstance(p)),&
|
||||||
config => config_phase(p))
|
config => config_phase(p))
|
||||||
|
|
||||||
|
prm%output = config%getStrings('(output)',defaultVal=emptyStringArray)
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
if (p==material_phaseAt(debug_g,debug_e)) then
|
if (p==material_phaseAt(debug_g,debug_e)) then
|
||||||
prm%of_debug = material_phasememberAt(debug_g,debug_i,debug_e)
|
prm%of_debug = material_phasememberAt(debug_g,debug_i,debug_e)
|
||||||
endif
|
endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
! optional parameters that need to be defined
|
|
||||||
prm%aTolResistance = config%getFloat('atol_resistance',defaultVal=1.0_pReal)
|
|
||||||
prm%aTolShear = config%getFloat('atol_shear', defaultVal=1.0e-6_pReal)
|
|
||||||
|
|
||||||
! sanity checks
|
|
||||||
if (prm%aTolResistance <= 0.0_pReal) extmsg = trim(extmsg)//' aTolresistance'
|
|
||||||
if (prm%aTolShear <= 0.0_pReal) extmsg = trim(extmsg)//' aTolShear'
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! slip related parameters
|
! slip related parameters
|
||||||
prm%Nslip = config%getInts('nslip',defaultVal=emptyIntArray)
|
prm%Nslip = config%getInts('nslip',defaultVal=emptyIntArray)
|
||||||
|
@ -163,15 +154,6 @@ module subroutine plastic_kinehardening_init
|
||||||
|
|
||||||
endif slipActive
|
endif slipActive
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
! exit if any parameter is out of range
|
|
||||||
if (extmsg /= '') &
|
|
||||||
call IO_error(211,ext_msg=trim(extmsg)//'('//PLASTICITY_KINEHARDENING_label//')')
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
! output pararameters
|
|
||||||
prm%output = config%getStrings('(output)',defaultVal=emptyStringArray)
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! allocate state arrays
|
! allocate state arrays
|
||||||
NipcMyPhase = count(material_phaseAt == p) * discretization_nIP
|
NipcMyPhase = count(material_phaseAt == p) * discretization_nIP
|
||||||
|
@ -182,27 +164,31 @@ module subroutine plastic_kinehardening_init
|
||||||
call material_allocatePlasticState(p,NipcMyPhase,sizeState,sizeDotState,sizeDeltaState)
|
call material_allocatePlasticState(p,NipcMyPhase,sizeState,sizeDotState,sizeDeltaState)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! locally defined state aliases and initialization of state0 and aTolState
|
! locally defined state aliases and initialization of state0 and atolState
|
||||||
startIndex = 1
|
startIndex = 1
|
||||||
endIndex = prm%totalNslip
|
endIndex = prm%totalNslip
|
||||||
stt%crss => plasticState(p)%state (startIndex:endIndex,:)
|
stt%crss => plasticState(p)%state (startIndex:endIndex,:)
|
||||||
stt%crss = spread(prm%crss0, 2, NipcMyPhase)
|
stt%crss = spread(prm%crss0, 2, NipcMyPhase)
|
||||||
dot%crss => plasticState(p)%dotState(startIndex:endIndex,:)
|
dot%crss => plasticState(p)%dotState(startIndex:endIndex,:)
|
||||||
plasticState(p)%aTolState(startIndex:endIndex) = prm%aTolResistance
|
plasticState(p)%atolState(startIndex:endIndex) = config%getFloat('atol_resistance',defaultVal=1.0_pReal)
|
||||||
|
if(any(plasticState(p)%atolState(startIndex:endIndex) <= 0.0_pReal)) &
|
||||||
|
extmsg = trim(extmsg)//' atol_crss'
|
||||||
|
|
||||||
startIndex = endIndex + 1
|
startIndex = endIndex + 1
|
||||||
endIndex = endIndex + prm%totalNslip
|
endIndex = endIndex + prm%totalNslip
|
||||||
stt%crss_back => plasticState(p)%state (startIndex:endIndex,:)
|
stt%crss_back => plasticState(p)%state (startIndex:endIndex,:)
|
||||||
dot%crss_back => plasticState(p)%dotState(startIndex:endIndex,:)
|
dot%crss_back => plasticState(p)%dotState(startIndex:endIndex,:)
|
||||||
plasticState(p)%aTolState(startIndex:endIndex) = prm%aTolResistance
|
plasticState(p)%atolState(startIndex:endIndex) = config%getFloat('atol_resistance',defaultVal=1.0_pReal)
|
||||||
|
|
||||||
startIndex = endIndex + 1
|
startIndex = endIndex + 1
|
||||||
endIndex = endIndex + prm%totalNslip
|
endIndex = endIndex + prm%totalNslip
|
||||||
stt%accshear => plasticState(p)%state (startIndex:endIndex,:)
|
stt%accshear => plasticState(p)%state (startIndex:endIndex,:)
|
||||||
dot%accshear => plasticState(p)%dotState(startIndex:endIndex,:)
|
dot%accshear => plasticState(p)%dotState(startIndex:endIndex,:)
|
||||||
plasticState(p)%aTolState(startIndex:endIndex) = prm%aTolShear
|
plasticState(p)%atolState(startIndex:endIndex) = config%getFloat('atol_shear',defaultVal=1.0e-6_pReal)
|
||||||
|
if(any(plasticState(p)%atolState(startIndex:endIndex) <= 0.0_pReal)) &
|
||||||
|
extmsg = trim(extmsg)//' atol_gamma'
|
||||||
! global alias
|
! global alias
|
||||||
plasticState(p)%slipRate => plasticState(p)%dotState(startIndex:endIndex,:)
|
plasticState(p)%slipRate => plasticState(p)%dotState(startIndex:endIndex,:)
|
||||||
|
|
||||||
o = plasticState(p)%offsetDeltaState
|
o = plasticState(p)%offsetDeltaState
|
||||||
startIndex = endIndex + 1
|
startIndex = endIndex + 1
|
||||||
|
@ -224,8 +210,13 @@ module subroutine plastic_kinehardening_init
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
! exit if any parameter is out of range
|
||||||
|
if (extmsg /= '') call IO_error(211,ext_msg=trim(extmsg)//'('//PLASTICITY_KINEHARDENING_LABEL//')')
|
||||||
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
|
||||||
end subroutine plastic_kinehardening_init
|
end subroutine plastic_kinehardening_init
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,6 @@ module source_damage_anisoBrittle
|
||||||
|
|
||||||
type :: tParameters !< container type for internal constitutive parameters
|
type :: tParameters !< container type for internal constitutive parameters
|
||||||
real(pReal) :: &
|
real(pReal) :: &
|
||||||
aTol, &
|
|
||||||
sdot_0, &
|
sdot_0, &
|
||||||
N
|
N
|
||||||
real(pReal), dimension(:), allocatable :: &
|
real(pReal), dimension(:), allocatable :: &
|
||||||
|
@ -84,10 +83,11 @@ subroutine source_damage_anisoBrittle_init
|
||||||
associate(prm => param(source_damage_anisoBrittle_instance(p)), &
|
associate(prm => param(source_damage_anisoBrittle_instance(p)), &
|
||||||
config => config_phase(p))
|
config => config_phase(p))
|
||||||
|
|
||||||
|
prm%output = config%getStrings('(output)',defaultVal=emptyStringArray)
|
||||||
|
|
||||||
prm%Ncleavage = config%getInts('ncleavage',defaultVal=emptyIntArray)
|
prm%Ncleavage = config%getInts('ncleavage',defaultVal=emptyIntArray)
|
||||||
prm%totalNcleavage = sum(prm%Ncleavage)
|
prm%totalNcleavage = sum(prm%Ncleavage)
|
||||||
|
|
||||||
prm%aTol = config%getFloat('anisobrittle_atol',defaultVal = 1.0e-3_pReal)
|
|
||||||
prm%N = config%getFloat('anisobrittle_ratesensitivity')
|
prm%N = config%getFloat('anisobrittle_ratesensitivity')
|
||||||
prm%sdot_0 = config%getFloat('anisobrittle_sdot0')
|
prm%sdot_0 = config%getFloat('anisobrittle_sdot0')
|
||||||
|
|
||||||
|
@ -102,26 +102,24 @@ subroutine source_damage_anisoBrittle_init
|
||||||
prm%critLoad = math_expand(prm%critLoad, prm%Ncleavage)
|
prm%critLoad = math_expand(prm%critLoad, prm%Ncleavage)
|
||||||
|
|
||||||
! sanity checks
|
! sanity checks
|
||||||
if (prm%aTol < 0.0_pReal) extmsg = trim(extmsg)//' anisobrittle_atol'
|
|
||||||
if (prm%N <= 0.0_pReal) extmsg = trim(extmsg)//' anisobrittle_n'
|
if (prm%N <= 0.0_pReal) extmsg = trim(extmsg)//' anisobrittle_n'
|
||||||
if (prm%sdot_0 <= 0.0_pReal) extmsg = trim(extmsg)//' anisobrittle_sdot0'
|
if (prm%sdot_0 <= 0.0_pReal) extmsg = trim(extmsg)//' anisobrittle_sdot0'
|
||||||
if (any(prm%critLoad < 0.0_pReal)) extmsg = trim(extmsg)//' anisobrittle_critLoad'
|
if (any(prm%critLoad < 0.0_pReal)) extmsg = trim(extmsg)//' anisobrittle_critLoad'
|
||||||
if (any(prm%critDisp < 0.0_pReal)) extmsg = trim(extmsg)//' anisobrittle_critDisp'
|
if (any(prm%critDisp < 0.0_pReal)) extmsg = trim(extmsg)//' anisobrittle_critDisp'
|
||||||
|
|
||||||
|
NofMyPhase = count(material_phaseAt==p) * discretization_nIP
|
||||||
|
call material_allocateSourceState(p,sourceOffset,NofMyPhase,1,1,0)
|
||||||
|
sourceState(p)%p(sourceOffset)%atolState = config%getFloat('anisobrittle_atol',defaultVal=1.0e-3_pReal)
|
||||||
|
if(any(sourceState(p)%p(sourceOffset)%atolState <= 0.0_pReal)) &
|
||||||
|
extmsg = trim(extmsg)//' anisobrittle_atol'
|
||||||
|
|
||||||
|
end associate
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! exit if any parameter is out of range
|
! exit if any parameter is out of range
|
||||||
if (extmsg /= '') call IO_error(211,ext_msg=trim(extmsg)//'('//SOURCE_DAMAGE_ANISOBRITTLE_LABEL//')')
|
if (extmsg /= '') call IO_error(211,ext_msg=trim(extmsg)//'('//SOURCE_DAMAGE_ANISOBRITTLE_LABEL//')')
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
enddo
|
||||||
! output pararameters
|
|
||||||
prm%output = config%getStrings('(output)',defaultVal=emptyStringArray)
|
|
||||||
|
|
||||||
NofMyPhase = count(material_phaseAt==p) * discretization_nIP
|
|
||||||
call material_allocateSourceState(p,sourceOffset,NofMyPhase,1,1,0)
|
|
||||||
sourceState(p)%p(sourceOffset)%aTolState=prm%aTol
|
|
||||||
|
|
||||||
end associate
|
|
||||||
enddo
|
|
||||||
|
|
||||||
end subroutine source_damage_anisoBrittle_init
|
end subroutine source_damage_anisoBrittle_init
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,6 @@ module source_damage_anisoDuctile
|
||||||
|
|
||||||
type, private :: tParameters !< container type for internal constitutive parameters
|
type, private :: tParameters !< container type for internal constitutive parameters
|
||||||
real(pReal) :: &
|
real(pReal) :: &
|
||||||
aTol, &
|
|
||||||
N
|
N
|
||||||
real(pReal), dimension(:), allocatable :: &
|
real(pReal), dimension(:), allocatable :: &
|
||||||
critPlasticStrain
|
critPlasticStrain
|
||||||
|
@ -79,10 +78,11 @@ subroutine source_damage_anisoDuctile_init
|
||||||
associate(prm => param(source_damage_anisoDuctile_instance(p)), &
|
associate(prm => param(source_damage_anisoDuctile_instance(p)), &
|
||||||
config => config_phase(p))
|
config => config_phase(p))
|
||||||
|
|
||||||
|
prm%output = config%getStrings('(output)',defaultVal=emptyStringArray)
|
||||||
|
|
||||||
prm%Nslip = config%getInts('nslip',defaultVal=emptyIntArray)
|
prm%Nslip = config%getInts('nslip',defaultVal=emptyIntArray)
|
||||||
prm%totalNslip = sum(prm%Nslip)
|
prm%totalNslip = sum(prm%Nslip)
|
||||||
|
|
||||||
prm%aTol = config%getFloat('anisoductile_atol',defaultVal = 1.0e-3_pReal)
|
|
||||||
prm%N = config%getFloat('anisoductile_ratesensitivity')
|
prm%N = config%getFloat('anisoductile_ratesensitivity')
|
||||||
|
|
||||||
prm%critPlasticStrain = config%getFloats('anisoductile_criticalplasticstrain',requiredSize=size(prm%Nslip))
|
prm%critPlasticStrain = config%getFloats('anisoductile_criticalplasticstrain',requiredSize=size(prm%Nslip))
|
||||||
|
@ -91,24 +91,22 @@ subroutine source_damage_anisoDuctile_init
|
||||||
prm%critPlasticStrain = math_expand(prm%critPlasticStrain, prm%Nslip)
|
prm%critPlasticStrain = math_expand(prm%critPlasticStrain, prm%Nslip)
|
||||||
|
|
||||||
! sanity checks
|
! sanity checks
|
||||||
if (prm%aTol < 0.0_pReal) extmsg = trim(extmsg)//' anisoductile_atol'
|
|
||||||
if (prm%N <= 0.0_pReal) extmsg = trim(extmsg)//' anisoductile_ratesensitivity'
|
if (prm%N <= 0.0_pReal) extmsg = trim(extmsg)//' anisoductile_ratesensitivity'
|
||||||
if (any(prm%critPlasticStrain < 0.0_pReal)) extmsg = trim(extmsg)//' anisoductile_criticalplasticstrain'
|
if (any(prm%critPlasticStrain < 0.0_pReal)) extmsg = trim(extmsg)//' anisoductile_criticalplasticstrain'
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
! exit if any parameter is out of range
|
|
||||||
if (extmsg /= '') call IO_error(211,ext_msg=trim(extmsg)//'('//SOURCE_DAMAGE_ANISODUCTILE_LABEL//')')
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
! output pararameters
|
|
||||||
prm%output = config%getStrings('(output)',defaultVal=emptyStringArray)
|
|
||||||
|
|
||||||
NofMyPhase=count(material_phaseAt==p) * discretization_nIP
|
NofMyPhase=count(material_phaseAt==p) * discretization_nIP
|
||||||
call material_allocateSourceState(p,sourceOffset,NofMyPhase,1,1,0)
|
call material_allocateSourceState(p,sourceOffset,NofMyPhase,1,1,0)
|
||||||
sourceState(p)%p(sourceOffset)%aTolState=prm%aTol
|
sourceState(p)%p(sourceOffset)%atolState = config%getFloat('anisoductile_atol',defaultVal=1.0e-3_pReal)
|
||||||
|
if(any(sourceState(p)%p(sourceOffset)%atolState <=0.0_pReal)) &
|
||||||
|
extmsg = trim(extmsg)//' anisoductile_atol'
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
enddo
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
! exit if any parameter is out of range
|
||||||
|
if (extmsg /= '') call IO_error(211,ext_msg=trim(extmsg)//'('//SOURCE_DAMAGE_ANISODUCTILE_LABEL//')')
|
||||||
|
|
||||||
|
enddo
|
||||||
|
|
||||||
end subroutine source_damage_anisoDuctile_init
|
end subroutine source_damage_anisoDuctile_init
|
||||||
|
|
||||||
|
|
|
@ -24,8 +24,7 @@ module source_damage_isoBrittle
|
||||||
type, private :: tParameters !< container type for internal constitutive parameters
|
type, private :: tParameters !< container type for internal constitutive parameters
|
||||||
real(pReal) :: &
|
real(pReal) :: &
|
||||||
critStrainEnergy, &
|
critStrainEnergy, &
|
||||||
N, &
|
N
|
||||||
aTol
|
|
||||||
character(len=pStringLen), allocatable, dimension(:) :: &
|
character(len=pStringLen), allocatable, dimension(:) :: &
|
||||||
output
|
output
|
||||||
end type tParameters
|
end type tParameters
|
||||||
|
@ -74,30 +73,28 @@ subroutine source_damage_isoBrittle_init
|
||||||
associate(prm => param(source_damage_isoBrittle_instance(p)), &
|
associate(prm => param(source_damage_isoBrittle_instance(p)), &
|
||||||
config => config_phase(p))
|
config => config_phase(p))
|
||||||
|
|
||||||
prm%aTol = config%getFloat('isobrittle_atol',defaultVal = 1.0e-3_pReal)
|
prm%output = config%getStrings('(output)',defaultVal=emptyStringArray)
|
||||||
|
|
||||||
prm%N = config%getFloat('isobrittle_n')
|
prm%N = config%getFloat('isobrittle_n')
|
||||||
prm%critStrainEnergy = config%getFloat('isobrittle_criticalstrainenergy')
|
prm%critStrainEnergy = config%getFloat('isobrittle_criticalstrainenergy')
|
||||||
|
|
||||||
! sanity checks
|
! sanity checks
|
||||||
if (prm%aTol < 0.0_pReal) extmsg = trim(extmsg)//' isobrittle_atol'
|
|
||||||
if (prm%N <= 0.0_pReal) extmsg = trim(extmsg)//' isobrittle_n'
|
if (prm%N <= 0.0_pReal) extmsg = trim(extmsg)//' isobrittle_n'
|
||||||
if (prm%critStrainEnergy <= 0.0_pReal) extmsg = trim(extmsg)//' isobrittle_criticalstrainenergy'
|
if (prm%critStrainEnergy <= 0.0_pReal) extmsg = trim(extmsg)//' isobrittle_criticalstrainenergy'
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
! exit if any parameter is out of range
|
|
||||||
if (extmsg /= '') &
|
|
||||||
call IO_error(211,ext_msg=trim(extmsg)//'('//SOURCE_DAMAGE_ISOBRITTLE_LABEL//')')
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
! output pararameters
|
|
||||||
prm%output = config%getStrings('(output)',defaultVal=emptyStringArray)
|
|
||||||
|
|
||||||
NofMyPhase = count(material_phaseAt==p) * discretization_nIP
|
NofMyPhase = count(material_phaseAt==p) * discretization_nIP
|
||||||
call material_allocateSourceState(p,sourceOffset,NofMyPhase,1,1,1)
|
call material_allocateSourceState(p,sourceOffset,NofMyPhase,1,1,1)
|
||||||
sourceState(p)%p(sourceOffset)%aTolState=prm%aTol
|
sourceState(p)%p(sourceOffset)%atolState = config%getFloat('isobrittle_atol',defaultVal=1.0e-3_pReal)
|
||||||
|
if(any(sourceState(p)%p(sourceOffset)%atolState <= 0.0_pReal)) &
|
||||||
|
extmsg = trim(extmsg)//' isobrittle_atol'
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
enddo
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
! exit if any parameter is out of range
|
||||||
|
if (extmsg /= '') call IO_error(211,ext_msg=trim(extmsg)//'('//SOURCE_DAMAGE_ISOBRITTLE_LABEL//')')
|
||||||
|
|
||||||
|
enddo
|
||||||
|
|
||||||
end subroutine source_damage_isoBrittle_init
|
end subroutine source_damage_isoBrittle_init
|
||||||
|
|
||||||
|
|
|
@ -23,8 +23,7 @@ module source_damage_isoDuctile
|
||||||
type, private :: tParameters !< container type for internal constitutive parameters
|
type, private :: tParameters !< container type for internal constitutive parameters
|
||||||
real(pReal) :: &
|
real(pReal) :: &
|
||||||
critPlasticStrain, &
|
critPlasticStrain, &
|
||||||
N, &
|
N
|
||||||
aTol
|
|
||||||
character(len=pStringLen), allocatable, dimension(:) :: &
|
character(len=pStringLen), allocatable, dimension(:) :: &
|
||||||
output
|
output
|
||||||
end type tParameters
|
end type tParameters
|
||||||
|
@ -73,30 +72,28 @@ subroutine source_damage_isoDuctile_init
|
||||||
associate(prm => param(source_damage_isoDuctile_instance(p)), &
|
associate(prm => param(source_damage_isoDuctile_instance(p)), &
|
||||||
config => config_phase(p))
|
config => config_phase(p))
|
||||||
|
|
||||||
prm%aTol = config%getFloat('isoductile_atol',defaultVal = 1.0e-3_pReal)
|
prm%output = config%getStrings('(output)',defaultVal=emptyStringArray)
|
||||||
|
|
||||||
prm%N = config%getFloat('isoductile_ratesensitivity')
|
prm%N = config%getFloat('isoductile_ratesensitivity')
|
||||||
prm%critPlasticStrain = config%getFloat('isoductile_criticalplasticstrain')
|
prm%critPlasticStrain = config%getFloat('isoductile_criticalplasticstrain')
|
||||||
|
|
||||||
! sanity checks
|
! sanity checks
|
||||||
if (prm%aTol < 0.0_pReal) extmsg = trim(extmsg)//' isoductile_atol'
|
|
||||||
if (prm%N <= 0.0_pReal) extmsg = trim(extmsg)//' isoductile_ratesensitivity'
|
if (prm%N <= 0.0_pReal) extmsg = trim(extmsg)//' isoductile_ratesensitivity'
|
||||||
if (prm%critPlasticStrain <= 0.0_pReal) extmsg = trim(extmsg)//' isoductile_criticalplasticstrain'
|
if (prm%critPlasticStrain <= 0.0_pReal) extmsg = trim(extmsg)//' isoductile_criticalplasticstrain'
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
! exit if any parameter is out of range
|
|
||||||
if (extmsg /= '') &
|
|
||||||
call IO_error(211,ext_msg=trim(extmsg)//'('//SOURCE_DAMAGE_ISODUCTILE_LABEL//')')
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
! output pararameters
|
|
||||||
prm%output = config%getStrings('(output)',defaultVal=emptyStringArray)
|
|
||||||
|
|
||||||
NofMyPhase=count(material_phaseAt==p) * discretization_nIP
|
NofMyPhase=count(material_phaseAt==p) * discretization_nIP
|
||||||
call material_allocateSourceState(p,sourceOffset,NofMyPhase,1,1,0)
|
call material_allocateSourceState(p,sourceOffset,NofMyPhase,1,1,0)
|
||||||
sourceState(p)%p(sourceOffset)%aTolState=prm%aTol
|
sourceState(p)%p(sourceOffset)%atolState = config%getFloat('isoductile_atol',defaultVal=1.0e-3_pReal)
|
||||||
|
if(any(sourceState(p)%p(sourceOffset)%atolState <= 0.0_pReal)) &
|
||||||
|
extmsg = trim(extmsg)//' isoductile_atol'
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
enddo
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
! exit if any parameter is out of range
|
||||||
|
if (extmsg /= '') call IO_error(211,ext_msg=trim(extmsg)//'('//SOURCE_DAMAGE_ISODUCTILE_LABEL//')')
|
||||||
|
|
||||||
|
enddo
|
||||||
|
|
||||||
end subroutine source_damage_isoDuctile_init
|
end subroutine source_damage_isoDuctile_init
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue