local stress correction of gradient in dead dislocations and neighboring excess density is additive
This commit is contained in:
parent
06c93435f2
commit
6bca2150f2
|
@ -951,7 +951,6 @@ integer(pInt) neighboring_el, & ! element number o
|
||||||
s, & ! slip system index
|
s, & ! slip system index
|
||||||
t, & ! index of dilsocation type (e+, e-, s+, s-, used e+, used e-, used s+, used s-)
|
t, & ! index of dilsocation type (e+, e-, s+, s-, used e+, used e-, used s+, used s-)
|
||||||
dir, &
|
dir, &
|
||||||
side, &
|
|
||||||
n
|
n
|
||||||
integer(pInt), dimension(2) :: neighbor
|
integer(pInt), dimension(2) :: neighbor
|
||||||
real(pReal) nu, & ! poisson's ratio
|
real(pReal) nu, & ! poisson's ratio
|
||||||
|
@ -959,28 +958,20 @@ real(pReal) nu, & ! poisson's ratio
|
||||||
b, &
|
b, &
|
||||||
detFe, &
|
detFe, &
|
||||||
detFp, &
|
detFp, &
|
||||||
FVsize, &
|
FVsize
|
||||||
rhoExcessGradient
|
real(pReal), dimension(2) :: rhoExcessGradient, &
|
||||||
real(pReal), dimension(2) :: rhoExcessGradient_over_rho, &
|
rhoExcessGradient_over_rho, &
|
||||||
gradient, &
|
rhoTotal
|
||||||
gradientDeads, &
|
|
||||||
gradientInter, &
|
|
||||||
gradientDistance, &
|
|
||||||
gradientDistanceDeads, &
|
|
||||||
gradientDistanceInter, &
|
|
||||||
rhoExcessAtSampledPoint
|
|
||||||
real(pReal), dimension(3) :: ipCoords, &
|
real(pReal), dimension(3) :: ipCoords, &
|
||||||
neighboring_ipCoords
|
neighboring_ipCoords, &
|
||||||
real(pReal), dimension(FE_maxNipNeighbors) :: &
|
rhoExcessDifferences
|
||||||
distance ! length of connection vector
|
|
||||||
real(pReal), dimension(constitutive_nonlocal_totalNslip(phase_plasticityInstance(material_phase(g,ip,el)))) :: &
|
real(pReal), dimension(constitutive_nonlocal_totalNslip(phase_plasticityInstance(material_phase(g,ip,el)))) :: &
|
||||||
rhoForest, & ! forest dislocation density
|
rhoForest, & ! forest dislocation density
|
||||||
tauBack, & ! back stress from pileup on same slip system
|
tauBack, & ! back stress from pileup on same slip system
|
||||||
tauThreshold ! threshold shear stress
|
tauThreshold ! threshold shear stress
|
||||||
real(pReal), dimension(3,2) :: rhoExcessDifferences, &
|
|
||||||
sampledPoint
|
|
||||||
real(pReal), dimension(3,3) :: invFe, & ! inverse of elastic deformation gradient
|
real(pReal), dimension(3,3) :: invFe, & ! inverse of elastic deformation gradient
|
||||||
invFp ! inverse of plastic deformation gradient
|
invFp, & ! inverse of plastic deformation gradient
|
||||||
|
connections
|
||||||
real(pReal), dimension(3,FE_maxNipNeighbors) :: &
|
real(pReal), dimension(3,FE_maxNipNeighbors) :: &
|
||||||
connection_latticeConf, &
|
connection_latticeConf, &
|
||||||
areaNormal_latticeConf
|
areaNormal_latticeConf
|
||||||
|
@ -990,7 +981,6 @@ real(pReal), dimension(constitutive_nonlocal_totalNslip(phase_plasticityInstance
|
||||||
rhoDip ! dipole dislocation density (edge, screw)
|
rhoDip ! dipole dislocation density (edge, screw)
|
||||||
real(pReal), dimension(constitutive_nonlocal_totalNslip(phase_plasticityInstance(material_phase(g,ip,el))),8) :: &
|
real(pReal), dimension(constitutive_nonlocal_totalNslip(phase_plasticityInstance(material_phase(g,ip,el))),8) :: &
|
||||||
rhoSgl ! single dislocation density (edge+, edge-, screw+, screw-, used edge+, used edge-, used screw+, used screw-)
|
rhoSgl ! single dislocation density (edge+, edge-, screw+, screw-, used edge+, used edge-, used screw+, used screw-)
|
||||||
real(pReal), dimension(3,3,2) :: connections
|
|
||||||
real(pReal), dimension(2,maxval(constitutive_nonlocal_totalNslip),FE_maxNipNeighbors) :: &
|
real(pReal), dimension(2,maxval(constitutive_nonlocal_totalNslip),FE_maxNipNeighbors) :: &
|
||||||
neighboring_rhoExcess ! excess density at neighboring material point
|
neighboring_rhoExcess ! excess density at neighboring material point
|
||||||
real(pReal), dimension(3,constitutive_nonlocal_totalNslip(phase_plasticityInstance(material_phase(g,ip,el))),2) :: &
|
real(pReal), dimension(3,constitutive_nonlocal_totalNslip(phase_plasticityInstance(material_phase(g,ip,el))),2) :: &
|
||||||
|
@ -1075,7 +1065,7 @@ if (.not. phase_localPlasticity(phase)) then
|
||||||
- state(g,neighboring_ip,neighboring_el)%p((2_pInt*c-1_pInt)*ns+s) ! negative mobiles
|
- state(g,neighboring_ip,neighboring_el)%p((2_pInt*c-1_pInt)*ns+s) ! negative mobiles
|
||||||
else
|
else
|
||||||
! thats myself! probably using periodic images
|
! thats myself! probably using periodic images
|
||||||
connection_latticeConf(1:3,n) = areaNormal_latticeConf(1:3,n) * FVsize
|
connection_latticeConf(1:3,n) = 0.0_pReal
|
||||||
neighboring_rhoExcess(1:2,1:ns,n) = rhoExcess
|
neighboring_rhoExcess(1:2,1:ns,n) = rhoExcess
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
|
@ -1084,99 +1074,54 @@ if (.not. phase_localPlasticity(phase)) then
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
! local neighbor or different lattice structure or different plasticity instance
|
! local neighbor or different lattice structure or different plasticity instance
|
||||||
connection_latticeConf(1:3,n) = math_mul33x3(invFe, neighboring_ipCoords - ipCoords)
|
connection_latticeConf(1:3,n) = 0.0_pReal ! use central values instead
|
||||||
neighboring_rhoExcess(1:2,1:ns,n) = rhoExcess
|
neighboring_rhoExcess(1:2,1:ns,n) = rhoExcess
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
! free surface
|
! free surface
|
||||||
connection_latticeConf(1:3,n) = areaNormal_latticeConf(1:3,n) * FVsize
|
connection_latticeConf(1:3,n) = 0.0_pReal ! use central values instead
|
||||||
neighboring_rhoExcess(1:2,1:ns,n) = rhoExcess
|
neighboring_rhoExcess(1:2,1:ns,n) = rhoExcess
|
||||||
endif
|
endif
|
||||||
distance(n) = math_norm3(connection_latticeConf(1:3,n))
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
!* loop through the slip systems
|
|
||||||
!* calculate the dislocation gradient in both directions of m with two different methods:
|
!* loop through the slip systems and calculate the dislocation gradient by
|
||||||
!* 1. gradient between central excess density and dead dislocations in central ip
|
!* 1. interpolation of the excess density in the neighorhood
|
||||||
!* 2. interpolate gradient from excess density in three neighboring ips
|
!* 2. interpolation of the dead dislocation density in the central volume
|
||||||
!* take the heigher gradient in both directions and do a weighted sum with weights according to the distance
|
|
||||||
|
|
||||||
m(1:3,1:ns,1) = lattice_sd(1:3, constitutive_nonlocal_slipSystemLattice(1:ns,instance), latticeStruct)
|
m(1:3,1:ns,1) = lattice_sd(1:3, constitutive_nonlocal_slipSystemLattice(1:ns,instance), latticeStruct)
|
||||||
m(1:3,1:ns,2) = -lattice_st(1:3, constitutive_nonlocal_slipSystemLattice(1:ns,instance), latticeStruct)
|
m(1:3,1:ns,2) = -lattice_st(1:3, constitutive_nonlocal_slipSystemLattice(1:ns,instance), latticeStruct)
|
||||||
|
|
||||||
do s = 1_pInt,ns
|
do s = 1_pInt,ns
|
||||||
rhoExcessGradient_over_rho = 0.0_pReal
|
|
||||||
|
!* gradient from interpolation of neighboring excess density
|
||||||
|
|
||||||
do c = 1_pInt,2_pInt
|
do c = 1_pInt,2_pInt
|
||||||
if (rhoSgl(s,2_pInt*c-1_pInt) + rhoSgl(s,2_pInt*c) < 1.0_pReal) then
|
|
||||||
cycle ! no siginificant density
|
|
||||||
endif
|
|
||||||
|
|
||||||
!* gradient from dead dislocations
|
|
||||||
|
|
||||||
gradientDeads = 0.0_pReal
|
|
||||||
if (rhoSgl(s,2_pInt*c+3_pInt) > 0.0_pReal) then ! positive deads
|
|
||||||
gradientDeads(1) = + 2.0_pReal * rhoSgl(s,2_pInt*c+3_pInt) / FVsize ! on positive side
|
|
||||||
else
|
|
||||||
gradientDeads(2) = - 2.0_pReal * rhoSgl(s,2_pInt*c+3_pInt) / FVsize ! on negative side
|
|
||||||
endif
|
|
||||||
if (rhoSgl(s,2_pInt*c+4_pInt) > 0.0_pReal) then ! negative deads
|
|
||||||
gradientDeads(2) = gradientDeads(2) + 2.0_pReal * rhoSgl(s,2_pInt*c+4_pInt) / FVsize ! on negative side
|
|
||||||
else
|
|
||||||
gradientDeads(1) = gradientDeads(1) - 2.0_pReal * rhoSgl(s,2_pInt*c+4_pInt) / FVsize ! on positive side
|
|
||||||
endif
|
|
||||||
gradientDistanceDeads(1:2) = 0.5_pReal * FVsize
|
|
||||||
|
|
||||||
!* gradient from interpolation
|
|
||||||
|
|
||||||
gradientInter = 0.0_pReal
|
|
||||||
rhoExcessDifferences = 0.0_pReal
|
|
||||||
connections = 0.0_pReal
|
|
||||||
gradientDistanceInter = 0.0_pReal
|
|
||||||
do dir = 1_pInt,3_pInt
|
do dir = 1_pInt,3_pInt
|
||||||
if (math_mul3x3(areaNormal_latticeConf(1:3,2_pInt*dir-1_pInt),m(1:3,s,c)) > 0.0_pReal) then ! on positive side
|
|
||||||
neighbor(1) = 2_pInt * dir - 1_pInt
|
neighbor(1) = 2_pInt * dir - 1_pInt
|
||||||
neighbor(2) = 2_pInt * dir
|
neighbor(2) = 2_pInt * dir
|
||||||
else ! on negative side
|
connections(dir,1:3) = connection_latticeConf(1:3,neighbor(1)) - connection_latticeConf(1:3,neighbor(2))
|
||||||
neighbor(1) = 2_pInt * dir
|
rhoExcessDifferences(dir) = neighboring_rhoExcess(c,s,neighbor(1)) - neighboring_rhoExcess(c,s,neighbor(2))
|
||||||
neighbor(2) = 2_pInt * dir - 1_pInt
|
|
||||||
endif
|
|
||||||
do side = 1_pInt,2_pInt
|
|
||||||
n = neighbor(side)
|
|
||||||
rhoExcessDifferences(dir,side) = neighboring_rhoExcess(c,s,n) - rhoExcess(c,s)
|
|
||||||
connections(dir,1:3,side) = connection_latticeConf(1:3,n)
|
|
||||||
gradientDistanceInter(side) = gradientDistanceInter(side) &
|
|
||||||
+ (math_mul3x3(connection_latticeConf(1:3,n),m(1:3,s,c))) ** 2.0_pReal / distance(n)
|
|
||||||
enddo
|
enddo
|
||||||
|
rhoExcessGradient(c) = math_mul3x3(math_mul33x3(math_inv33(connections), rhoExcessDifferences), m(1:3,s,c))
|
||||||
enddo
|
enddo
|
||||||
sampledPoint(1:3,1) = + gradientDistanceInter(1) * m(1:3,s,c)
|
|
||||||
sampledPoint(1:3,2) = - gradientDistanceInter(2) * m(1:3,s,c)
|
|
||||||
do side = 1_pInt,2_pInt
|
|
||||||
rhoExcessAtSampledPoint(side) = math_mul3x3(math_mul33x3(math_inv33(connections(1:3,1:3,side)), &
|
|
||||||
rhoExcessDifferences(1:3,side)), &
|
|
||||||
sampledPoint(1:3,side)) &
|
|
||||||
+ rhoExcess(c,s)
|
|
||||||
enddo
|
|
||||||
gradientInter(1) = (rhoExcessAtSampledPoint(1) - rhoExcess(c,s)) / gradientDistanceInter(1)
|
|
||||||
gradientInter(2) = (rhoExcess(c,s) - rhoExcessAtSampledPoint(2)) / gradientDistanceInter(2)
|
|
||||||
|
|
||||||
!* take maximum of both gradients and mix contributions from both sides according to weighted distances
|
!* plus gradient from deads
|
||||||
|
|
||||||
do dir = 1_pInt,2_pInt
|
do t = 1_pInt,4_pInt
|
||||||
if (abs(gradientDeads(dir)) > abs(gradientInter(dir))) then
|
c = (t - 1_pInt) / 2_pInt + 1_pInt
|
||||||
gradient(dir) = gradientDeads(dir)
|
rhoExcessGradient(c) = rhoExcessGradient(c) + rhoSgl(s,t+4_pInt) / FVsize
|
||||||
gradientDistance(dir) = gradientDistanceDeads(dir)
|
|
||||||
else
|
|
||||||
gradient(dir) = gradientInter(dir)
|
|
||||||
gradientDistance(dir) = gradientDistanceInter(dir)
|
|
||||||
endif
|
|
||||||
enddo
|
enddo
|
||||||
rhoExcessGradient = (gradient(1) * gradientDistance(2) + gradient(2) * gradientDistance(1)) &
|
|
||||||
/ (gradientDistance(1) + gradientDistance(2))
|
|
||||||
|
|
||||||
!* excess gradient over density: in case of vanishing central total density we take the distance squared instead!!!
|
!* normalized with the total density
|
||||||
|
|
||||||
rhoExcessGradient_over_rho(c) = rhoExcessGradient / (rhoSgl(s,2_pInt*c-1_pInt) + rhoSgl(s,2_pInt*c))
|
rhoExcessGradient_over_rho = 0.0_pReal
|
||||||
enddo
|
rhoTotal(1_pInt) = sum(abs(rhoSgl(s,[1_pInt,2_pInt,5_pInt,6_pInt]))) + rhoDip(s,1_pInt)
|
||||||
|
rhoTotal(2_pInt) = sum(abs(rhoSgl(s,[3_pInt,4_pInt,7_pInt,8_pInt]))) + rhoDip(s,2_pInt)
|
||||||
|
forall (c = 1_pInt:2_pInt, rhoTotal(c) > 0.0_pReal) &
|
||||||
|
rhoExcessGradient_over_rho(c) = rhoExcessGradient(c) / rhoTotal(c)
|
||||||
|
|
||||||
|
!* gives the local stress correction when multiplied with a factor
|
||||||
|
|
||||||
b = constitutive_nonlocal_burgers(s,instance)
|
b = constitutive_nonlocal_burgers(s,instance)
|
||||||
tauBack(s) = - mu * b / (2.0_pReal * pi) * (rhoExcessGradient_over_rho(1) / (1.0_pReal - nu) + rhoExcessGradient_over_rho(2))
|
tauBack(s) = - mu * b / (2.0_pReal * pi) * (rhoExcessGradient_over_rho(1) / (1.0_pReal - nu) + rhoExcessGradient_over_rho(2))
|
||||||
|
|
Loading…
Reference in New Issue