From 3948d99f4f1e27bee3164fb37b686b69f02ba13e Mon Sep 17 00:00:00 2001
From: Pratheek Shanthraj
Date: Mon, 22 Sep 2014 20:38:19 +0000
Subject: [PATCH] local part of possibly nonlocal brittle damage model
---
code/constitutive.f90 | 60 +++++++++++++++++--------------------------
code/damage_local.f90 | 7 +++--
2 files changed, 27 insertions(+), 40 deletions(-)
diff --git a/code/constitutive.f90 b/code/constitutive.f90
index e45026a99..f29e28802 100644
--- a/code/constitutive.f90
+++ b/code/constitutive.f90
@@ -387,30 +387,27 @@ subroutine constitutive_LpAndItsTangent(Lp, dLp_dTstar, Tstar_v, temperature, ip
Lp !< plastic velocity gradient
real(pReal), intent(out), dimension(9,9) :: &
dLp_dTstar !< derivative of Lp with respect to Tstar (4th-order tensor)
+ real(pReal) :: damage, Tstar_v_effective(6)
+ damage = constitutive_getNonlocalDamage(ipc,ip,el)
+ Tstar_v_effective = damage*damage*Tstar_v
select case (phase_plasticity(material_phase(ipc,ip,el)))
case (PLASTICITY_NONE_ID)
Lp = 0.0_pReal
dLp_dTstar = 0.0_pReal
case (PLASTICITY_J2_ID)
- call constitutive_j2_LpAndItsTangent(Lp,dLp_dTstar, &
- Tstar_v/constitutive_getNonlocalDamage(ipc,ip,el),ipc,ip,el)
+ call constitutive_j2_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v_effective,ipc,ip,el)
case (PLASTICITY_PHENOPOWERLAW_ID)
- call constitutive_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar, &
- Tstar_v/constitutive_getNonlocalDamage(ipc,ip,el),ipc,ip,el)
+ call constitutive_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v_effective,ipc,ip,el)
case (PLASTICITY_NONLOCAL_ID)
- call constitutive_nonlocal_LpAndItsTangent(Lp,dLp_dTstar,&
- Tstar_v/constitutive_getNonlocalDamage(ipc,ip,el),temperature,ip,el)
+ call constitutive_nonlocal_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v_effective,temperature,ip,el)
case (PLASTICITY_DISLOTWIN_ID)
- call constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar, &
- Tstar_v/constitutive_getNonlocalDamage(ipc,ip,el),temperature,ipc,ip,el)
+ call constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v_effective,temperature,ipc,ip,el)
case (PLASTICITY_DISLOKMC_ID)
- call constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,&
- Tstar_v/constitutive_getNonlocalDamage(ipc,ip,el),temperature,ipc,ip,el)
+ call constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v_effective,temperature,ipc,ip,el)
case (PLASTICITY_TITANMOD_ID)
- call constitutive_titanmod_LpAndItsTangent(Lp,dLp_dTstar, &
- Tstar_v/constitutive_getNonlocalDamage(ipc,ip,el),temperature,ipc,ip,el)
+ call constitutive_titanmod_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v_effective,temperature,ipc,ip,el)
end select
@@ -479,32 +476,19 @@ subroutine constitutive_hooke_TandItsTangent(T, dT_dFe, Fe, ipc, ip, el)
dT_dFe !< dT/dFe
integer(pInt) :: i, j, k, l
- real(pReal) :: damage, pressure
+ real(pReal) :: damage
real(pReal), dimension(3,3,3,3) :: C
- C = math_Mandel66to3333(constitutive_homogenizedC(ipc,ip,el))
+ damage = constitutive_getNonlocalDamage(ipc,ip,el)
+ C = damage*damage*math_Mandel66to3333(constitutive_homogenizedC(ipc,ip,el))
T = math_mul3333xx33(C,0.5_pReal*(math_mul33x33(math_transpose33(Fe),Fe)-math_I3) - &
lattice_thermalExpansion33(1:3,1:3,mappingConstitutive(2,ipc,ip,el))* &
(constitutive_getConductionThermal(ipc,ip,el) - &
lattice_referenceTemperature(mappingConstitutive(2,ipc,ip,el))))
- pressure = math_trace33(T)/3.0_pReal
- damage = constitutive_getNonlocalDamage(ipc,ip,el)
- T = damage*T
-
- if(pressure >= 0.0_pReal) then
- 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) &
- dT_dFe(i,j,k,l) = damage*sum(C(i,j,l,1:3)*Fe(k,1:3)) ! dT*_ij/dFe_kl
-
- else
- T = T + (1.0_pReal - damage)*pressure*math_I3
- dT_dFe = 0.0_pReal
- do i=1_pInt, 3_pInt; do j=1_pInt,3_pInt; do k=1_pInt,3_pInt; do l=1_pInt,3_pInt
- dT_dFe(i,j,k,l) = dT_dFe(i,j,k,l) + damage*sum(C(i,j,l,1:3)*Fe(k,1:3)) + &
- (1.0_pReal - damage)*math_trace33(C(i,j,1:3,1:3))*Fe(l,k)/3.0_pReal
- enddo; enddo; enddo; enddo
- endif
+ 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) &
+ dT_dFe(i,j,k,l) = sum(C(i,j,l,1:3)*Fe(k,1:3)) ! dT*_ij/dFe_kl
end subroutine constitutive_hooke_TandItsTangent
@@ -903,6 +887,10 @@ function constitutive_postResults(Tstar_v, FeArray, temperature, ipc, ip, el)
FeArray !< elastic deformation gradient
real(pReal), intent(in), dimension(6) :: &
Tstar_v !< 2nd Piola Kirchhoff stress tensor (Mandel)
+ real(pReal) :: damage, Tstar_v_effective(6)
+
+ damage = constitutive_getNonlocalDamage(ipc,ip,el)
+ Tstar_v_effective = damage*damage*Tstar_v
constitutive_postResults = 0.0_pReal
@@ -910,19 +898,19 @@ function constitutive_postResults(Tstar_v, FeArray, temperature, ipc, ip, el)
case (PLASTICITY_TITANMOD_ID)
constitutive_postResults = constitutive_titanmod_postResults(ipc,ip,el)
case (PLASTICITY_J2_ID)
- constitutive_postResults= constitutive_j2_postResults(Tstar_v/constitutive_getNonlocalDamage(ipc,ip,el),ipc,ip,el)
+ constitutive_postResults= constitutive_j2_postResults(Tstar_v_effective,ipc,ip,el)
case (PLASTICITY_PHENOPOWERLAW_ID)
constitutive_postResults = &
- constitutive_phenopowerlaw_postResults(Tstar_v/constitutive_getNonlocalDamage(ipc,ip,el),ipc,ip,el)
+ constitutive_phenopowerlaw_postResults(Tstar_v_effective,ipc,ip,el)
case (PLASTICITY_DISLOTWIN_ID)
constitutive_postResults = &
- constitutive_dislotwin_postResults(Tstar_v/constitutive_getNonlocalDamage(ipc,ip,el),Temperature,ipc,ip,el)
+ constitutive_dislotwin_postResults(Tstar_v_effective,Temperature,ipc,ip,el)
case (PLASTICITY_DISLOKMC_ID)
constitutive_postResults = &
- constitutive_dislokmc_postResults(Tstar_v/constitutive_getNonlocalDamage(ipc,ip,el),Temperature,ipc,ip,el)
+ constitutive_dislokmc_postResults(Tstar_v_effective,Temperature,ipc,ip,el)
case (PLASTICITY_NONLOCAL_ID)
constitutive_postResults = &
- constitutive_nonlocal_postResults (Tstar_v/constitutive_getNonlocalDamage(ipc,ip,el),FeArray,ip,el)
+ constitutive_nonlocal_postResults (Tstar_v_effective,FeArray,ip,el)
end select
end function constitutive_postResults
diff --git a/code/damage_local.f90 b/code/damage_local.f90
index a8769d412..93e96b479 100644
--- a/code/damage_local.f90
+++ b/code/damage_local.f90
@@ -221,8 +221,8 @@ subroutine damage_local_stateInit(phase,instance)
real(pReal), dimension(damageState(phase)%sizeState) :: tempState
- tempState(1) = 0.0_pReal
- tempState(2) = 1.0_pReal
+ tempState(1) = 1.0_pReal
+ tempState(2) = 0.0_pReal
damageState(phase)%state = spread(tempState,2,size(damageState(phase)%state(1,:)))
damageState(phase)%state0 = damageState(phase)%state
damageState(phase)%partionedState0 = damageState(phase)%state
@@ -340,7 +340,6 @@ function constitutive_brittle_getDamage(ipc, ip, el)
real(pReal) :: constitutive_brittle_getDamage
constitutive_brittle_getDamage = &
- 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_brittle_getDamage
@@ -361,7 +360,7 @@ subroutine constitutive_brittle_putDamage(ipc, ip, el, localDamage)
real(pReal), intent(in) :: localDamage
damageState(mappingConstitutive(2,ipc,ip,el))%state(1,mappingConstitutive(1,ipc,ip,el)) = &
- localDamage
+ localDamage
end subroutine constitutive_brittle_putDamage