[skip ci] adjusting to disloUCLA
This commit is contained in:
parent
f12b66b409
commit
f50e6fe5ad
|
@ -75,8 +75,8 @@ module plastic_dislotwin
|
||||||
b_tr, & !< absolute length of burgers vector [m] for each transformation system
|
b_tr, & !< absolute length of burgers vector [m] for each transformation system
|
||||||
Delta_F,& !< activation energy for glide [J] for each slip system
|
Delta_F,& !< activation energy for glide [J] for each slip system
|
||||||
v0, & !< dislocation velocity prefactor [m/s] for each slip system
|
v0, & !< dislocation velocity prefactor [m/s] for each slip system
|
||||||
Ndot0_twin, & !< twin nucleation rate [1/m³s] for each twin system
|
dot_N_0_tw, & !< twin nucleation rate [1/m³s] for each twin system
|
||||||
Ndot0_trans, & !< trans nucleation rate [1/m³s] for each trans system
|
dot_N_0_tr, & !< trans nucleation rate [1/m³s] for each trans system
|
||||||
twinsize, & !< twin thickness [m] for each twin system
|
twinsize, & !< twin thickness [m] for each twin system
|
||||||
CLambdaSlip, & !< Adj. parameter for distance between 2 forest dislocations for each slip system
|
CLambdaSlip, & !< Adj. parameter for distance between 2 forest dislocations for each slip system
|
||||||
atomicVolume, &
|
atomicVolume, &
|
||||||
|
@ -105,19 +105,19 @@ module plastic_dislotwin
|
||||||
C66_tw, &
|
C66_tw, &
|
||||||
C66_tr
|
C66_tr
|
||||||
integer :: &
|
integer :: &
|
||||||
sum_N_sl, & !< total number of active slip system
|
sum_N_sl, & !< total number of active slip system
|
||||||
sum_N_tw, & !< total number of active twin system
|
sum_N_tw, & !< total number of active twin system
|
||||||
sum_N_tr !< total number of active transformation system
|
sum_N_tr !< total number of active transformation system
|
||||||
integer, dimension(:), allocatable :: &
|
integer, dimension(:), allocatable :: &
|
||||||
N_sl, & !< number of active slip systems for each family
|
N_sl, & !< number of active slip systems for each family
|
||||||
N_tw, & !< number of active twin systems for each family
|
N_tw, & !< number of active twin systems for each family
|
||||||
N_tr !< number of active transformation systems for each family
|
N_tr !< number of active transformation systems for each family
|
||||||
integer(kind(undefined_ID)), dimension(:), allocatable :: &
|
integer(kind(undefined_ID)), dimension(:), allocatable :: &
|
||||||
outputID !< ID of each post result output
|
outputID !< ID of each post result output
|
||||||
logical :: &
|
logical :: &
|
||||||
fccTwinTransNucleation, & !< twinning and transformation models are for fcc
|
fccTwinTransNucleation, & !< twinning and transformation models are for fcc
|
||||||
dipoleFormation !< flag indicating consideration of dipole formation
|
dipoleFormation !< flag indicating consideration of dipole formation
|
||||||
end type !< container type for internal constitutive parameters
|
end type !< container type for internal constitutive parameters
|
||||||
|
|
||||||
type, private :: tDislotwinState
|
type, private :: tDislotwinState
|
||||||
real(pReal), dimension(:,:), pointer :: &
|
real(pReal), dimension(:,:), pointer :: &
|
||||||
|
@ -351,8 +351,8 @@ subroutine plastic_dislotwin_init
|
||||||
config%getFloat('c/a',defaultVal=0.0_pReal))
|
config%getFloat('c/a',defaultVal=0.0_pReal))
|
||||||
|
|
||||||
if (.not. prm%fccTwinTransNucleation) then
|
if (.not. prm%fccTwinTransNucleation) then
|
||||||
prm%Ndot0_twin = config%getFloats('ndot0_twin')
|
prm%dot_N_0_tw = config%getFloats('ndot0_twin')
|
||||||
prm%Ndot0_twin = math_expand(prm%Ndot0_twin,prm%N_tw)
|
prm%dot_N_0_tw = math_expand(prm%dot_N_0_tw,prm%N_tw)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
! expand: family => system
|
! expand: family => system
|
||||||
|
@ -397,8 +397,8 @@ subroutine plastic_dislotwin_init
|
||||||
config%getFloat('a_fcc', defaultVal=0.0_pReal))
|
config%getFloat('a_fcc', defaultVal=0.0_pReal))
|
||||||
|
|
||||||
if (lattice_structure(p) /= LATTICE_fcc_ID) then
|
if (lattice_structure(p) /= LATTICE_fcc_ID) then
|
||||||
prm%Ndot0_trans = config%getFloats('ndot0_trans')
|
prm%dot_N_0_tr = config%getFloats('ndot0_trans')
|
||||||
prm%Ndot0_trans = math_expand(prm%Ndot0_trans,prm%N_tr)
|
prm%dot_N_0_tr = math_expand(prm%dot_N_0_tr,prm%N_tr)
|
||||||
endif
|
endif
|
||||||
prm%lamellarsize = config%getFloats('lamellarsize')
|
prm%lamellarsize = config%getFloats('lamellarsize')
|
||||||
prm%lamellarsize = math_expand(prm%lamellarsize,prm%N_tr)
|
prm%lamellarsize = math_expand(prm%lamellarsize,prm%N_tr)
|
||||||
|
@ -454,7 +454,7 @@ subroutine plastic_dislotwin_init
|
||||||
|
|
||||||
|
|
||||||
!if (Ndot0PerTwinFamily(f,p) < 0.0_pReal) &
|
!if (Ndot0PerTwinFamily(f,p) < 0.0_pReal) &
|
||||||
! call IO_error(211,el=p,ext_msg='ndot0_twin ('//PLASTICITY_DISLOTWIN_label//')')
|
! call IO_error(211,el=p,ext_msg='dot_N_0_tw ('//PLASTICITY_DISLOTWIN_label//')')
|
||||||
|
|
||||||
if (any(prm%atomicVolume <= 0.0_pReal)) &
|
if (any(prm%atomicVolume <= 0.0_pReal)) &
|
||||||
call IO_error(211,el=p,ext_msg='cAtomicVolume ('//PLASTICITY_DISLOTWIN_label//')')
|
call IO_error(211,el=p,ext_msg='cAtomicVolume ('//PLASTICITY_DISLOTWIN_label//')')
|
||||||
|
@ -664,14 +664,14 @@ subroutine plastic_dislotwin_LpAndItsTangent(Lp,dLp_dMp,Mp,T,instance,of)
|
||||||
integer :: i,k,l,m,n
|
integer :: i,k,l,m,n
|
||||||
real(pReal) :: f_unrotated,StressRatio_p,&
|
real(pReal) :: f_unrotated,StressRatio_p,&
|
||||||
BoltzmannRatio, &
|
BoltzmannRatio, &
|
||||||
dgamma_dtau, &
|
ddot_gamma_dtau, &
|
||||||
tau
|
tau
|
||||||
real(pReal), dimension(param(instance)%sum_N_sl) :: &
|
real(pReal), dimension(param(instance)%sum_N_sl) :: &
|
||||||
dot_gamma_sl,dgamma_dtau_slip
|
dot_gamma_sl,ddot_gamma_dtau_slip
|
||||||
real(pReal), dimension(param(instance)%sum_N_tw) :: &
|
real(pReal), dimension(param(instance)%sum_N_tw) :: &
|
||||||
dot_gamma_twin,dgamma_dtau_twin
|
dot_gamma_twin,ddot_gamma_dtau_twin
|
||||||
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,ddot_gamma_dtau_trans
|
||||||
real(pReal):: dot_gamma_sb
|
real(pReal):: dot_gamma_sb
|
||||||
real(pReal), dimension(3,3) :: eigVectors, P_sb
|
real(pReal), dimension(3,3) :: eigVectors, P_sb
|
||||||
real(pReal), dimension(3) :: eigValues
|
real(pReal), dimension(3) :: eigValues
|
||||||
|
@ -705,12 +705,12 @@ subroutine plastic_dislotwin_LpAndItsTangent(Lp,dLp_dMp,Mp,T,instance,of)
|
||||||
Lp = 0.0_pReal
|
Lp = 0.0_pReal
|
||||||
dLp_dMp = 0.0_pReal
|
dLp_dMp = 0.0_pReal
|
||||||
|
|
||||||
call kinetics_slip(Mp,T,instance,of,dot_gamma_sl,dgamma_dtau_slip)
|
call kinetics_slip(Mp,T,instance,of,dot_gamma_sl,ddot_gamma_dtau_slip)
|
||||||
slipContribution: do i = 1, prm%sum_N_sl
|
slipContribution: do i = 1, prm%sum_N_sl
|
||||||
Lp = Lp + dot_gamma_sl(i)*prm%P_sl(1:3,1:3,i)
|
Lp = Lp + dot_gamma_sl(i)*prm%P_sl(1:3,1:3,i)
|
||||||
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_slip(i) * prm%P_sl(k,l,i) * prm%P_sl(m,n,i)
|
+ ddot_gamma_dtau_slip(i) * prm%P_sl(k,l,i) * prm%P_sl(m,n,i)
|
||||||
enddo slipContribution
|
enddo slipContribution
|
||||||
|
|
||||||
!ToDo: Why do this before shear banding?
|
!ToDo: Why do this before shear banding?
|
||||||
|
@ -730,33 +730,33 @@ subroutine plastic_dislotwin_LpAndItsTangent(Lp,dLp_dMp,Mp,T,instance,of)
|
||||||
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
|
||||||
dot_gamma_sb = sign(prm%sbVelocity*exp(-BoltzmannRatio*(1-StressRatio_p)**prm%q_sb), tau)
|
dot_gamma_sb = sign(prm%sbVelocity*exp(-BoltzmannRatio*(1-StressRatio_p)**prm%q_sb), tau)
|
||||||
dgamma_dtau = abs(dot_gamma_sb)*BoltzmannRatio* prm%p_sb*prm%q_sb/ prm%sbResistance &
|
ddot_gamma_dtau = abs(dot_gamma_sb)*BoltzmannRatio* prm%p_sb*prm%q_sb/ prm%sbResistance &
|
||||||
* (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 * P_sb
|
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 * P_sb(k,l) * P_sb(m,n)
|
+ ddot_gamma_dtau * P_sb(k,l) * P_sb(m,n)
|
||||||
endif significantShearBandStress
|
endif significantShearBandStress
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
endif shearBandingContribution
|
endif shearBandingContribution
|
||||||
|
|
||||||
call kinetics_twin(Mp,T,dot_gamma_sl,instance,of,dot_gamma_twin,dgamma_dtau_twin)
|
call kinetics_twin(Mp,T,dot_gamma_sl,instance,of,dot_gamma_twin,ddot_gamma_dtau_twin)
|
||||||
twinContibution: do i = 1, prm%sum_N_tw
|
twinContibution: do i = 1, prm%sum_N_tw
|
||||||
Lp = Lp + dot_gamma_twin(i)*prm%P_tw(1:3,1:3,i) * f_unrotated
|
Lp = Lp + dot_gamma_twin(i)*prm%P_tw(1:3,1:3,i) * f_unrotated
|
||||||
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_twin(i)* prm%P_tw(k,l,i)*prm%P_tw(m,n,i) * f_unrotated
|
+ ddot_gamma_dtau_twin(i)* prm%P_tw(k,l,i)*prm%P_tw(m,n,i) * f_unrotated
|
||||||
enddo twinContibution
|
enddo twinContibution
|
||||||
|
|
||||||
call kinetics_twin(Mp,T,dot_gamma_sl,instance,of,dot_gamma_tr,dgamma_dtau_trans)
|
call kinetics_twin(Mp,T,dot_gamma_sl,instance,of,dot_gamma_tr,ddot_gamma_dtau_trans)
|
||||||
transContibution: do i = 1, prm%sum_N_tr
|
transContibution: do i = 1, prm%sum_N_tr
|
||||||
Lp = Lp + dot_gamma_tr(i)*prm%P_tr(1:3,1:3,i) * f_unrotated
|
Lp = Lp + dot_gamma_tr(i)*prm%P_tr(1:3,1:3,i) * f_unrotated
|
||||||
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_trans(i)* prm%P_tr(k,l,i)*prm%P_tr(m,n,i) * f_unrotated
|
+ ddot_gamma_dtau_trans(i)* prm%P_tr(k,l,i)*prm%P_tr(m,n,i) * f_unrotated
|
||||||
enddo transContibution
|
enddo transContibution
|
||||||
|
|
||||||
|
|
||||||
|
@ -882,13 +882,13 @@ subroutine plastic_dislotwin_dependentState(T,instance,of)
|
||||||
real(pReal) :: &
|
real(pReal) :: &
|
||||||
sumf_twin,SFE,sumf_trans
|
sumf_twin,SFE,sumf_trans
|
||||||
real(pReal), dimension(param(instance)%sum_N_sl) :: &
|
real(pReal), dimension(param(instance)%sum_N_sl) :: &
|
||||||
lambda_sl_sl_inv, & !* 1/mean free distance between 2 forest dislocations seen by a moving dislocation
|
inv_lambda_sl_sl, & !* 1/mean free distance between 2 forest dislocations seen by a moving dislocation
|
||||||
lambda_sl_tw_inv, & !* 1/mean free distance between 2 twin stacks from different systems seen by a moving dislocation
|
inv_lambda_sl_tw, & !* 1/mean free distance between 2 twin stacks from different systems seen by a moving dislocation
|
||||||
lambda_sl_tr_inv !* 1/mean free distance between 2 martensite lamellar from different systems seen by a moving dislocation
|
inv_lambda_sl_tr !* 1/mean free distance between 2 martensite lamellar from different systems seen by a moving dislocation
|
||||||
real(pReal), dimension(param(instance)%sum_N_tw) :: &
|
real(pReal), dimension(param(instance)%sum_N_tw) :: &
|
||||||
lambda_tw_tw_inv !* 1/mean free distance between 2 twin stacks from different systems seen by a growing twin
|
inv_lambda_tw_tw !* 1/mean free distance between 2 twin stacks from different systems seen by a growing twin
|
||||||
real(pReal), dimension(param(instance)%sum_N_tr) :: &
|
real(pReal), dimension(param(instance)%sum_N_tr) :: &
|
||||||
lambda_tr_tr_inv !* 1/mean free distance between 2 martensite stacks from different systems seen by a growing martensite (1/lambda_trans)
|
inv_lambda_tr_tr !* 1/mean free distance between 2 martensite stacks from different systems seen by a growing martensite (1/lambda_trans)
|
||||||
|
|
||||||
real(pReal), dimension(:), allocatable :: &
|
real(pReal), dimension(:), allocatable :: &
|
||||||
x0, &
|
x0, &
|
||||||
|
@ -912,45 +912,45 @@ subroutine plastic_dislotwin_dependentState(T,instance,of)
|
||||||
|
|
||||||
|
|
||||||
forall (i = 1:prm%sum_N_sl) &
|
forall (i = 1:prm%sum_N_sl) &
|
||||||
lambda_sl_sl_inv(i) = &
|
inv_lambda_sl_sl(i) = &
|
||||||
sqrt(dot_product((stt%rho_mob(1:prm%sum_N_sl,of)+stt%rho_dip(1:prm%sum_N_sl,of)),&
|
sqrt(dot_product((stt%rho_mob(1:prm%sum_N_sl,of)+stt%rho_dip(1:prm%sum_N_sl,of)),&
|
||||||
prm%forestProjection(1:prm%sum_N_sl,i)))/prm%CLambdaSlip(i) ! change order and use matmul
|
prm%forestProjection(1:prm%sum_N_sl,i)))/prm%CLambdaSlip(i) ! change order and use matmul
|
||||||
|
|
||||||
|
|
||||||
if (prm%sum_N_tw > 0 .and. prm%sum_N_sl > 0) &
|
if (prm%sum_N_tw > 0 .and. prm%sum_N_sl > 0) &
|
||||||
lambda_sl_tw_inv = &
|
inv_lambda_sl_tw = &
|
||||||
matmul(transpose(prm%h_sl_tw),fOverStacksize)/(1.0_pReal-sumf_twin) ! ToDo: Change order/no transpose
|
matmul(transpose(prm%h_sl_tw),fOverStacksize)/(1.0_pReal-sumf_twin) ! ToDo: Change order/no transpose
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
!ToDo: needed? if (prm%sum_N_tw > 0) &
|
!ToDo: needed? if (prm%sum_N_tw > 0) &
|
||||||
lambda_tw_tw_inv = matmul(prm%h_tw_tw,fOverStacksize)/(1.0_pReal-sumf_twin)
|
inv_lambda_tw_tw = matmul(prm%h_tw_tw,fOverStacksize)/(1.0_pReal-sumf_twin)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (prm%sum_N_tr > 0 .and. prm%sum_N_sl > 0) &
|
if (prm%sum_N_tr > 0 .and. prm%sum_N_sl > 0) &
|
||||||
lambda_sl_tr_inv = & ! ToDo: does not work if N_tr is not 12
|
inv_lambda_sl_tr = & ! ToDo: does not work if N_tr is not 12
|
||||||
matmul(transpose(prm%h_sl_tr),ftransOverLamellarSize)/(1.0_pReal-sumf_trans) ! ToDo: remove transpose
|
matmul(transpose(prm%h_sl_tr),ftransOverLamellarSize)/(1.0_pReal-sumf_trans) ! ToDo: remove transpose
|
||||||
|
|
||||||
|
|
||||||
!ToDo: needed? if (prm%sum_N_tr > 0) &
|
!ToDo: needed? if (prm%sum_N_tr > 0) &
|
||||||
lambda_tr_tr_inv = matmul(prm%h_tr_tr,ftransOverLamellarSize)/(1.0_pReal-sumf_trans)
|
inv_lambda_tr_tr = matmul(prm%h_tr_tr,ftransOverLamellarSize)/(1.0_pReal-sumf_trans)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ((prm%sum_N_tw > 0) .or. (prm%sum_N_tr > 0)) then ! ToDo: Change order
|
if ((prm%sum_N_tw > 0) .or. (prm%sum_N_tr > 0)) then ! ToDo: Change order
|
||||||
dst%Lambda_sl(:,of) = &
|
dst%Lambda_sl(:,of) = &
|
||||||
prm%D/(1.0_pReal+prm%D*&
|
prm%D/(1.0_pReal+prm%D*&
|
||||||
(lambda_sl_sl_inv + lambda_sl_tw_inv + lambda_sl_tr_inv))
|
(inv_lambda_sl_sl + inv_lambda_sl_tw + inv_lambda_sl_tr))
|
||||||
else
|
else
|
||||||
dst%Lambda_sl(:,of) = prm%D &
|
dst%Lambda_sl(:,of) = prm%D &
|
||||||
/ (1.0_pReal+prm%D*lambda_sl_sl_inv) !!!!!! correct?
|
/ (1.0_pReal+prm%D*inv_lambda_sl_sl) !!!!!! correct?
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
dst%Lambda_tw(:,of) = prm%i_tw*prm%D/(1.0_pReal+prm%D*lambda_tw_tw_inv)
|
dst%Lambda_tw(:,of) = prm%i_tw*prm%D/(1.0_pReal+prm%D*inv_lambda_tw_tw)
|
||||||
dst%Lambda_tr(:,of) = prm%i_tr*prm%D/(1.0_pReal+prm%D*lambda_tr_tr_inv)
|
dst%Lambda_tr(:,of) = prm%i_tr*prm%D/(1.0_pReal+prm%D*inv_lambda_tr_tr)
|
||||||
|
|
||||||
!* threshold stress for dislocation motion
|
!* threshold stress for dislocation motion
|
||||||
forall (i = 1:prm%sum_N_sl) dst%tau_pass(i,of) = &
|
forall (i = 1:prm%sum_N_sl) dst%tau_pass(i,of) = &
|
||||||
|
@ -1100,7 +1100,7 @@ end subroutine plastic_dislotwin_results
|
||||||
! have the optional arguments at the end
|
! have the optional arguments at the end
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
pure subroutine kinetics_slip(Mp,T,instance,of, &
|
pure subroutine kinetics_slip(Mp,T,instance,of, &
|
||||||
dot_gamma_sl,dgamma_dtau_slip,tau_slip)
|
dot_gamma_sl,ddot_gamma_dtau_slip,tau_slip)
|
||||||
use prec, only: &
|
use prec, only: &
|
||||||
tol_math_check, &
|
tol_math_check, &
|
||||||
dNeq0
|
dNeq0
|
||||||
|
@ -1119,10 +1119,10 @@ pure subroutine kinetics_slip(Mp,T,instance,of, &
|
||||||
real(pReal), dimension(param(instance)%sum_N_sl), intent(out) :: &
|
real(pReal), dimension(param(instance)%sum_N_sl), intent(out) :: &
|
||||||
dot_gamma_sl
|
dot_gamma_sl
|
||||||
real(pReal), dimension(param(instance)%sum_N_sl), optional, intent(out) :: &
|
real(pReal), dimension(param(instance)%sum_N_sl), optional, intent(out) :: &
|
||||||
dgamma_dtau_slip, &
|
ddot_gamma_dtau_slip, &
|
||||||
tau_slip
|
tau_slip
|
||||||
real(pReal), dimension(param(instance)%sum_N_sl) :: &
|
real(pReal), dimension(param(instance)%sum_N_sl) :: &
|
||||||
dgamma_dtau
|
ddot_gamma_dtau
|
||||||
|
|
||||||
real(pReal), dimension(param(instance)%sum_N_sl) :: &
|
real(pReal), dimension(param(instance)%sum_N_sl) :: &
|
||||||
tau, &
|
tau, &
|
||||||
|
@ -1154,23 +1154,23 @@ pure subroutine kinetics_slip(Mp,T,instance,of, &
|
||||||
|
|
||||||
dot_gamma_sl = sign(stt%rho_mob(:,of)*prm%b_sl/(v_wait_inverse+v_run_inverse),tau)
|
dot_gamma_sl = sign(stt%rho_mob(:,of)*prm%b_sl/(v_wait_inverse+v_run_inverse),tau)
|
||||||
|
|
||||||
dV_wait_inverse_dTau = v_wait_inverse * prm%p * prm%q * BoltzmannRatio &
|
dV_wait_inverse_dTau = -1.0_pReal * v_wait_inverse * prm%p * prm%q * BoltzmannRatio &
|
||||||
* (stressRatio**(prm%p-1.0_pReal)) &
|
* (stressRatio**(prm%p-1.0_pReal)) &
|
||||||
* (1.0_pReal-StressRatio_p)**(prm%q-1.0_pReal) &
|
* (1.0_pReal-StressRatio_p)**(prm%q-1.0_pReal) &
|
||||||
/ prm%tau_0
|
/ prm%tau_0
|
||||||
dV_run_inverse_dTau = v_run_inverse/tau_eff
|
dV_run_inverse_dTau = -1.0_pReal * v_run_inverse/tau_eff
|
||||||
dV_dTau = (dV_wait_inverse_dTau+dV_run_inverse_dTau) &
|
dV_dTau = -1.0_pReal * (dV_wait_inverse_dTau+dV_run_inverse_dTau) &
|
||||||
/ (v_wait_inverse+v_run_inverse)**2.0_pReal
|
/ (v_wait_inverse+v_run_inverse)**2.0_pReal
|
||||||
dgamma_dtau = dV_dTau*stt%rho_mob(:,of)*prm%b_sl
|
ddot_gamma_dtau = dV_dTau*stt%rho_mob(:,of)*prm%b_sl
|
||||||
else where significantStress
|
else where significantStress
|
||||||
dot_gamma_sl = 0.0_pReal
|
dot_gamma_sl = 0.0_pReal
|
||||||
dgamma_dtau = 0.0_pReal
|
ddot_gamma_dtau = 0.0_pReal
|
||||||
end where significantStress
|
end where significantStress
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
|
|
||||||
if(present(dgamma_dtau_slip)) dgamma_dtau_slip = dgamma_dtau
|
if(present(ddot_gamma_dtau_slip)) ddot_gamma_dtau_slip = ddot_gamma_dtau
|
||||||
if(present(tau_slip)) tau_slip = tau
|
if(present(tau_slip)) tau_slip = tau
|
||||||
|
|
||||||
end subroutine kinetics_slip
|
end subroutine kinetics_slip
|
||||||
|
|
||||||
|
@ -1179,7 +1179,7 @@ end subroutine kinetics_slip
|
||||||
!> @brief calculates shear rates on twin systems
|
!> @brief calculates shear rates on twin systems
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
pure subroutine kinetics_twin(Mp,T,dot_gamma_sl,instance,of,&
|
pure subroutine kinetics_twin(Mp,T,dot_gamma_sl,instance,of,&
|
||||||
dot_gamma_twin,dgamma_dtau_twin)
|
dot_gamma_twin,ddot_gamma_dtau_twin)
|
||||||
use prec, only: &
|
use prec, only: &
|
||||||
tol_math_check, &
|
tol_math_check, &
|
||||||
dNeq0
|
dNeq0
|
||||||
|
@ -1200,13 +1200,13 @@ pure subroutine kinetics_twin(Mp,T,dot_gamma_sl,instance,of,&
|
||||||
real(pReal), dimension(param(instance)%sum_N_tw), intent(out) :: &
|
real(pReal), dimension(param(instance)%sum_N_tw), intent(out) :: &
|
||||||
dot_gamma_twin
|
dot_gamma_twin
|
||||||
real(pReal), dimension(param(instance)%sum_N_tw), optional, intent(out) :: &
|
real(pReal), dimension(param(instance)%sum_N_tw), optional, intent(out) :: &
|
||||||
dgamma_dtau_twin
|
ddot_gamma_dtau_twin
|
||||||
|
|
||||||
real, dimension(param(instance)%sum_N_tw) :: &
|
real, dimension(param(instance)%sum_N_tw) :: &
|
||||||
tau, &
|
tau, &
|
||||||
Ndot0, &
|
Ndot0, &
|
||||||
stressRatio_r, &
|
stressRatio_r, &
|
||||||
dgamma_dtau
|
ddot_gamma_dtau
|
||||||
|
|
||||||
integer :: i,s1,s2
|
integer :: i,s1,s2
|
||||||
|
|
||||||
|
@ -1227,22 +1227,22 @@ pure subroutine kinetics_twin(Mp,T,dot_gamma_sl,instance,of,&
|
||||||
Ndot0=0.0_pReal
|
Ndot0=0.0_pReal
|
||||||
end if
|
end if
|
||||||
else isFCC
|
else isFCC
|
||||||
Ndot0=prm%Ndot0_twin(i)
|
Ndot0=prm%dot_N_0_tw(i)
|
||||||
endif isFCC
|
endif isFCC
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
significantStress: where(tau > tol_math_check)
|
significantStress: where(tau > tol_math_check)
|
||||||
StressRatio_r = (dst%tau_hat_tw(:,of)/tau)**prm%r
|
StressRatio_r = (dst%tau_hat_tw(:,of)/tau)**prm%r
|
||||||
dot_gamma_twin = prm%gamma_char * dst%f_tw(:,of) * Ndot0*exp(-StressRatio_r)
|
dot_gamma_twin = prm%gamma_char * dst%f_tw(:,of) * Ndot0*exp(-StressRatio_r)
|
||||||
dgamma_dtau = (dot_gamma_twin*prm%r/tau)*StressRatio_r
|
ddot_gamma_dtau = (dot_gamma_twin*prm%r/tau)*StressRatio_r
|
||||||
else where significantStress
|
else where significantStress
|
||||||
dot_gamma_twin = 0.0_pReal
|
dot_gamma_twin = 0.0_pReal
|
||||||
dgamma_dtau = 0.0_pReal
|
ddot_gamma_dtau = 0.0_pReal
|
||||||
end where significantStress
|
end where significantStress
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
|
|
||||||
if(present(dgamma_dtau_twin)) dgamma_dtau_twin = dgamma_dtau
|
if(present(ddot_gamma_dtau_twin)) ddot_gamma_dtau_twin = ddot_gamma_dtau
|
||||||
|
|
||||||
end subroutine kinetics_twin
|
end subroutine kinetics_twin
|
||||||
|
|
||||||
|
@ -1251,7 +1251,7 @@ end subroutine kinetics_twin
|
||||||
!> @brief calculates shear rates on twin systems
|
!> @brief calculates shear rates on twin systems
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
pure subroutine kinetics_trans(Mp,T,dot_gamma_sl,instance,of,&
|
pure subroutine kinetics_trans(Mp,T,dot_gamma_sl,instance,of,&
|
||||||
dot_gamma_tr,dgamma_dtau_trans)
|
dot_gamma_tr,ddot_gamma_dtau_trans)
|
||||||
use prec, only: &
|
use prec, only: &
|
||||||
tol_math_check, &
|
tol_math_check, &
|
||||||
dNeq0
|
dNeq0
|
||||||
|
@ -1272,13 +1272,13 @@ pure subroutine kinetics_trans(Mp,T,dot_gamma_sl,instance,of,&
|
||||||
real(pReal), dimension(param(instance)%sum_N_tr), intent(out) :: &
|
real(pReal), dimension(param(instance)%sum_N_tr), intent(out) :: &
|
||||||
dot_gamma_tr
|
dot_gamma_tr
|
||||||
real(pReal), dimension(param(instance)%sum_N_tr), optional, intent(out) :: &
|
real(pReal), dimension(param(instance)%sum_N_tr), optional, intent(out) :: &
|
||||||
dgamma_dtau_trans
|
ddot_gamma_dtau_trans
|
||||||
|
|
||||||
real, dimension(param(instance)%sum_N_tr) :: &
|
real, dimension(param(instance)%sum_N_tr) :: &
|
||||||
tau, &
|
tau, &
|
||||||
Ndot0, &
|
Ndot0, &
|
||||||
stressRatio_s, &
|
stressRatio_s, &
|
||||||
dgamma_dtau
|
ddot_gamma_dtau
|
||||||
|
|
||||||
integer :: i,s1,s2
|
integer :: i,s1,s2
|
||||||
|
|
||||||
|
@ -1299,22 +1299,22 @@ pure subroutine kinetics_trans(Mp,T,dot_gamma_sl,instance,of,&
|
||||||
Ndot0=0.0_pReal
|
Ndot0=0.0_pReal
|
||||||
end if
|
end if
|
||||||
else isFCC
|
else isFCC
|
||||||
Ndot0=prm%Ndot0_trans(i)
|
Ndot0=prm%dot_N_0_tr(i)
|
||||||
endif isFCC
|
endif isFCC
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
significantStress: where(tau > tol_math_check)
|
significantStress: where(tau > tol_math_check)
|
||||||
StressRatio_s = (dst%tau_hat_tr(:,of)/tau)**prm%s
|
StressRatio_s = (dst%tau_hat_tr(:,of)/tau)**prm%s
|
||||||
dot_gamma_tr = dst%f_tr(:,of) * Ndot0*exp(-StressRatio_s)
|
dot_gamma_tr = dst%f_tr(:,of) * Ndot0*exp(-StressRatio_s)
|
||||||
dgamma_dtau = (dot_gamma_tr*prm%r/tau)*StressRatio_s
|
ddot_gamma_dtau = (dot_gamma_tr*prm%r/tau)*StressRatio_s
|
||||||
else where significantStress
|
else where significantStress
|
||||||
dot_gamma_tr = 0.0_pReal
|
dot_gamma_tr = 0.0_pReal
|
||||||
dgamma_dtau = 0.0_pReal
|
ddot_gamma_dtau = 0.0_pReal
|
||||||
end where significantStress
|
end where significantStress
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
|
|
||||||
if(present(dgamma_dtau_trans)) dgamma_dtau_trans = dgamma_dtau
|
if(present(ddot_gamma_dtau_trans)) ddot_gamma_dtau_trans = ddot_gamma_dtau
|
||||||
|
|
||||||
end subroutine kinetics_trans
|
end subroutine kinetics_trans
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue