added thermal and damage effects to elastic hooke's law
This commit is contained in:
parent
676cba13a8
commit
8b11b1b6b0
|
@ -13,9 +13,6 @@ module constitutive
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
private
|
private
|
||||||
real(pReal), public, dimension(:,:,:), allocatable :: &
|
|
||||||
constitutive_localDamage, &
|
|
||||||
constitutive_gradientDamage
|
|
||||||
#ifndef NEWSTATE
|
#ifndef NEWSTATE
|
||||||
type(p_vec), public, dimension(:,:,:), allocatable :: &
|
type(p_vec), public, dimension(:,:,:), allocatable :: &
|
||||||
constitutive_state0, & !< pointer array to microstructure at start of BVP inc
|
constitutive_state0, & !< pointer array to microstructure at start of BVP inc
|
||||||
|
@ -208,10 +205,12 @@ subroutine constitutive_init
|
||||||
write(FILEUNIT,'(/,a,/)') '['//trim(phase_name(phase))//']'
|
write(FILEUNIT,'(/,a,/)') '['//trim(phase_name(phase))//']'
|
||||||
if (knownPlasticity) then
|
if (knownPlasticity) then
|
||||||
write(FILEUNIT,'(a)') '(plasticity)'//char(9)//trim(outputName)
|
write(FILEUNIT,'(a)') '(plasticity)'//char(9)//trim(outputName)
|
||||||
|
if (phase_plasticity(phase) /= PLASTICITY_NONE_ID) then
|
||||||
do e = 1_pInt,phase_Noutput(phase)
|
do e = 1_pInt,phase_Noutput(phase)
|
||||||
write(FILEUNIT,'(a,i4)') trim(thisOutput(e,instance))//char(9),thisSize(e,instance)
|
write(FILEUNIT,'(a,i4)') trim(thisOutput(e,instance))//char(9),thisSize(e,instance)
|
||||||
enddo
|
enddo
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
enddo
|
enddo
|
||||||
close(FILEUNIT)
|
close(FILEUNIT)
|
||||||
|
|
||||||
|
@ -221,9 +220,6 @@ subroutine constitutive_init
|
||||||
iMax = mesh_maxNips
|
iMax = mesh_maxNips
|
||||||
eMax = mesh_NcpElems
|
eMax = mesh_NcpElems
|
||||||
allocate(constitutive_sizePostResults(cMax,iMax,eMax), source=0_pInt)
|
allocate(constitutive_sizePostResults(cMax,iMax,eMax), source=0_pInt)
|
||||||
|
|
||||||
allocate(constitutive_localDamage(cMax,iMax,eMax)); constitutive_localDamage = 1.0_pReal
|
|
||||||
allocate(constitutive_gradientDamage(cMax,iMax,eMax)); constitutive_gradientDamage = 1.0_pReal
|
|
||||||
#ifndef NEWSTATE
|
#ifndef NEWSTATE
|
||||||
! lumped into new state
|
! lumped into new state
|
||||||
allocate(constitutive_state0(cMax,iMax,eMax))
|
allocate(constitutive_state0(cMax,iMax,eMax))
|
||||||
|
@ -782,6 +778,20 @@ use math, only : &
|
||||||
math_Mandel66to3333, &
|
math_Mandel66to3333, &
|
||||||
math_transpose33, &
|
math_transpose33, &
|
||||||
MATH_I3
|
MATH_I3
|
||||||
|
#ifdef NEWSTATE
|
||||||
|
use material, only: &
|
||||||
|
mappingConstitutive, &
|
||||||
|
damageState, &
|
||||||
|
phase_damage, &
|
||||||
|
DAMAGE_gradient_ID, &
|
||||||
|
thermalState, &
|
||||||
|
phase_thermal, &
|
||||||
|
THERMAL_conduction_ID, &
|
||||||
|
THERMAL_adiabatic_ID
|
||||||
|
use lattice, only: &
|
||||||
|
lattice_referenceTemperature, &
|
||||||
|
lattice_thermalExpansion33
|
||||||
|
#endif
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
integer(pInt), intent(in) :: &
|
integer(pInt), intent(in) :: &
|
||||||
|
@ -798,16 +808,40 @@ use math, only : &
|
||||||
integer(pInt) :: i, j, k, l
|
integer(pInt) :: i, j, k, l
|
||||||
real(pReal), dimension(3,3) :: FeT
|
real(pReal), dimension(3,3) :: FeT
|
||||||
real(pReal), dimension(3,3,3,3) :: C
|
real(pReal), dimension(3,3,3,3) :: C
|
||||||
|
real(pReal) :: damage
|
||||||
|
integer(pInt) :: phase, constituent
|
||||||
|
|
||||||
|
|
||||||
C = math_Mandel66to3333(constitutive_homogenizedC(ipc,ip,el))
|
C = math_Mandel66to3333(constitutive_homogenizedC(ipc,ip,el))
|
||||||
|
|
||||||
FeT = math_transpose33(Fe)
|
FeT = math_transpose33(Fe)
|
||||||
T = 0.5_pReal*math_mul3333xx33(C,math_mul33x33(FeT,Fe)-MATH_I3)*constitutive_gradientDamage(ipc,ip,el)
|
T = 0.5_pReal*math_mul3333xx33(C,math_mul33x33(FeT,Fe)-MATH_I3)
|
||||||
dT_dFe = 0.0_pReal
|
dT_dFe = 0.0_pReal
|
||||||
forall (i=1_pInt:3_pInt, j=1_pInt:3_pInt, k=1_pInt:3_pInt, l=1_pInt:3_pInt) &
|
forall (i=1_pInt:3_pInt, j=1_pInt:3_pInt, k=1_pInt:3_pInt, l=1_pInt:3_pInt) &
|
||||||
dT_dFe(i,j,k,l) = math_mul3x3(C(i,j,l,1:3),Fe(k,1:3)) ! dT*_ij/dFe_kl
|
dT_dFe(i,j,k,l) = math_mul3x3(C(i,j,l,1:3),Fe(k,1:3)) ! dT*_ij/dFe_kl
|
||||||
|
|
||||||
|
#ifdef NEWSTATE
|
||||||
|
phase = mappingConstitutive(2,ipc,ip,el)
|
||||||
|
constituent = mappingConstitutive(1,ipc,ip,el)
|
||||||
|
select case (phase_damage(phase))
|
||||||
|
case (DAMAGE_gradient_ID)
|
||||||
|
damage = damageState(phase)%state(3,constituent) &
|
||||||
|
* damageState(phase)%state(3,constituent)
|
||||||
|
T = damage*T
|
||||||
|
dT_dFe = damage*dT_dFe
|
||||||
|
end select
|
||||||
|
select case (phase_thermal(phase))
|
||||||
|
case (THERMAL_conduction_ID)
|
||||||
|
T = T - math_mul3333xx33(C, (thermalState(phase)%state(2,constituent) - &
|
||||||
|
lattice_referenceTemperature(phase)) &
|
||||||
|
* lattice_thermalExpansion33(1:3,1:3,phase))
|
||||||
|
case (THERMAL_adiabatic_ID)
|
||||||
|
T = T - math_mul3333xx33(C, (thermalState(phase)%state(1,constituent) - &
|
||||||
|
lattice_referenceTemperature(phase)) &
|
||||||
|
* lattice_thermalExpansion33(1:3,1:3,phase))
|
||||||
|
end select
|
||||||
|
#endif
|
||||||
|
|
||||||
end subroutine constitutive_hooke_TandItsTangent
|
end subroutine constitutive_hooke_TandItsTangent
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue