diff --git a/src/kinematics_cleavage_opening.f90 b/src/kinematics_cleavage_opening.f90 index 6555bd811..3366a7b1e 100644 --- a/src/kinematics_cleavage_opening.f90 +++ b/src/kinematics_cleavage_opening.f90 @@ -20,9 +20,7 @@ module kinematics_cleavage_opening type :: tParameters !< container type for internal constitutive parameters integer :: & - totalNcleavage - integer, dimension(:), allocatable :: & - Ncleavage !< active number of cleavage systems per family + sum_N_cl real(pReal) :: & sdot0, & n @@ -48,11 +46,12 @@ contains subroutine kinematics_cleavage_opening_init integer :: Ninstance,p + integer, dimension(:), allocatable :: N_cl !< active number of cleavage systems per family character(len=pStringLen) :: extmsg = '' - write(6,'(/,a)') ' <<<+- kinematics_'//KINEMATICS_cleavage_opening_LABEL//' init -+>>>'; flush(6) + write(6,'(/,a)') ' <<<+- kinematics_'//KINEMATICS_CLEAVAGE_OPENING_LABEL//' init -+>>>'; flush(6) - Ninstance = count(phase_kinematics == KINEMATICS_cleavage_opening_ID) + Ninstance = count(phase_kinematics == KINEMATICS_CLEAVAGE_OPENING_ID) if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0) & write(6,'(a16,1x,i5,/)') '# instances:',Ninstance @@ -60,25 +59,25 @@ subroutine kinematics_cleavage_opening_init allocate(param(Ninstance)) do p = 1, size(config_phase) - kinematics_cleavage_opening_instance(p) = count(phase_kinematics(:,1:p) == kinematics_cleavage_opening_ID) - if (all(phase_kinematics(:,p) /= KINEMATICS_cleavage_opening_ID)) cycle + kinematics_cleavage_opening_instance(p) = count(phase_kinematics(:,1:p) == KINEMATICS_CLEAVAGE_OPENING_ID) + if (all(phase_kinematics(:,p) /= KINEMATICS_CLEAVAGE_OPENING_ID)) cycle associate(prm => param(kinematics_cleavage_opening_instance(p)), & config => config_phase(p)) - prm%Ncleavage = config%getInts('ncleavage') - prm%totalNcleavage = sum(prm%Ncleavage) + N_cl = config%getInts('ncleavage') + prm%sum_N_cl = sum(abs(N_cl)) prm%n = config%getFloat('anisobrittle_ratesensitivity') prm%sdot0 = config%getFloat('anisobrittle_sdot0') - prm%critLoad = config%getFloats('anisobrittle_criticalload',requiredSize=size(prm%Ncleavage)) + prm%critLoad = config%getFloats('anisobrittle_criticalload',requiredSize=size(N_cl)) - prm%cleavage_systems = lattice_SchmidMatrix_cleavage(prm%Ncleavage,config%getString('lattice_structure'),& + prm%cleavage_systems = lattice_SchmidMatrix_cleavage(N_cl,config%getString('lattice_structure'),& config%getFloat('c/a',defaultVal=0.0_pReal)) ! expand: family => system - prm%critLoad = math_expand(prm%critLoad, prm%Ncleavage) + prm%critLoad = math_expand(prm%critLoad,N_cl) ! sanity checks if (prm%n <= 0.0_pReal) extmsg = trim(extmsg)//' anisobrittle_n' @@ -87,7 +86,7 @@ subroutine kinematics_cleavage_opening_init !-------------------------------------------------------------------------------------------------- ! 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)//'('//KINEMATICS_CLEAVAGE_OPENING_LABEL//')') end associate enddo @@ -124,7 +123,7 @@ subroutine kinematics_cleavage_opening_LiAndItsTangent(Ld, dLd_dTstar, S, ipc, i Ld = 0.0_pReal dLd_dTstar = 0.0_pReal associate(prm => param(kinematics_cleavage_opening_instance(material_phaseAt(ipc,el)))) - do i = 1,prm%totalNcleavage + do i = 1,prm%sum_N_cl traction_crit = prm%critLoad(i)* damage(homog)%p(damageOffset)**2.0_pReal traction_d = math_tensordot(S,prm%cleavage_systems(1:3,1:3,1,i)) diff --git a/src/kinematics_slipplane_opening.f90 b/src/kinematics_slipplane_opening.f90 index ab9035918..833fa8759 100644 --- a/src/kinematics_slipplane_opening.f90 +++ b/src/kinematics_slipplane_opening.f90 @@ -20,9 +20,7 @@ module kinematics_slipplane_opening type :: tParameters !< container type for internal constitutive parameters integer :: & - totalNslip - integer, dimension(:), allocatable :: & - Nslip !< active number of slip systems per family + sum_N_sl real(pReal) :: & sdot0, & n @@ -51,11 +49,12 @@ subroutine kinematics_slipplane_opening_init integer :: Ninstance,p,i character(len=pStringLen) :: extmsg = '' + integer, dimension(:), allocatable :: N_sl real(pReal), dimension(:,:), allocatable :: d,n,t - write(6,'(/,a)') ' <<<+- kinematics_'//KINEMATICS_slipplane_opening_LABEL//' init -+>>>'; flush(6) + write(6,'(/,a)') ' <<<+- kinematics_'//KINEMATICS_SLIPPLANE_OPENING_LABEL//' init -+>>>'; flush(6) - Ninstance = count(phase_kinematics == KINEMATICS_slipplane_opening_ID) + Ninstance = count(phase_kinematics == KINEMATICS_SLIPPLANE_OPENING_ID) if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0) & write(6,'(a16,1x,i5,/)') '# instances:',Ninstance @@ -63,21 +62,21 @@ subroutine kinematics_slipplane_opening_init allocate(param(Ninstance)) do p = 1, size(config_phase) - kinematics_slipplane_opening_instance(p) = count(phase_kinematics(:,1:p) == kinematics_slipplane_opening_ID) - if (all(phase_kinematics(:,p) /= KINEMATICS_slipplane_opening_ID)) cycle + kinematics_slipplane_opening_instance(p) = count(phase_kinematics(:,1:p) == KINEMATICS_SLIPPLANE_OPENING_ID) + if (all(phase_kinematics(:,p) /= KINEMATICS_SLIPPLANE_OPENING_ID)) cycle associate(prm => param(kinematics_slipplane_opening_instance(p)), & config => config_phase(p)) prm%sdot0 = config%getFloat('anisoductile_sdot0') prm%n = config%getFloat('anisoductile_ratesensitivity') - prm%Nslip = config%getInts('nslip') - prm%totalNslip = sum(prm%Nslip) + N_sl = config%getInts('nslip') + prm%sum_N_sl = sum(abs(N_sl)) - d = lattice_slip_direction (prm%Nslip,config%getString('lattice_structure'),& + d = lattice_slip_direction (N_sl,config%getString('lattice_structure'),& config%getFloat('c/a',defaultVal=0.0_pReal)) - t = lattice_slip_transverse(prm%Nslip,config%getString('lattice_structure'),& + t = lattice_slip_transverse(N_sl,config%getString('lattice_structure'),& config%getFloat('c/a',defaultVal=0.0_pReal)) - n = lattice_slip_normal (prm%Nslip,config%getString('lattice_structure'),& + n = lattice_slip_normal (N_sl,config%getString('lattice_structure'),& config%getFloat('c/a',defaultVal=0.0_pReal)) allocate(prm%P_d(3,3,size(d,2)),prm%P_t(3,3,size(t,2)),prm%P_n(3,3,size(n,2))) @@ -87,10 +86,10 @@ subroutine kinematics_slipplane_opening_init prm%P_n(1:3,1:3,i) = math_outer(n(1:3,i), n(1:3,i)) enddo - prm%critLoad = config%getFloats('anisoductile_criticalload',requiredSize=size(prm%Nslip)) + prm%critLoad = config%getFloats('anisoductile_criticalload',requiredSize=size(N_sl)) ! expand: family => system - prm%critLoad = math_expand(prm%critLoad, prm%Nslip) + prm%critLoad = math_expand(prm%critLoad,N_sl) ! sanity checks if (prm%n <= 0.0_pReal) extmsg = trim(extmsg)//' anisoDuctile_n' @@ -99,7 +98,7 @@ subroutine kinematics_slipplane_opening_init !-------------------------------------------------------------------------------------------------- ! exit if any parameter is out of range - if (extmsg /= '') call IO_error(211,ext_msg=trim(extmsg)//'('//SOURCE_DAMAGE_ANISODUCTILE_LABEL//')') + if (extmsg /= '') call IO_error(211,ext_msg=trim(extmsg)//'('//KINEMATICS_SLIPPLANE_OPENING_LABEL//')') end associate enddo @@ -139,7 +138,7 @@ subroutine kinematics_slipplane_opening_LiAndItsTangent(Ld, dLd_dTstar, S, ipc, associate(prm => param(instance)) Ld = 0.0_pReal dLd_dTstar = 0.0_pReal - do i = 1, prm%totalNslip + do i = 1, prm%sum_N_sl traction_d = math_tensordot(S,prm%P_d(1:3,1:3,i)) traction_t = math_tensordot(S,prm%P_t(1:3,1:3,i)) diff --git a/src/lattice.f90 b/src/lattice.f90 index 294bddc63..f962a64bc 100644 --- a/src/lattice.f90 +++ b/src/lattice.f90 @@ -1991,7 +1991,7 @@ function buildCoordinateSystem(active,potential,system,structure,cOverA) real(pReal), intent(in) :: & cOverA real(pReal), dimension(3,3,sum(active)) :: & - buildCoordinateSystem + buildCoordinateSystem real(pReal), dimension(3) :: & direction, normal diff --git a/src/source_damage_anisoBrittle.f90 b/src/source_damage_anisoBrittle.f90 index 1c8eb1152..bd48c9504 100644 --- a/src/source_damage_anisoBrittle.f90 +++ b/src/source_damage_anisoBrittle.f90 @@ -25,16 +25,14 @@ module source_damage_anisoBrittle type :: tParameters !< container type for internal constitutive parameters real(pReal) :: & sdot_0, & - N + n real(pReal), dimension(:), allocatable :: & critDisp, & critLoad real(pReal), dimension(:,:,:,:), allocatable :: & cleavage_systems integer :: & - totalNcleavage - integer, dimension(:), allocatable :: & - Ncleavage + sum_N_cl character(len=pStringLen), allocatable, dimension(:) :: & output end type tParameters @@ -58,6 +56,7 @@ contains subroutine source_damage_anisoBrittle_init integer :: Ninstance,sourceOffset,NipcMyPhase,p + integer, dimension(:), allocatable :: N_cl character(len=pStringLen) :: extmsg = '' write(6,'(/,a)') ' <<<+- source_'//SOURCE_DAMAGE_ANISOBRITTLE_LABEL//' init -+>>>'; flush(6) @@ -85,24 +84,24 @@ subroutine source_damage_anisoBrittle_init prm%output = config%getStrings('(output)',defaultVal=emptyStringArray) - prm%Ncleavage = config%getInts('ncleavage',defaultVal=emptyIntArray) - prm%totalNcleavage = sum(prm%Ncleavage) + N_cl = config%getInts('ncleavage',defaultVal=emptyIntArray) + prm%sum_N_cl = sum(abs(N_cl)) - prm%N = config%getFloat('anisobrittle_ratesensitivity') + prm%n = config%getFloat('anisobrittle_ratesensitivity') prm%sdot_0 = config%getFloat('anisobrittle_sdot0') - prm%critDisp = config%getFloats('anisobrittle_criticaldisplacement',requiredSize=size(prm%Ncleavage)) - prm%critLoad = config%getFloats('anisobrittle_criticalload', requiredSize=size(prm%Ncleavage)) + prm%critDisp = config%getFloats('anisobrittle_criticaldisplacement',requiredSize=size(N_cl)) + prm%critLoad = config%getFloats('anisobrittle_criticalload', requiredSize=size(N_cl)) - prm%cleavage_systems = lattice_SchmidMatrix_cleavage(prm%Ncleavage,config%getString('lattice_structure'),& + prm%cleavage_systems = lattice_SchmidMatrix_cleavage(N_cl,config%getString('lattice_structure'),& config%getFloat('c/a',defaultVal=0.0_pReal)) ! expand: family => system - prm%critDisp = math_expand(prm%critDisp, prm%Ncleavage) - prm%critLoad = math_expand(prm%critLoad, prm%Ncleavage) + prm%critDisp = math_expand(prm%critDisp,N_cl) + prm%critLoad = math_expand(prm%critLoad,N_cl) ! sanity checks - 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 (any(prm%critLoad < 0.0_pReal)) extmsg = trim(extmsg)//' anisobrittle_critLoad' if (any(prm%critDisp < 0.0_pReal)) extmsg = trim(extmsg)//' anisobrittle_critDisp' @@ -153,7 +152,7 @@ subroutine source_damage_anisoBrittle_dotState(S, ipc, ip, el) associate(prm => param(source_damage_anisoBrittle_instance(phase))) sourceState(phase)%p(sourceOffset)%dotState(1,constituent) = 0.0_pReal - do i = 1, prm%totalNcleavage + do i = 1, prm%sum_N_cl traction_d = math_tensordot(S,prm%cleavage_systems(1:3,1:3,1,i)) traction_t = math_tensordot(S,prm%cleavage_systems(1:3,1:3,2,i)) @@ -164,9 +163,9 @@ subroutine source_damage_anisoBrittle_dotState(S, ipc, ip, el) sourceState(phase)%p(sourceOffset)%dotState(1,constituent) & = sourceState(phase)%p(sourceOffset)%dotState(1,constituent) & + prm%sdot_0 / prm%critDisp(i) & - * ((max(0.0_pReal, abs(traction_d) - traction_crit)/traction_crit)**prm%N + & - (max(0.0_pReal, abs(traction_t) - traction_crit)/traction_crit)**prm%N + & - (max(0.0_pReal, abs(traction_n) - traction_crit)/traction_crit)**prm%N) + * ((max(0.0_pReal, abs(traction_d) - traction_crit)/traction_crit)**prm%n + & + (max(0.0_pReal, abs(traction_t) - traction_crit)/traction_crit)**prm%n + & + (max(0.0_pReal, abs(traction_n) - traction_crit)/traction_crit)**prm%n) enddo end associate diff --git a/src/source_damage_anisoDuctile.f90 b/src/source_damage_anisoDuctile.f90 index 5e3e3243f..f1dba3309 100644 --- a/src/source_damage_anisoDuctile.f90 +++ b/src/source_damage_anisoDuctile.f90 @@ -23,13 +23,11 @@ module source_damage_anisoDuctile type, private :: tParameters !< container type for internal constitutive parameters real(pReal) :: & - N + n real(pReal), dimension(:), allocatable :: & critPlasticStrain integer :: & - totalNslip - integer, dimension(:), allocatable :: & - Nslip + sum_N_slip character(len=pStringLen), allocatable, dimension(:) :: & output end type tParameters @@ -53,6 +51,7 @@ contains subroutine source_damage_anisoDuctile_init integer :: Ninstance,sourceOffset,NipcMyPhase,p + integer, dimension(:), allocatable :: N_sl character(len=pStringLen) :: extmsg = '' write(6,'(/,a)') ' <<<+- source_'//SOURCE_DAMAGE_ANISODUCTILE_LABEL//' init -+>>>'; flush(6) @@ -80,18 +79,17 @@ subroutine source_damage_anisoDuctile_init prm%output = config%getStrings('(output)',defaultVal=emptyStringArray) - prm%Nslip = config%getInts('nslip',defaultVal=emptyIntArray) - prm%totalNslip = sum(prm%Nslip) + N_sl = config%getInts('nslip',defaultVal=emptyIntArray) + prm%sum_N_slip = sum(abs(N_sl)) - prm%N = config%getFloat('anisoductile_ratesensitivity') - - prm%critPlasticStrain = config%getFloats('anisoductile_criticalplasticstrain',requiredSize=size(prm%Nslip)) + prm%n = config%getFloat('anisoductile_ratesensitivity') + prm%critPlasticStrain = config%getFloats('anisoductile_criticalplasticstrain',requiredSize=size(N_sl)) ! expand: family => system - prm%critPlasticStrain = math_expand(prm%critPlasticStrain, prm%Nslip) + prm%critPlasticStrain = math_expand(prm%critPlasticStrain,N_sl) ! sanity checks - 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' NipcMyPhase=count(material_phaseAt==p) * discretization_nIP @@ -135,10 +133,10 @@ subroutine source_damage_anisoDuctile_dotState(ipc, ip, el) damageOffset = damageMapping(homog)%p(ip,el) associate(prm => param(source_damage_anisoDuctile_instance(phase))) - do i = 1, prm%totalNslip + do i = 1, prm%sum_N_slip sourceState(phase)%p(sourceOffset)%dotState(1,constituent) & = sourceState(phase)%p(sourceOffset)%dotState(1,constituent) & - + plasticState(phase)%slipRate(i,constituent)/(damage(homog)%p(damageOffset)**prm%N)/prm%critPlasticStrain(i) + + plasticState(phase)%slipRate(i,constituent)/(damage(homog)%p(damageOffset)**prm%n)/prm%critPlasticStrain(i) enddo end associate