changed isotropic ductile damage to be inline with Fe..Fd..Fp decomposition
This commit is contained in:
parent
bec0af7b06
commit
b65ccb0181
|
@ -32,6 +32,7 @@ module constitutive
|
||||||
constitutive_getLocalDamage, &
|
constitutive_getLocalDamage, &
|
||||||
constitutive_putLocalDamage, &
|
constitutive_putLocalDamage, &
|
||||||
constitutive_getDamage, &
|
constitutive_getDamage, &
|
||||||
|
constitutive_getDamageStrain, &
|
||||||
constitutive_getDamageDiffusion33, &
|
constitutive_getDamageDiffusion33, &
|
||||||
constitutive_getAdiabaticTemperature, &
|
constitutive_getAdiabaticTemperature, &
|
||||||
constitutive_putAdiabaticTemperature, &
|
constitutive_putAdiabaticTemperature, &
|
||||||
|
@ -1186,6 +1187,62 @@ function constitutive_getTemperature(ipc, ip, el)
|
||||||
end select
|
end select
|
||||||
|
|
||||||
end function constitutive_getTemperature
|
end function constitutive_getTemperature
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
!> @brief returns damage deformation gradient
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
function constitutive_getDamageStrain(ipc, ip, el)
|
||||||
|
use prec, only: &
|
||||||
|
pReal
|
||||||
|
use math, only: &
|
||||||
|
math_I3
|
||||||
|
|
||||||
|
use material, only: &
|
||||||
|
material_phase, &
|
||||||
|
LOCAL_DAMAGE_none_ID, &
|
||||||
|
LOCAL_DAMAGE_brittle_ID, &
|
||||||
|
LOCAL_DAMAGE_ductile_ID, &
|
||||||
|
LOCAL_DAMAGE_gurson_ID, &
|
||||||
|
LOCAL_DAMAGE_anisotropic_ID, &
|
||||||
|
phase_damage
|
||||||
|
! use damage_brittle_iso, only: &
|
||||||
|
! constitutive_brittle_iso_getDamageStrain
|
||||||
|
! use damage_brittle_iso, only: &
|
||||||
|
! constitutive_brittle_iso_getDamageStrain
|
||||||
|
use damage_ductile, only: &
|
||||||
|
constitutive_ductile_getDamageStrain
|
||||||
|
! use damage_gurson, only: &
|
||||||
|
! constitutive_gurson_getDamageStrain
|
||||||
|
! use damage_anisotropic, only: &
|
||||||
|
! constitutive_anisotropic_getDamageStrain
|
||||||
|
|
||||||
|
|
||||||
|
implicit none
|
||||||
|
integer(pInt), intent(in) :: &
|
||||||
|
ipc, & !< grain number
|
||||||
|
ip, & !< integration point number
|
||||||
|
el !< element number
|
||||||
|
real(pReal), dimension(3,3) :: &
|
||||||
|
constitutive_getDamageStrain
|
||||||
|
|
||||||
|
|
||||||
|
select case (phase_damage(material_phase(ipc,ip,el)))
|
||||||
|
case (LOCAL_DAMAGE_none_ID)
|
||||||
|
constitutive_getDamageStrain = math_I3 !
|
||||||
|
|
||||||
|
case (LOCAL_DAMAGE_brittle_ID)
|
||||||
|
constitutive_getDamageStrain = math_I3 !
|
||||||
|
|
||||||
|
case (LOCAL_DAMAGE_ductile_ID)
|
||||||
|
constitutive_getDamageStrain = constitutive_ductile_getDamageStrain(ipc, ip, el)
|
||||||
|
|
||||||
|
case (LOCAL_DAMAGE_gurson_ID)
|
||||||
|
constitutive_getDamageStrain = math_I3 !
|
||||||
|
|
||||||
|
case (LOCAL_DAMAGE_anisotropic_ID)
|
||||||
|
constitutive_getDamageStrain = math_I3 !
|
||||||
|
end select
|
||||||
|
|
||||||
|
end function constitutive_getDamageStrain
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief returns thermal deformation gradient
|
!> @brief returns thermal deformation gradient
|
||||||
|
|
|
@ -3297,7 +3297,8 @@ logical function crystallite_integrateStress(&
|
||||||
debug_StressLoopDistribution
|
debug_StressLoopDistribution
|
||||||
use constitutive, only: constitutive_LpAndItsTangent, &
|
use constitutive, only: constitutive_LpAndItsTangent, &
|
||||||
constitutive_TandItsTangent, &
|
constitutive_TandItsTangent, &
|
||||||
constitutive_getThermalStrain
|
constitutive_getThermalStrain, &
|
||||||
|
constitutive_getDamageStrain
|
||||||
use math, only: math_mul33x33, &
|
use math, only: math_mul33x33, &
|
||||||
math_mul33xx33, &
|
math_mul33xx33, &
|
||||||
math_mul66x6, &
|
math_mul66x6, &
|
||||||
|
@ -3424,7 +3425,8 @@ logical function crystallite_integrateStress(&
|
||||||
endif
|
endif
|
||||||
A = math_mul33x33(Fg_new,invFp_current) ! intermediate tensor needed later to calculate dFe_dLp
|
A = math_mul33x33(Fg_new,invFp_current) ! intermediate tensor needed later to calculate dFe_dLp
|
||||||
Fi = math_I3 ! intermediate configuration, assume decomposition as F = Fe Fi Fp
|
Fi = math_I3 ! intermediate configuration, assume decomposition as F = Fe Fi Fp
|
||||||
Fi = math_mul33x33(Fi,constitutive_getThermalStrain(g,i,e))
|
Fi = math_mul33x33(math_mul33x33(Fi,constitutive_getThermalStrain(g,i,e)), &
|
||||||
|
constitutive_getDamageStrain(g,i,e)) ! Fi = Ft Fd
|
||||||
Ci = math_mul33x33(math_transpose33(Fi),Fi) ! non-plastic stretch tensor (neglecting elastic contributions)
|
Ci = math_mul33x33(math_transpose33(Fi),Fi) ! non-plastic stretch tensor (neglecting elastic contributions)
|
||||||
invFi = math_inv33(Fi)
|
invFi = math_inv33(Fi)
|
||||||
detFi = math_det33(Fi)
|
detFi = math_det33(Fi)
|
||||||
|
|
|
@ -45,6 +45,7 @@ module damage_ductile
|
||||||
damage_ductile_dotState, &
|
damage_ductile_dotState, &
|
||||||
damage_ductile_microstructure, &
|
damage_ductile_microstructure, &
|
||||||
constitutive_ductile_getDamage, &
|
constitutive_ductile_getDamage, &
|
||||||
|
constitutive_ductile_getDamageStrain, &
|
||||||
constitutive_ductile_putDamage, &
|
constitutive_ductile_putDamage, &
|
||||||
damage_ductile_postResults
|
damage_ductile_postResults
|
||||||
|
|
||||||
|
@ -321,7 +322,7 @@ subroutine damage_ductile_microstructure(nSlip,accumulatedSlip,ipc, ip, el)
|
||||||
end subroutine damage_ductile_microstructure
|
end subroutine damage_ductile_microstructure
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief returns temperature based on local damage model state layout
|
!> @brief returns damage value based on local damage model state layout
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
function constitutive_ductile_getDamage(ipc, ip, el)
|
function constitutive_ductile_getDamage(ipc, ip, el)
|
||||||
use material, only: &
|
use material, only: &
|
||||||
|
@ -339,6 +340,29 @@ function constitutive_ductile_getDamage(ipc, ip, el)
|
||||||
damageState(mappingConstitutive(2,ipc,ip,el))%state(1,mappingConstitutive(1,ipc,ip,el))
|
damageState(mappingConstitutive(2,ipc,ip,el))%state(1,mappingConstitutive(1,ipc,ip,el))
|
||||||
|
|
||||||
end function constitutive_ductile_getDamage
|
end function constitutive_ductile_getDamage
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
!> @brief returns damage deformation gradient (extra intermediate configuration) based on
|
||||||
|
!> local damage model state layout
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
function constitutive_ductile_getDamageStrain(ipc, ip, el)
|
||||||
|
use math, only: &
|
||||||
|
math_I3
|
||||||
|
use material, only: &
|
||||||
|
mappingConstitutive, &
|
||||||
|
damageState
|
||||||
|
|
||||||
|
implicit none
|
||||||
|
integer(pInt), intent(in) :: &
|
||||||
|
ipc, & !< grain number
|
||||||
|
ip, & !< integration point number
|
||||||
|
el !< element number
|
||||||
|
real(pReal), dimension(3,3) :: &
|
||||||
|
constitutive_ductile_getDamageStrain
|
||||||
|
|
||||||
|
constitutive_ductile_getDamageStrain = &
|
||||||
|
math_I3 / ( &
|
||||||
|
damageState(mappingConstitutive(2,ipc,ip,el))%state(1,mappingConstitutive(1,ipc,ip,el)) )**(1_pInt/3_pInt) ! volumetric deformation gradient due to damage
|
||||||
|
end function constitutive_ductile_getDamageStrain
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief returns damage value based on local damage
|
!> @brief returns damage value based on local damage
|
||||||
|
|
Loading…
Reference in New Issue