mean velocity of dislocation corrected for higher temperatures

- v_wait: obstacle spacing over waiting time (effective velocity)
- v_run:  'true' velocity of a dislocation moving between obstacles
for higher temperatures v_run becomes important and bounds the velocity
This commit is contained in:
Martin Diehl 2018-10-02 15:56:18 +02:00
parent 5d1e648d17
commit 9cc3a77e01
1 changed files with 22 additions and 15 deletions

View File

@ -1404,20 +1404,27 @@ pure subroutine kinetics_slip(prm,stt,mse,of,Mp,temperature,gdot_slip,dgdot_dtau
tau, & tau, &
stressRatio, & stressRatio, &
StressRatio_p, & StressRatio_p, &
BoltzmannRatio BoltzmannRatio, &
v_wait_inverse, & !< inverse of the effective velocity of a dislocation waiting at obstacles
v_run_inverse, & !< inverse of the velocity of a free moving dislocation
tau_eff !< effective resolved stress
integer(pInt) :: i integer(pInt) :: i
do i = 1_pInt, prm%totalNslip do i = 1_pInt, prm%totalNslip
tau(i) = math_mul33xx33(Mp,prm%Schmid_slip(1:3,1:3,i)) tau(i) = math_mul33xx33(Mp,prm%Schmid_slip(1:3,1:3,i))
enddo enddo
significantStress: where((abs(tau)-mse%threshold_stress_slip(:,of)) > tol_math_check) tau_eff = abs(tau)-mse%threshold_stress_slip(:,of)
stressRatio = ((abs(tau)- mse%threshold_stress_slip(:,of))/&
(prm%SolidSolutionStrength+prm%tau_peierls(:))) significantStress: where(tau_eff > tol_math_check)
stressRatio = tau_eff/(prm%SolidSolutionStrength+prm%tau_peierls)
StressRatio_p = stressRatio** prm%p StressRatio_p = stressRatio** prm%p
BoltzmannRatio = prm%Qedge/(kB*Temperature) BoltzmannRatio = prm%Qedge/(kB*Temperature)
gdot_slip = stt%rhoEdge(:,of)*prm%burgers_slip* prm%v0 & v_wait_inverse = prm%v0**(-1.0_pReal) * exp(BoltzmannRatio*(1.0_pReal-StressRatio_p)** prm%q)
* sign(exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p)** prm%q), tau) v_run_inverse = prm%B/(tau_eff*prm%burgers_slip)
gdot_slip = sign(stt%rhoEdge(:,of)*prm%burgers_slip/(v_wait_inverse+v_run_inverse),tau)
dgdot_dtau = abs(gdot_slip)*BoltzmannRatio*prm%p * prm%q & dgdot_dtau = abs(gdot_slip)*BoltzmannRatio*prm%p * prm%q &
/ (prm%SolidSolutionStrength+prm%tau_peierls) & / (prm%SolidSolutionStrength+prm%tau_peierls) &
* stressRatio**(prm%p-1.0_pReal)*(1.0_pReal-StressRatio_p)**(prm%q-1.0_pReal) * stressRatio**(prm%p-1.0_pReal)*(1.0_pReal-StressRatio_p)**(prm%q-1.0_pReal)
@ -1428,11 +1435,11 @@ pure subroutine kinetics_slip(prm,stt,mse,of,Mp,temperature,gdot_slip,dgdot_dtau
if(present(dgdot_dtau_slip)) dgdot_dtau_slip = dgdot_dtau if(present(dgdot_dtau_slip)) dgdot_dtau_slip = dgdot_dtau
end subroutine end subroutine kinetics_slip
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief calculates shear rates on slip systems !> @brief calculates shear rates on twin systems
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
pure subroutine kinetics_twin(prm,stt,mse,of,Mp,temperature,gdot_slip,gdot_twin,dgdot_dtau_twin) pure subroutine kinetics_twin(prm,stt,mse,of,Mp,temperature,gdot_slip,gdot_twin,dgdot_dtau_twin)
use prec, only: & use prec, only: &
@ -1475,7 +1482,7 @@ pure subroutine kinetics_twin(prm,stt,mse,of,Mp,temperature,gdot_slip,gdot_twin,
s1=prm%fcc_twinNucleationSlipPair(1,i) s1=prm%fcc_twinNucleationSlipPair(1,i)
s2=prm%fcc_twinNucleationSlipPair(2,i) s2=prm%fcc_twinNucleationSlipPair(2,i)
if (tau(i) < mse%tau_r_twin(i,of)) then if (tau(i) < mse%tau_r_twin(i,of)) then
Ndot0_twin=(abs(gdot_slip(s1))*(stt%rhoEdge(s2,of)+stt%rhoEdgeDip(s2,of))+& !!!!! correct? Ndot0_twin=(abs(gdot_slip(s1))*(stt%rhoEdge(s2,of)+stt%rhoEdgeDip(s2,of))+&
abs(gdot_slip(s2))*(stt%rhoEdge(s1,of)+stt%rhoEdgeDip(s1,of)))/& abs(gdot_slip(s2))*(stt%rhoEdge(s1,of)+stt%rhoEdgeDip(s1,of)))/&
(prm%L0_twin*prm%burgers_slip(i))*& (prm%L0_twin*prm%burgers_slip(i))*&
(1.0_pReal-exp(-prm%VcrossSlip/(kB*Temperature)*& (1.0_pReal-exp(-prm%VcrossSlip/(kB*Temperature)*&
@ -1500,7 +1507,7 @@ pure subroutine kinetics_twin(prm,stt,mse,of,Mp,temperature,gdot_slip,gdot_twin,
if(present(dgdot_dtau_twin)) dgdot_dtau_twin = dgdot_dtau if(present(dgdot_dtau_twin)) dgdot_dtau_twin = dgdot_dtau
end subroutine end subroutine kinetics_twin
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
@ -1547,7 +1554,7 @@ pure subroutine kinetics_trans(prm,stt,mse,of,Mp,temperature,gdot_slip,gdot_tran
s1=prm%fcc_twinNucleationSlipPair(1,i) s1=prm%fcc_twinNucleationSlipPair(1,i)
s2=prm%fcc_twinNucleationSlipPair(2,i) s2=prm%fcc_twinNucleationSlipPair(2,i)
if (tau(i) < mse%tau_r_trans(i,of)) then if (tau(i) < mse%tau_r_trans(i,of)) then
Ndot0_trans=(abs(gdot_slip(s1))*(stt%rhoEdge(s2,of)+stt%rhoEdgeDip(s2,of))+& ! s1/s2 mixing correct? Ndot0_trans=(abs(gdot_slip(s1))*(stt%rhoEdge(s2,of)+stt%rhoEdgeDip(s2,of))+&
abs(gdot_slip(s2))*(stt%rhoEdge(s1,of)+stt%rhoEdgeDip(s1,of)))/& abs(gdot_slip(s2))*(stt%rhoEdge(s1,of)+stt%rhoEdgeDip(s1,of)))/&
(prm%L0_trans*prm%burgers_slip(i))*& ! burgers_slip correct? (prm%L0_trans*prm%burgers_slip(i))*& ! burgers_slip correct?
(1.0_pReal-exp(-prm%VcrossSlip/(kB*Temperature)*& (1.0_pReal-exp(-prm%VcrossSlip/(kB*Temperature)*&
@ -1583,7 +1590,7 @@ pure subroutine kinetics_trans(prm,stt,mse,of,Mp,temperature,gdot_slip,gdot_tran
! !
! if(present(dgdot_dtau_twin)) dgdot_dtau_twin = dgdot_dtau ! if(present(dgdot_dtau_twin)) dgdot_dtau_twin = dgdot_dtau
! !
end subroutine end subroutine kinetics_trans
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief return array of constitutive results !> @brief return array of constitutive results