some improvements in ductile model
This commit is contained in:
parent
baa08d8155
commit
ee60ea8d5b
|
@ -726,7 +726,7 @@ subroutine constitutive_collectDotState(Tstar_v, Lp, FeArray, FpArray, Temperatu
|
||||||
case (LOCAL_DAMAGE_BRITTLE_ID)
|
case (LOCAL_DAMAGE_BRITTLE_ID)
|
||||||
call damage_brittle_dotState(ipc, ip, el)
|
call damage_brittle_dotState(ipc, ip, el)
|
||||||
case (LOCAL_DAMAGE_DUCTILE_ID)
|
case (LOCAL_DAMAGE_DUCTILE_ID)
|
||||||
call damage_ductile_dotState(ipc, ip, el)
|
call damage_ductile_dotState(Lp, ipc, ip, el)
|
||||||
|
|
||||||
end select
|
end select
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ module damage_ductile
|
||||||
|
|
||||||
real(pReal), dimension(:), allocatable, private :: &
|
real(pReal), dimension(:), allocatable, private :: &
|
||||||
damage_ductile_aTol, &
|
damage_ductile_aTol, &
|
||||||
damage_ductile_critstrain
|
damage_ductile_critpStrain
|
||||||
|
|
||||||
enum, bind(c)
|
enum, bind(c)
|
||||||
enumerator :: undefined_ID, &
|
enumerator :: undefined_ID, &
|
||||||
|
@ -120,7 +120,7 @@ subroutine damage_ductile_init(fileUnit)
|
||||||
damage_ductile_output = ''
|
damage_ductile_output = ''
|
||||||
allocate(damage_ductile_outputID(maxval(phase_Noutput),maxNinstance), source=undefined_ID)
|
allocate(damage_ductile_outputID(maxval(phase_Noutput),maxNinstance), source=undefined_ID)
|
||||||
allocate(damage_ductile_Noutput(maxNinstance), source=0_pInt)
|
allocate(damage_ductile_Noutput(maxNinstance), source=0_pInt)
|
||||||
allocate(damage_ductile_critStrain(maxNinstance), source=0.0_pReal)
|
allocate(damage_ductile_critpStrain(maxNinstance), source=0.0_pReal)
|
||||||
allocate(damage_ductile_aTol(maxNinstance), source=0.0_pReal)
|
allocate(damage_ductile_aTol(maxNinstance), source=0.0_pReal)
|
||||||
|
|
||||||
rewind(fileUnit)
|
rewind(fileUnit)
|
||||||
|
@ -154,8 +154,8 @@ subroutine damage_ductile_init(fileUnit)
|
||||||
IO_lc(IO_stringValue(line,positions,2_pInt))
|
IO_lc(IO_stringValue(line,positions,2_pInt))
|
||||||
end select
|
end select
|
||||||
|
|
||||||
case ('critical_strain_energy')
|
case ('critical_plastic_strain')
|
||||||
damage_ductile_critStrain(instance) = IO_floatValue(line,positions,2_pInt)
|
damage_ductile_critpStrain(instance) = IO_floatValue(line,positions,2_pInt)
|
||||||
|
|
||||||
case ('atol_damage')
|
case ('atol_damage')
|
||||||
damage_ductile_aTol(instance) = IO_floatValue(line,positions,2_pInt)
|
damage_ductile_aTol(instance) = IO_floatValue(line,positions,2_pInt)
|
||||||
|
@ -183,8 +183,8 @@ subroutine damage_ductile_init(fileUnit)
|
||||||
endif
|
endif
|
||||||
enddo outputsLoop
|
enddo outputsLoop
|
||||||
! Determine size of state array
|
! Determine size of state array
|
||||||
sizeDotState = 1_pInt
|
sizeDotState = 2_pInt
|
||||||
sizeState = 2_pInt
|
sizeState = 3_pInt
|
||||||
|
|
||||||
damageState(phase)%sizeState = sizeState
|
damageState(phase)%sizeState = sizeState
|
||||||
damageState(phase)%sizeDotState = sizeDotState
|
damageState(phase)%sizeDotState = sizeDotState
|
||||||
|
@ -229,7 +229,8 @@ subroutine damage_ductile_stateInit(phase,instance)
|
||||||
real(pReal), dimension(damageState(phase)%sizeState) :: tempState
|
real(pReal), dimension(damageState(phase)%sizeState) :: tempState
|
||||||
|
|
||||||
tempState(1) = 1.0_pReal
|
tempState(1) = 1.0_pReal
|
||||||
tempState(2) = 1.0_pReal
|
tempState(2) = 0.0_pReal
|
||||||
|
tempState(3) = 1.0_pReal
|
||||||
|
|
||||||
damageState(phase)%state = spread(tempState,2,size(damageState(phase)%state(1,:)))
|
damageState(phase)%state = spread(tempState,2,size(damageState(phase)%state(1,:)))
|
||||||
damageState(phase)%state0 = damageState(phase)%state
|
damageState(phase)%state0 = damageState(phase)%state
|
||||||
|
@ -250,21 +251,26 @@ subroutine damage_ductile_aTolState(phase,instance)
|
||||||
real(pReal), dimension(damageState(phase)%sizeState) :: tempTol
|
real(pReal), dimension(damageState(phase)%sizeState) :: tempTol
|
||||||
|
|
||||||
tempTol = damage_ductile_aTol(instance)
|
tempTol = damage_ductile_aTol(instance)
|
||||||
|
tempTol(2) = 0.000001_pReal
|
||||||
damageState(phase)%aTolState = tempTol
|
damageState(phase)%aTolState = tempTol
|
||||||
end subroutine damage_ductile_aTolState
|
end subroutine damage_ductile_aTolState
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief calculates derived quantities from state
|
!> @brief calculates derived quantities from state
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine damage_ductile_dotState(ipc, ip, el)
|
subroutine damage_ductile_dotState(Lp,ipc, ip, el)
|
||||||
use material, only: &
|
use material, only: &
|
||||||
mappingConstitutive, &
|
mappingConstitutive, &
|
||||||
phase_damageInstance, &
|
phase_damageInstance, &
|
||||||
damageState
|
damageState
|
||||||
|
use math, only: &
|
||||||
|
math_norm33
|
||||||
use lattice, only: &
|
use lattice, only: &
|
||||||
lattice_DamageMobility
|
lattice_DamageMobility
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
|
real(pReal), intent(in), dimension(3,3) :: &
|
||||||
|
Lp
|
||||||
integer(pInt), intent(in) :: &
|
integer(pInt), intent(in) :: &
|
||||||
ipc, & !< component-ID of integration point
|
ipc, & !< component-ID of integration point
|
||||||
ip, & !< integration point
|
ip, & !< integration point
|
||||||
|
@ -279,6 +285,9 @@ subroutine damage_ductile_dotState(ipc, ip, el)
|
||||||
(1.0_pReal/lattice_DamageMobility(phase))* &
|
(1.0_pReal/lattice_DamageMobility(phase))* &
|
||||||
(damageState(phase)%state(2,constituent) - &
|
(damageState(phase)%state(2,constituent) - &
|
||||||
damageState(phase)%state(1,constituent))
|
damageState(phase)%state(1,constituent))
|
||||||
|
|
||||||
|
damageState(phase)%dotState(2,constituent) = &
|
||||||
|
math_norm33(Lp)
|
||||||
|
|
||||||
end subroutine damage_ductile_dotState
|
end subroutine damage_ductile_dotState
|
||||||
|
|
||||||
|
@ -315,9 +324,9 @@ subroutine damage_ductile_microstructure(Tstar_v, Fe, Fp, ipc, ip, el)
|
||||||
phase = mappingConstitutive(2,ipc,ip,el)
|
phase = mappingConstitutive(2,ipc,ip,el)
|
||||||
constituent = mappingConstitutive(1,ipc,ip,el)
|
constituent = mappingConstitutive(1,ipc,ip,el)
|
||||||
plasticStrain = math_mul33x33(math_transpose33(Fp),Fp)-math_I3
|
plasticStrain = math_mul33x33(math_transpose33(Fp),Fp)-math_I3
|
||||||
damageState(phase)%state(2,constituent) = min(damageState(phase)%state(2,constituent), &
|
damageState(phase)%state(3,constituent) = min(damageState(phase)%state(3,constituent), &
|
||||||
damage_ductile_critstrain(phase)/ &
|
damage_ductile_critpStrain(phase)/ &
|
||||||
math_norm33(plasticStrain))
|
damageState(phase)%state(2,constituent)) !< akin to damage surface
|
||||||
|
|
||||||
end subroutine damage_ductile_microstructure
|
end subroutine damage_ductile_microstructure
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue