brittle anisotropic damage on cleavage planes
This commit is contained in:
parent
a6f88c0e37
commit
b0469854c8
|
@ -26,10 +26,10 @@ module damage_anisoBrittle
|
|||
damage_anisoBrittle_Noutput !< number of outputs per instance of this damage
|
||||
|
||||
integer(pInt), dimension(:), allocatable, private :: &
|
||||
damage_anisoBrittle_totalNslip !< Todo
|
||||
damage_anisoBrittle_totalNcleavage !< total number of cleavage systems
|
||||
|
||||
integer(pInt), dimension(:,:), allocatable, private :: &
|
||||
damage_anisoBrittle_Nslip !< Todo
|
||||
damage_anisoBrittle_Ncleavage !< number of cleavage systems per family
|
||||
|
||||
real(pReal), dimension(:), allocatable, private :: &
|
||||
damage_anisoBrittle_aTol, &
|
||||
|
@ -103,7 +103,7 @@ subroutine damage_anisoBrittle_init(fileUnit)
|
|||
worldrank, &
|
||||
numerics_integrator
|
||||
use lattice, only: &
|
||||
lattice_maxNslipFamily
|
||||
lattice_maxNcleavageFamily
|
||||
|
||||
implicit none
|
||||
integer(pInt), intent(in) :: fileUnit
|
||||
|
@ -113,7 +113,7 @@ subroutine damage_anisoBrittle_init(fileUnit)
|
|||
integer(pInt) :: maxNinstance,mySize=0_pInt,phase,instance,o
|
||||
integer(pInt) :: sizeState, sizeDotState
|
||||
integer(pInt) :: NofMyPhase
|
||||
integer(pInt) :: Nchunks_SlipFamilies, j
|
||||
integer(pInt) :: Nchunks_CleavageFamilies, j
|
||||
character(len=65536) :: &
|
||||
tag = '', &
|
||||
line = ''
|
||||
|
@ -137,10 +137,10 @@ subroutine damage_anisoBrittle_init(fileUnit)
|
|||
damage_anisoBrittle_output = ''
|
||||
allocate(damage_anisoBrittle_outputID(maxval(phase_Noutput),maxNinstance), source=undefined_ID)
|
||||
allocate(damage_anisoBrittle_Noutput(maxNinstance), source=0_pInt)
|
||||
allocate(damage_anisoBrittle_critDisp(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal)
|
||||
allocate(damage_anisoBrittle_critLoad (lattice_maxNslipFamily,maxNinstance), source=0.0_pReal)
|
||||
allocate(damage_anisoBrittle_Nslip(lattice_maxNslipFamily,maxNinstance), source=0_pInt)
|
||||
allocate(damage_anisoBrittle_totalNslip(maxNinstance), source=0_pInt)
|
||||
allocate(damage_anisoBrittle_critDisp(lattice_maxNcleavageFamily,maxNinstance), source=0.0_pReal)
|
||||
allocate(damage_anisoBrittle_critLoad(lattice_maxNcleavageFamily,maxNinstance), source=0.0_pReal)
|
||||
allocate(damage_anisoBrittle_Ncleavage(lattice_maxNcleavageFamily,maxNinstance), source=0_pInt)
|
||||
allocate(damage_anisoBrittle_totalNcleavage(maxNinstance), source=0_pInt)
|
||||
allocate(damage_anisoBrittle_aTol(maxNinstance), source=0.0_pReal)
|
||||
allocate(damage_anisoBrittle_sdot_0(maxNinstance), source=0.0_pReal)
|
||||
allocate(damage_anisoBrittle_N(maxNinstance), source=0.0_pReal)
|
||||
|
@ -182,23 +182,23 @@ subroutine damage_anisoBrittle_init(fileUnit)
|
|||
case ('sdot_0')
|
||||
damage_anisoBrittle_sdot_0(instance) = IO_floatValue(line,positions,2_pInt)
|
||||
|
||||
case ('n_damage')
|
||||
case ('rate_sensitivity_damage')
|
||||
damage_anisoBrittle_N(instance) = IO_floatValue(line,positions,2_pInt)
|
||||
|
||||
case ('Nslip') !
|
||||
Nchunks_SlipFamilies = positions(1) - 1_pInt
|
||||
do j = 1_pInt, Nchunks_SlipFamilies
|
||||
damage_anisoBrittle_Nslip(j,instance) = IO_intValue(line,positions,1_pInt+j)
|
||||
case ('ncleavage') !
|
||||
Nchunks_CleavageFamilies = positions(1) - 1_pInt
|
||||
do j = 1_pInt, Nchunks_CleavageFamilies
|
||||
damage_anisoBrittle_Ncleavage(j,instance) = IO_intValue(line,positions,1_pInt+j)
|
||||
enddo
|
||||
damage_anisoBrittle_totalNslip(instance) = sum(damage_anisoBrittle_Nslip(:,instance))
|
||||
damage_anisoBrittle_totalNcleavage(instance) = sum(damage_anisoBrittle_Ncleavage(:,instance))
|
||||
|
||||
case ('critical_displacement')
|
||||
do j = 1_pInt, Nchunks_SlipFamilies
|
||||
do j = 1_pInt, Nchunks_CleavageFamilies
|
||||
damage_anisoBrittle_critDisp(j,instance) = IO_floatValue(line,positions,1_pInt+j)
|
||||
enddo
|
||||
|
||||
case ('critical_load')
|
||||
do j = 1_pInt, Nchunks_SlipFamilies
|
||||
do j = 1_pInt, Nchunks_CleavageFamilies
|
||||
damage_anisoBrittle_critLoad(j,instance) = IO_floatValue(line,positions,1_pInt+j)
|
||||
enddo
|
||||
|
||||
|
@ -216,7 +216,7 @@ subroutine damage_anisoBrittle_init(fileUnit)
|
|||
outputsLoop: do o = 1_pInt,damage_anisoBrittle_Noutput(instance)
|
||||
select case(damage_anisoBrittle_outputID(o,instance))
|
||||
case(local_damage_ID)
|
||||
mySize = damage_anisoBrittle_totalNslip(instance)
|
||||
mySize = 1_pInt
|
||||
end select
|
||||
|
||||
if (mySize > 0_pInt) then ! any meaningful output found
|
||||
|
@ -227,7 +227,7 @@ subroutine damage_anisoBrittle_init(fileUnit)
|
|||
! Determine size of state array
|
||||
sizeDotState = 2_pInt + & ! viscous and non-viscous damage values
|
||||
9_pInt + & ! damage deformation gradient
|
||||
damage_anisoBrittle_totalNslip(instance) ! opening on each damage system
|
||||
3_pInt*damage_anisoBrittle_totalNcleavage(instance) ! opening on each damage system
|
||||
sizeState = sizeDotState
|
||||
|
||||
damageState(phase)%sizeState = sizeState
|
||||
|
@ -314,12 +314,13 @@ subroutine damage_anisoBrittle_dotState(Tstar_v,ipc, ip, el)
|
|||
phase_damageInstance, &
|
||||
damageState
|
||||
use math, only: &
|
||||
math_mul33x33
|
||||
math_mul33x33, &
|
||||
math_norm3
|
||||
use lattice, only: &
|
||||
lattice_Sslip, &
|
||||
lattice_Sslip_v, &
|
||||
lattice_maxNslipFamily, &
|
||||
lattice_NslipSystem, &
|
||||
lattice_Scleavage, &
|
||||
lattice_Scleavage_v, &
|
||||
lattice_maxNcleavageFamily, &
|
||||
lattice_NcleavageSystem, &
|
||||
lattice_DamageMobility
|
||||
|
||||
implicit none
|
||||
|
@ -333,12 +334,12 @@ subroutine damage_anisoBrittle_dotState(Tstar_v,ipc, ip, el)
|
|||
phase, &
|
||||
constituent, &
|
||||
instance, &
|
||||
j, f, i, index_myFamily
|
||||
f, i, index, index_myFamily
|
||||
real(pReal), dimension(3,3) :: &
|
||||
Ld
|
||||
Ld, Fd
|
||||
real(pReal) :: &
|
||||
tau, &
|
||||
tau_critical, &
|
||||
traction_d, traction_t, traction_n, traction_crit, &
|
||||
opening, &
|
||||
nonLocalFactor
|
||||
|
||||
phase = mappingConstitutive(2,ipc,ip,el)
|
||||
|
@ -351,30 +352,49 @@ subroutine damage_anisoBrittle_dotState(Tstar_v,ipc, ip, el)
|
|||
damageState(phase)%state(1,constituent))
|
||||
|
||||
nonLocalFactor = 1.0_pReal + &
|
||||
(damageState(phase)%state(1,constituent) - &
|
||||
damage_anisoBrittle_getDamage(ipc, ip, el))
|
||||
(damage_anisoBrittle_getDamage(ipc, ip, el) - &
|
||||
damageState(phase)%state(1,constituent))
|
||||
Ld = 0.0_pReal
|
||||
j = 0_pInt
|
||||
slipFamiliesLoop: do f = 1_pInt,lattice_maxNslipFamily
|
||||
index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,phase)) ! at which index starts my family
|
||||
do i = 1_pInt,damage_anisoBrittle_Nslip(f,instance) ! process each (active) slip system in family
|
||||
j = j+1_pInt
|
||||
tau = dot_product(Tstar_v,lattice_Sslip_v(1:6,1,index_myFamily+i,phase))
|
||||
tau_critical = (1.0_pReal - damageState(phase)%state(11+j,constituent)/&
|
||||
damage_anisoBrittle_critDisp(f,instance))* &
|
||||
index = 11_pInt
|
||||
do f = 1_pInt,lattice_maxNcleavageFamily
|
||||
index_myFamily = sum(lattice_NcleavageSystem(1:f-1_pInt,phase)) ! at which index starts my family
|
||||
do i = 1_pInt,damage_anisoBrittle_Ncleavage(f,instance) ! process each (active) cleavage system in family
|
||||
opening = math_norm3(damageState(phase)%state(index+1:index+3,constituent))
|
||||
traction_d = dot_product(Tstar_v,lattice_Scleavage_v(1:6,1,index_myFamily+i,phase))
|
||||
traction_t = dot_product(Tstar_v,lattice_Scleavage_v(1:6,2,index_myFamily+i,phase))
|
||||
traction_n = dot_product(Tstar_v,lattice_Scleavage_v(1:6,3,index_myFamily+i,phase))
|
||||
traction_crit = (1.0_pReal - opening/damage_anisoBrittle_critDisp(f,instance))* &
|
||||
damage_anisoBrittle_critLoad(f,instance)*nonLocalFactor
|
||||
damageState(phase)%dotState(11+j,constituent) = &
|
||||
damage_anisoBrittle_sdot_0(instance)*(tau/tau_critical)**damage_anisoBrittle_N(instance)
|
||||
damageState(phase)%dotState(index+1,constituent) = &
|
||||
sign(1.0_pReal,traction_d)* &
|
||||
damage_anisoBrittle_sdot_0(instance)* &
|
||||
(abs(traction_d)/traction_crit)**damage_anisoBrittle_N(instance)
|
||||
damageState(phase)%dotState(index+2,constituent) = &
|
||||
sign(1.0_pReal,traction_t)* &
|
||||
damage_anisoBrittle_sdot_0(instance)* &
|
||||
(abs(traction_t)/traction_crit)**damage_anisoBrittle_N(instance)
|
||||
damageState(phase)%dotState(index+3,constituent) = &
|
||||
sign(1.0_pReal,traction_n)* &
|
||||
damage_anisoBrittle_sdot_0(instance)* &
|
||||
(abs(traction_n)/traction_crit)**damage_anisoBrittle_N(instance)
|
||||
damageState(phase)%dotState(2,constituent) = &
|
||||
damageState(phase)%dotState(2,constituent) - &
|
||||
2.0_pReal*tau*damageState(phase)%dotState(11+j,constituent)/ &
|
||||
(damage_anisoBrittle_critDisp(f,instance)*damage_anisoBrittle_critLoad(f,instance))
|
||||
Ld = Ld + damageState(phase)%dotState(11+j,constituent)* &
|
||||
lattice_Sslip(1:3,1:3,1,index_myFamily+i,phase)
|
||||
(traction_d*damageState(phase)%dotState(index+1,constituent) + &
|
||||
traction_t*damageState(phase)%dotState(index+2,constituent) + &
|
||||
traction_n*damageState(phase)%dotState(index+3,constituent))/ &
|
||||
(0.5_pReal*damage_anisoBrittle_critDisp(f,instance)*damage_anisoBrittle_critLoad(f,instance))
|
||||
Ld = Ld + &
|
||||
damageState(phase)%dotState(index+1,constituent)* &
|
||||
lattice_Scleavage(1:3,1:3,1,index_myFamily+i,phase) + &
|
||||
damageState(phase)%dotState(index+2,constituent)* &
|
||||
lattice_Scleavage(1:3,1:3,2,index_myFamily+i,phase) + &
|
||||
damageState(phase)%dotState(index+3,constituent)* &
|
||||
lattice_Scleavage(1:3,1:3,3,index_myFamily+i,phase)
|
||||
index = index + 3_pInt
|
||||
enddo
|
||||
enddo slipFamiliesLoop
|
||||
damageState(phase)%dotState(3:11,constituent) = &
|
||||
reshape(math_mul33x33(Ld,reshape(damageState(phase)%state(3:11,constituent),shape=[3,3])),shape=[9])
|
||||
enddo
|
||||
Fd = reshape(damageState(phase)%state(3:11,constituent),shape=[3,3])
|
||||
damageState(phase)%dotState(3:11,constituent) = reshape(math_mul33x33(Ld,Fd),shape=[9])
|
||||
|
||||
end subroutine damage_anisoBrittle_dotState
|
||||
|
||||
|
@ -449,7 +469,7 @@ function damage_anisoBrittle_getLocalDamage(ipc, ip, el)
|
|||
damage_anisoBrittle_getLocalDamage
|
||||
|
||||
damage_anisoBrittle_getLocalDamage = &
|
||||
damageState(mappingConstitutive(2,ipc,ip,el))%state(1,mappingConstitutive(1,ipc,ip,el))
|
||||
max(0.0_pReal,damageState(mappingConstitutive(2,ipc,ip,el))%state(1,mappingConstitutive(1,ipc,ip,el)))
|
||||
|
||||
end function damage_anisoBrittle_getLocalDamage
|
||||
|
||||
|
@ -506,9 +526,9 @@ function damage_anisoBrittle_postResults(ipc,ip,el)
|
|||
do o = 1_pInt,damage_anisoBrittle_Noutput(instance)
|
||||
select case(damage_anisoBrittle_outputID(o,instance))
|
||||
case (local_damage_ID)
|
||||
damage_anisoBrittle_postResults(c+1_pInt:c+damage_anisoBrittle_totalNslip(instance)) = &
|
||||
damageState(phase)%state(1,constituent)
|
||||
c = c + damage_anisoBrittle_totalNslip(instance)
|
||||
damage_anisoBrittle_postResults(c+1_pInt) = &
|
||||
damage_anisoBrittle_getLocalDamage(ipc, ip, el)
|
||||
c = c + 1_pInt
|
||||
|
||||
end select
|
||||
enddo
|
||||
|
|
Loading…
Reference in New Issue