diff --git a/src/constitutive_plastic_disloUCLA.f90 b/src/constitutive_plastic_disloUCLA.f90 index 00a1b8e21..a021a4627 100644 --- a/src/constitutive_plastic_disloUCLA.f90 +++ b/src/constitutive_plastic_disloUCLA.f90 @@ -12,7 +12,6 @@ submodule(constitutive) plastic_disloUCLA type :: tParameters real(pReal) :: & - aTol_rho, & D, & !< grain size mu, & D_0, & !< prefactor for self-diffusion coefficient @@ -92,7 +91,7 @@ module subroutine plastic_disloUCLA_init character(len=pStringLen) :: & 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)') ' 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)), & config => config_phase(p)) -!-------------------------------------------------------------------------------------------------- -! optional parameters that need to be defined + prm%output = config%getStrings('(output)',defaultVal=emptyStringArray) + + ! This data is read in already in lattice 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 prm%N_sl = config%getInts('nslip',defaultVal=emptyIntArray) @@ -209,15 +204,6 @@ module subroutine plastic_disloUCLA_init allocate(prm%rho_dip_0(0)) 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 NipcMyPhase = count(material_phaseAt == p) * discretization_nIP @@ -227,26 +213,28 @@ module subroutine plastic_disloUCLA_init 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 endIndex = prm%sum_N_sl stt%rho_mob=>plasticState(p)%state(startIndex:endIndex,:) stt%rho_mob= spread(prm%rho_mob_0,2,NipcMyPhase) 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 endIndex = endIndex + prm%sum_N_sl stt%rho_dip=>plasticState(p)%state(startIndex:endIndex,:) stt%rho_dip= spread(prm%rho_dip_0,2,NipcMyPhase) 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 endIndex = endIndex + prm%sum_N_sl stt%gamma_sl=>plasticState(p)%state(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 plasticState(p)%slipRate => plasticState(p)%dotState(startIndex:endIndex,:) @@ -257,6 +245,10 @@ module subroutine plastic_disloUCLA_init end associate +!-------------------------------------------------------------------------------------------------- +! exit if any parameter is out of range + if (extmsg /= '') call IO_error(211,ext_msg=trim(extmsg)//'('//PLASTICITY_DISLOUCLA_LABEL//')') + enddo end subroutine plastic_disloUCLA_init diff --git a/src/constitutive_plastic_isotropic.f90 b/src/constitutive_plastic_isotropic.f90 index beed2112a..2507b01a6 100644 --- a/src/constitutive_plastic_isotropic.f90 +++ b/src/constitutive_plastic_isotropic.f90 @@ -22,9 +22,7 @@ submodule(constitutive) plastic_isotropic c_1, & c_4, & c_3, & - c_2, & - aTol_xi, & - aTol_gamma + c_2 integer :: & of_debug = 0 logical :: & @@ -63,7 +61,7 @@ module subroutine plastic_isotropic_init character(len=pStringLen) :: & 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)') ' https://doi.org/10.1016/j.scriptamat.2017.09.047' @@ -83,6 +81,8 @@ module subroutine plastic_isotropic_init stt => state(phase_plasticityInstance(p)), & config => config_phase(p)) + prm%output = config%getStrings('(output)',defaultVal=emptyStringArray) + #ifdef DEBUG if (p==material_phaseAt(debug_g,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_2 = config%getFloat('tausat_sinhfitd',defaultVal=0.0_pReal) 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/') !-------------------------------------------------------------------------------------------------- ! 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%dot_gamma_0 <= 0.0_pReal) extmsg = trim(extmsg)//' dot_gamma_0' if (prm%n <= 0.0_pReal) extmsg = trim(extmsg)//' n' if (prm%a <= 0.0_pReal) extmsg = trim(extmsg)//' a' 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 @@ -135,15 +120,18 @@ module subroutine plastic_isotropic_init 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 = prm%xi_0 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,:) 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 plasticState(p)%slipRate => plasticState(p)%dotState(2:2,:) @@ -151,6 +139,10 @@ module subroutine plastic_isotropic_init end associate +!-------------------------------------------------------------------------------------------------- +! exit if any parameter is out of range + if (extmsg /= '') call IO_error(211,ext_msg=trim(extmsg)//'('//PLASTICITY_ISOTROPIC_LABEL//')') + enddo end subroutine plastic_isotropic_init diff --git a/src/constitutive_plastic_kinehardening.f90 b/src/constitutive_plastic_kinehardening.f90 index 65751989c..44b9b3334 100644 --- a/src/constitutive_plastic_kinehardening.f90 +++ b/src/constitutive_plastic_kinehardening.f90 @@ -10,9 +10,7 @@ submodule(constitutive) plastic_kinehardening type :: tParameters real(pReal) :: & gdot0, & !< reference shear strain rate for slip - n, & !< stress exponent for slip - aTolResistance, & - aTolShear + n !< stress exponent for slip real(pReal), allocatable, dimension(:) :: & crss0, & !< initial critical shear stress for slip theta0, & !< initial hardening rate of forward stress for each slip @@ -74,7 +72,7 @@ module subroutine plastic_kinehardening_init character(len=pStringLen) :: & 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) if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0) & @@ -93,21 +91,14 @@ module subroutine plastic_kinehardening_init stt => state(phase_plasticityInstance(p)),& config => config_phase(p)) + prm%output = config%getStrings('(output)',defaultVal=emptyStringArray) + #ifdef DEBUG if (p==material_phaseAt(debug_g,debug_e)) then prm%of_debug = material_phasememberAt(debug_g,debug_i,debug_e) 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 prm%Nslip = config%getInts('nslip',defaultVal=emptyIntArray) @@ -163,15 +154,6 @@ module subroutine plastic_kinehardening_init 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 NipcMyPhase = count(material_phaseAt == p) * discretization_nIP @@ -182,27 +164,31 @@ module subroutine plastic_kinehardening_init 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 endIndex = prm%totalNslip stt%crss => plasticState(p)%state (startIndex:endIndex,:) stt%crss = spread(prm%crss0, 2, NipcMyPhase) 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 endIndex = endIndex + prm%totalNslip stt%crss_back => plasticState(p)%state (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 endIndex = endIndex + prm%totalNslip stt%accshear => plasticState(p)%state (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 - plasticState(p)%slipRate => plasticState(p)%dotState(startIndex:endIndex,:) + plasticState(p)%slipRate => plasticState(p)%dotState(startIndex:endIndex,:) o = plasticState(p)%offsetDeltaState startIndex = endIndex + 1 @@ -224,8 +210,13 @@ module subroutine plastic_kinehardening_init end associate +!-------------------------------------------------------------------------------------------------- +! exit if any parameter is out of range + if (extmsg /= '') call IO_error(211,ext_msg=trim(extmsg)//'('//PLASTICITY_KINEHARDENING_LABEL//')') + enddo + end subroutine plastic_kinehardening_init diff --git a/src/source_damage_anisoBrittle.f90 b/src/source_damage_anisoBrittle.f90 index 91c90adc2..9d3697e44 100644 --- a/src/source_damage_anisoBrittle.f90 +++ b/src/source_damage_anisoBrittle.f90 @@ -24,7 +24,6 @@ module source_damage_anisoBrittle type :: tParameters !< container type for internal constitutive parameters real(pReal) :: & - aTol, & sdot_0, & N real(pReal), dimension(:), allocatable :: & @@ -84,10 +83,11 @@ subroutine source_damage_anisoBrittle_init associate(prm => param(source_damage_anisoBrittle_instance(p)), & config => config_phase(p)) + prm%output = config%getStrings('(output)',defaultVal=emptyStringArray) + prm%Ncleavage = config%getInts('ncleavage',defaultVal=emptyIntArray) prm%totalNcleavage = sum(prm%Ncleavage) - prm%aTol = config%getFloat('anisobrittle_atol',defaultVal = 1.0e-3_pReal) prm%N = config%getFloat('anisobrittle_ratesensitivity') prm%sdot_0 = config%getFloat('anisobrittle_sdot0') @@ -102,26 +102,24 @@ subroutine source_damage_anisoBrittle_init prm%critLoad = math_expand(prm%critLoad, prm%Ncleavage) ! 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%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%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 if (extmsg /= '') call IO_error(211,ext_msg=trim(extmsg)//'('//SOURCE_DAMAGE_ANISOBRITTLE_LABEL//')') -!-------------------------------------------------------------------------------------------------- -! 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 +enddo end subroutine source_damage_anisoBrittle_init diff --git a/src/source_damage_anisoDuctile.f90 b/src/source_damage_anisoDuctile.f90 index 4dd18dac0..aa21a597b 100644 --- a/src/source_damage_anisoDuctile.f90 +++ b/src/source_damage_anisoDuctile.f90 @@ -23,7 +23,6 @@ module source_damage_anisoDuctile type, private :: tParameters !< container type for internal constitutive parameters real(pReal) :: & - aTol, & N real(pReal), dimension(:), allocatable :: & critPlasticStrain @@ -79,10 +78,11 @@ subroutine source_damage_anisoDuctile_init associate(prm => param(source_damage_anisoDuctile_instance(p)), & config => config_phase(p)) + prm%output = config%getStrings('(output)',defaultVal=emptyStringArray) + prm%Nslip = config%getInts('nslip',defaultVal=emptyIntArray) prm%totalNslip = sum(prm%Nslip) - prm%aTol = config%getFloat('anisoductile_atol',defaultVal = 1.0e-3_pReal) prm%N = config%getFloat('anisoductile_ratesensitivity') 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) ! 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 (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 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 - 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 diff --git a/src/source_damage_isoBrittle.f90 b/src/source_damage_isoBrittle.f90 index 8856dc4e0..e656e819d 100644 --- a/src/source_damage_isoBrittle.f90 +++ b/src/source_damage_isoBrittle.f90 @@ -24,8 +24,7 @@ module source_damage_isoBrittle type, private :: tParameters !< container type for internal constitutive parameters real(pReal) :: & critStrainEnergy, & - N, & - aTol + N character(len=pStringLen), allocatable, dimension(:) :: & output end type tParameters @@ -74,30 +73,28 @@ subroutine source_damage_isoBrittle_init associate(prm => param(source_damage_isoBrittle_instance(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%critStrainEnergy = config%getFloat('isobrittle_criticalstrainenergy') ! 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%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 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 - 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 diff --git a/src/source_damage_isoDuctile.f90 b/src/source_damage_isoDuctile.f90 index 2f7389592..27af7342f 100644 --- a/src/source_damage_isoDuctile.f90 +++ b/src/source_damage_isoDuctile.f90 @@ -23,8 +23,7 @@ module source_damage_isoDuctile type, private :: tParameters !< container type for internal constitutive parameters real(pReal) :: & critPlasticStrain, & - N, & - aTol + N character(len=pStringLen), allocatable, dimension(:) :: & output end type tParameters @@ -73,30 +72,28 @@ subroutine source_damage_isoDuctile_init associate(prm => param(source_damage_isoDuctile_instance(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%critPlasticStrain = config%getFloat('isoductile_criticalplasticstrain') ! 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%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 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 - 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