simplified dotState
This commit is contained in:
parent
17f955d3e8
commit
5dc5a25ab3
|
@ -26,7 +26,7 @@ module plastic_dislotwin
|
||||||
undefined_ID, &
|
undefined_ID, &
|
||||||
rho_mob_ID, &
|
rho_mob_ID, &
|
||||||
rho_dip_ID, &
|
rho_dip_ID, &
|
||||||
gamma_dot_sl_ID, &
|
dot_gamma_sl_ID, &
|
||||||
gamma_sl_ID, &
|
gamma_sl_ID, &
|
||||||
Lambda_sl_ID, &
|
Lambda_sl_ID, &
|
||||||
resolved_stress_slip_ID, &
|
resolved_stress_slip_ID, &
|
||||||
|
@ -481,7 +481,7 @@ subroutine plastic_dislotwin_init
|
||||||
outputID = merge(rho_dip_ID,undefined_ID,prm%sum_N_sl > 0)
|
outputID = merge(rho_dip_ID,undefined_ID,prm%sum_N_sl > 0)
|
||||||
outputSize = prm%sum_N_sl
|
outputSize = prm%sum_N_sl
|
||||||
case ('shear_rate_slip','shearrate_slip')
|
case ('shear_rate_slip','shearrate_slip')
|
||||||
outputID = merge(gamma_dot_sl_ID,undefined_ID,prm%sum_N_sl > 0)
|
outputID = merge(dot_gamma_sl_ID,undefined_ID,prm%sum_N_sl > 0)
|
||||||
outputSize = prm%sum_N_sl
|
outputSize = prm%sum_N_sl
|
||||||
case ('accumulated_shear_slip')
|
case ('accumulated_shear_slip')
|
||||||
outputID = merge(gamma_sl_ID,undefined_ID,prm%sum_N_sl > 0)
|
outputID = merge(gamma_sl_ID,undefined_ID,prm%sum_N_sl > 0)
|
||||||
|
@ -673,7 +673,7 @@ subroutine plastic_dislotwin_LpAndItsTangent(Lp,dLp_dMp,Mp,T,instance,of)
|
||||||
real(pReal), dimension(param(instance)%sum_N_tr) :: &
|
real(pReal), dimension(param(instance)%sum_N_tr) :: &
|
||||||
dot_gamma_tr,dgamma_dtau_trans
|
dot_gamma_tr,dgamma_dtau_trans
|
||||||
real(pReal):: dot_gamma_sb
|
real(pReal):: dot_gamma_sb
|
||||||
real(pReal), dimension(3,3) :: eigVectors, Schmid_shearBand
|
real(pReal), dimension(3,3) :: eigVectors, P_sb
|
||||||
real(pReal), dimension(3) :: eigValues
|
real(pReal), dimension(3) :: eigValues
|
||||||
logical :: error
|
logical :: error
|
||||||
real(pReal), dimension(3,6), parameter :: &
|
real(pReal), dimension(3,6), parameter :: &
|
||||||
|
@ -723,9 +723,9 @@ subroutine plastic_dislotwin_LpAndItsTangent(Lp,dLp_dMp,Mp,T,instance,of)
|
||||||
call math_eigenValuesVectorsSym(Mp,eigValues,eigVectors,error)
|
call math_eigenValuesVectorsSym(Mp,eigValues,eigVectors,error)
|
||||||
|
|
||||||
do i = 1,6
|
do i = 1,6
|
||||||
Schmid_shearBand = 0.5_pReal * math_outer(math_mul33x3(eigVectors,sb_sComposition(1:3,i)),&
|
P_sb = 0.5_pReal * math_outer(math_mul33x3(eigVectors,sb_sComposition(1:3,i)),&
|
||||||
math_mul33x3(eigVectors,sb_mComposition(1:3,i)))
|
math_mul33x3(eigVectors,sb_mComposition(1:3,i)))
|
||||||
tau = math_mul33xx33(Mp,Schmid_shearBand)
|
tau = math_mul33xx33(Mp,P_sb)
|
||||||
|
|
||||||
significantShearBandStress: if (abs(tau) > tol_math_check) then
|
significantShearBandStress: if (abs(tau) > tol_math_check) then
|
||||||
StressRatio_p = (abs(tau)/prm%sbResistance)**prm%p_sb
|
StressRatio_p = (abs(tau)/prm%sbResistance)**prm%p_sb
|
||||||
|
@ -734,10 +734,10 @@ subroutine plastic_dislotwin_LpAndItsTangent(Lp,dLp_dMp,Mp,T,instance,of)
|
||||||
* (abs(tau)/prm%sbResistance)**(prm%p_sb-1.0_pReal) &
|
* (abs(tau)/prm%sbResistance)**(prm%p_sb-1.0_pReal) &
|
||||||
* (1.0_pReal-StressRatio_p)**(prm%q_sb-1.0_pReal)
|
* (1.0_pReal-StressRatio_p)**(prm%q_sb-1.0_pReal)
|
||||||
|
|
||||||
Lp = Lp + dot_gamma_sb * Schmid_shearBand
|
Lp = Lp + dot_gamma_sb * P_sb
|
||||||
forall (k=1:3,l=1:3,m=1:3,n=1:3) &
|
forall (k=1:3,l=1:3,m=1:3,n=1:3) &
|
||||||
dLp_dMp(k,l,m,n) = dLp_dMp(k,l,m,n) &
|
dLp_dMp(k,l,m,n) = dLp_dMp(k,l,m,n) &
|
||||||
+ dgamma_dtau * Schmid_shearBand(k,l) * Schmid_shearBand(m,n)
|
+ dgamma_dtau * P_sb(k,l) * P_sb(m,n)
|
||||||
endif significantShearBandStress
|
endif significantShearBandStress
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
@ -789,12 +789,12 @@ subroutine plastic_dislotwin_dotState(Mp,T,instance,of)
|
||||||
integer :: i
|
integer :: i
|
||||||
real(pReal) :: f_unrotated,&
|
real(pReal) :: f_unrotated,&
|
||||||
VacancyDiffusion,&
|
VacancyDiffusion,&
|
||||||
EdgeDipDistance, ClimbVelocity,Dotrho_dipClimb,Dotrho_dipAnnihilation, &
|
rho_dip_distance, ClimbVelocity, &
|
||||||
Dotrho_DipFormation,Dotrho_mobEdgeAnnihilation, &
|
|
||||||
tau
|
tau
|
||||||
real(pReal), dimension(param(instance)%sum_N_sl) :: &
|
real(pReal), dimension(param(instance)%sum_N_sl) :: &
|
||||||
EdgeDipMinDistance, &
|
dot_rho_dip_formation, &
|
||||||
DotRhoMultiplication, &
|
dot_rho_dip_climb, &
|
||||||
|
rho_dip_distance_min, &
|
||||||
dot_gamma_sl
|
dot_gamma_sl
|
||||||
real(pReal), dimension(param(instance)%sum_N_tw) :: &
|
real(pReal), dimension(param(instance)%sum_N_tw) :: &
|
||||||
dot_gamma_twin
|
dot_gamma_twin
|
||||||
|
@ -812,47 +812,45 @@ subroutine plastic_dislotwin_dotState(Mp,T,instance,of)
|
||||||
call kinetics_slip(Mp,T,instance,of,dot_gamma_sl)
|
call kinetics_slip(Mp,T,instance,of,dot_gamma_sl)
|
||||||
dot%gamma_sl(:,of) = abs(dot_gamma_sl)
|
dot%gamma_sl(:,of) = abs(dot_gamma_sl)
|
||||||
|
|
||||||
DotRhoMultiplication = abs(dot_gamma_sl)/(prm%b_sl*dst%Lambda_sl(:,of))
|
rho_dip_distance_min = prm%CEdgeDipMinDistance*prm%b_sl
|
||||||
EdgeDipMinDistance = prm%CEdgeDipMinDistance*prm%b_sl
|
|
||||||
|
|
||||||
slipState: do i = 1, prm%sum_N_sl
|
slipState: do i = 1, prm%sum_N_sl
|
||||||
tau = math_mul33xx33(Mp,prm%P_sl(1:3,1:3,i))
|
tau = math_mul33xx33(Mp,prm%P_sl(1:3,1:3,i))
|
||||||
|
|
||||||
significantSlipStress: if (dEq0(tau)) then
|
significantSlipStress: if (dEq0(tau)) then
|
||||||
Dotrho_DipFormation = 0.0_pReal
|
dot_rho_dip_formation(i) = 0.0_pReal
|
||||||
Dotrho_dipClimb = 0.0_pReal
|
dot_rho_dip_climb(i) = 0.0_pReal
|
||||||
else significantSlipStress
|
else significantSlipStress
|
||||||
EdgeDipDistance = 3.0_pReal*prm%mu*prm%b_sl(i)/(16.0_pReal*PI*abs(tau))
|
rho_dip_distance = 3.0_pReal*prm%mu*prm%b_sl(i)/(16.0_pReal*PI*abs(tau))
|
||||||
EdgeDipDistance = math_clip(EdgeDipDistance, right = dst%Lambda_sl(i,of))
|
rho_dip_distance = math_clip(rho_dip_distance, right = dst%Lambda_sl(i,of))
|
||||||
EdgeDipDistance = math_clip(EdgeDipDistance, left = EdgeDipMinDistance(i))
|
rho_dip_distance = math_clip(rho_dip_distance, left = rho_dip_distance_min(i))
|
||||||
|
|
||||||
if (prm%dipoleFormation) then
|
if (prm%dipoleFormation) then
|
||||||
Dotrho_DipFormation = 2.0_pReal*(EdgeDipDistance-EdgeDipMinDistance(i))/prm%b_sl(i) &
|
dot_rho_dip_formation(i) = 2.0_pReal*(rho_dip_distance-rho_dip_distance_min(i))/prm%b_sl(i) &
|
||||||
* stt%rho_mob(i,of)*abs(dot_gamma_sl(i))
|
* stt%rho_mob(i,of)*abs(dot_gamma_sl(i))
|
||||||
else
|
else
|
||||||
Dotrho_DipFormation = 0.0_pReal
|
dot_rho_dip_formation(i) = 0.0_pReal
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if (dEq0(EdgeDipDistance-EdgeDipMinDistance(i))) then
|
if (dEq0(rho_dip_distance-rho_dip_distance_min(i))) then
|
||||||
Dotrho_dipClimb = 0.0_pReal
|
dot_rho_dip_climb(i) = 0.0_pReal
|
||||||
else
|
else
|
||||||
ClimbVelocity = 3.0_pReal*prm%mu*VacancyDiffusion*prm%atomicVolume(i) &
|
ClimbVelocity = 3.0_pReal*prm%mu*VacancyDiffusion*prm%atomicVolume(i) &
|
||||||
/ (2.0_pReal*PI*kB*T*(EdgeDipDistance+EdgeDipMinDistance(i)))
|
/ (2.0_pReal*PI*kB*T*(rho_dip_distance+rho_dip_distance_min(i)))
|
||||||
Dotrho_dipClimb = 4.0_pReal*ClimbVelocity*stt%rho_dip(i,of) &
|
dot_rho_dip_climb(i) = 4.0_pReal*ClimbVelocity*stt%rho_dip(i,of) &
|
||||||
/ (EdgeDipDistance-EdgeDipMinDistance(i))
|
/ (rho_dip_distance-rho_dip_distance_min(i))
|
||||||
endif
|
endif
|
||||||
endif significantSlipStress
|
endif significantSlipStress
|
||||||
|
|
||||||
!* Spontaneous annihilation of 2 single edge dislocations
|
|
||||||
Dotrho_mobEdgeAnnihilation = 2.0_pReal*EdgeDipMinDistance(i)/prm%b_sl(i) &
|
|
||||||
* stt%rho_mob(i,of)*abs(dot_gamma_sl(i))
|
|
||||||
!* Spontaneous annihilation of a single edge dislocation with a dipole constituent
|
|
||||||
Dotrho_dipAnnihilation = 2.0_pReal*EdgeDipMinDistance(i)/prm%b_sl(i) &
|
|
||||||
* stt%rho_dip(i,of)*abs(dot_gamma_sl(i))
|
|
||||||
|
|
||||||
dot%rho_mob(i,of) = DotRhoMultiplication(i)-Dotrho_DipFormation-Dotrho_mobEdgeAnnihilation
|
|
||||||
dot%rho_dip(i,of) = Dotrho_DipFormation-Dotrho_dipAnnihilation-Dotrho_dipClimb
|
|
||||||
enddo slipState
|
enddo slipState
|
||||||
|
|
||||||
|
dot%rho_mob(:,of) = abs(dot_gamma_sl)/(prm%b_sl*dst%Lambda_sl(:,of)) &
|
||||||
|
- dot_rho_dip_formation &
|
||||||
|
- 2.0_pReal*rho_dip_distance_min/prm%b_sl * stt%rho_mob(:,of)*abs(dot_gamma_sl)
|
||||||
|
|
||||||
|
dot%rho_dip(:,of) = dot_rho_dip_formation &
|
||||||
|
- 2.0_pReal*rho_dip_distance_min/prm%b_sl * stt%rho_dip(:,of)*abs(dot_gamma_sl) &
|
||||||
|
- dot_rho_dip_climb
|
||||||
|
|
||||||
|
|
||||||
call kinetics_twin(Mp,T,dot_gamma_sl,instance,of,dot_gamma_twin)
|
call kinetics_twin(Mp,T,dot_gamma_sl,instance,of,dot_gamma_twin)
|
||||||
dot%f_tw(:,of) = f_unrotated*dot_gamma_twin/prm%gamma_char
|
dot%f_tw(:,of) = f_unrotated*dot_gamma_twin/prm%gamma_char
|
||||||
|
@ -1024,7 +1022,7 @@ function plastic_dislotwin_postResults(Mp,T,instance,of) result(postResults)
|
||||||
case (rho_dip_ID)
|
case (rho_dip_ID)
|
||||||
postResults(c+1:c+prm%sum_N_sl) = stt%rho_dip(1:prm%sum_N_sl,of)
|
postResults(c+1:c+prm%sum_N_sl) = stt%rho_dip(1:prm%sum_N_sl,of)
|
||||||
c = c + prm%sum_N_sl
|
c = c + prm%sum_N_sl
|
||||||
case (gamma_dot_sl_ID)
|
case (dot_gamma_sl_ID)
|
||||||
call kinetics_slip(Mp,T,instance,of,postResults(c+1:c+prm%sum_N_sl))
|
call kinetics_slip(Mp,T,instance,of,postResults(c+1:c+prm%sum_N_sl))
|
||||||
c = c + prm%sum_N_sl
|
c = c + prm%sum_N_sl
|
||||||
case (gamma_sl_ID)
|
case (gamma_sl_ID)
|
||||||
|
|
Loading…
Reference in New Issue