added functions to get degraded stiffness and undamaged intermediate deformation gradient.

This commit is contained in:
Luv Sharma 2015-01-13 09:46:25 +00:00
parent 80bb9a2e66
commit 9c8873f16c
2 changed files with 76 additions and 2 deletions

View File

@ -29,6 +29,7 @@ module constitutive
constitutive_LpAndItsTangent, &
constitutive_LiAndItsTangent, &
constitutive_getFi, &
constitutive_getUndamagedFi, &
constitutive_putFi, &
constitutive_getFi0, &
constitutive_getPartionedFi0, &
@ -519,10 +520,13 @@ function constitutive_damagedC(ipc,ip,el)
use material, only: &
material_phase, &
LOCAL_DAMAGE_isoBrittle_ID, &
LOCAL_DAMAGE_isoDuctile_ID, &
LOCAL_DAMAGE_phaseField_ID, &
phase_damage
use damage_isoBrittle, only: &
damage_isoBrittle_getDamagedC66
damage_isoBrittle_getDamagedC66
use damage_isoDuctile, only: &
damage_isoDuctile_getDamagedC66
use damage_phaseField, only: &
damage_phaseField_getDamagedC66
@ -537,6 +541,11 @@ function constitutive_damagedC(ipc,ip,el)
case (LOCAL_DAMAGE_isoBrittle_ID)
constitutive_damagedC = damage_isoBrittle_getDamagedC66(constitutive_homogenizedC(ipc,ip,el), &
ipc,ip,el)
case (LOCAL_DAMAGE_isoDuctile_ID)
constitutive_damagedC = damage_isoDuctile_getDamagedC66(constitutive_homogenizedC(ipc,ip,el), &
ipc,ip,el)
case (LOCAL_DAMAGE_phaseField_ID)
constitutive_damagedC = damage_phaseField_getDamagedC66(constitutive_homogenizedC(ipc,ip,el), &
ipc,ip,el)
@ -847,6 +856,41 @@ pure function constitutive_getFi(ipc, ip, el)
end function constitutive_getFi
!--------------------------------------------------------------------------------------------------
!> @brief contains the constitutive equation for calculating the undamaged
!> intermediate deformation gradient
!--------------------------------------------------------------------------------------------------
pure function constitutive_getUndamagedFi(ipc, ip, el)
use prec, only: &
pReal
use math, only: &
math_I3, &
math_mul33x33
use material, only: &
phase_thermal, &
material_phase, &
LOCAL_THERMAL_adiabatic_ID
use thermal_adiabatic, only: &
thermal_adiabatic_getFT
implicit none
integer(pInt), intent(in) :: &
ipc, & !< grain number
ip, & !< integration point number
el !< element number
real(pReal), dimension(3,3) :: &
constitutive_getUndamagedFi !< intermediate deformation gradient
constitutive_getUndamagedFi = math_I3
select case (phase_thermal(material_phase(ipc,ip,el)))
case (LOCAL_THERMAL_adiabatic_ID)
constitutive_getUndamagedFi = math_mul33x33(constitutive_getUndamagedFi,thermal_adiabatic_getFT (ipc, ip, el))
end select
end function constitutive_getUndamagedFi
!--------------------------------------------------------------------------------------------------
!> @brief contains the constitutive equation for calculating the intermediate deformation gradient

View File

@ -47,6 +47,7 @@ module damage_isoDuctile
damage_isoDuctile_getSlipDamage, &
damage_isoDuctile_putLocalDamage, &
damage_isoDuctile_getLocalDamage, &
damage_isoDuctile_getDamagedC66, &
damage_isoDuctile_postResults
contains
@ -330,7 +331,7 @@ function damage_isoDuctile_getDamage(ipc, ip, el)
case (FIELD_DAMAGE_NONLOCAL_ID)
damage_isoDuctile_getDamage = fieldDamage(material_homog(ip,el))% &
field(1,mappingHomogenization(1,ip,el)) ! Taylor type
field(1,mappingHomogenization(1,ip,el)) ! Taylor type
end select
@ -392,6 +393,35 @@ function damage_isoDuctile_getLocalDamage(ipc, ip, el)
damageState(mappingConstitutive(2,ipc,ip,el))%state(1,mappingConstitutive(1,ipc,ip,el))
end function damage_isoDuctile_getLocalDamage
!--------------------------------------------------------------------------------------------------
!> @brief returns ductile damaged stiffness tensor
!--------------------------------------------------------------------------------------------------
function damage_isoDuctile_getDamagedC66(C, ipc, ip, el)
use material, only: &
mappingConstitutive, &
damageState
implicit none
integer(pInt), intent(in) :: &
ipc, & !< grain number
ip, & !< integration point number
el !< element number
real(pReal), intent(in), dimension(6,6) :: &
C
real(pReal), dimension(6,6) :: &
damage_isoDuctile_getDamagedC66
integer(pInt) :: &
phase, constituent
real(pReal) :: &
damage
phase = mappingConstitutive(2,ipc,ip,el)
constituent = mappingConstitutive(1,ipc,ip,el)
damage = damage_isoDuctile_getDamage(ipc, ip, el)
damage_isoDuctile_getDamagedC66 = &
damage*damage*C
end function damage_isoDuctile_getDamagedC66
!--------------------------------------------------------------------------------------------------
!> @brief return array of constitutive results