From ddb25ad0e56a0d9dcdfef149101f20396f26d3f7 Mon Sep 17 00:00:00 2001 From: Philip Eisenlohr Date: Fri, 29 Oct 2021 20:04:09 -0400 Subject: [PATCH 01/15] remove duplicate lattice_symmetries dictionary --- python/damask/_orientation.py | 21 --------------------- python/tests/test_Orientation.py | 4 ++-- 2 files changed, 2 insertions(+), 23 deletions(-) diff --git a/python/damask/_orientation.py b/python/damask/_orientation.py index a568eb0f1..3d4d259ff 100644 --- a/python/damask/_orientation.py +++ b/python/damask/_orientation.py @@ -9,27 +9,6 @@ from . import util from . import tensor -lattice_symmetries = { - 'aP': 'triclinic', - - 'mP': 'monoclinic', - 'mS': 'monoclinic', - - 'oP': 'orthorhombic', - 'oS': 'orthorhombic', - 'oI': 'orthorhombic', - 'oF': 'orthorhombic', - - 'tP': 'tetragonal', - 'tI': 'tetragonal', - - 'hP': 'hexagonal', - - 'cP': 'cubic', - 'cI': 'cubic', - 'cF': 'cubic', - } - _parameter_doc = \ """ family : {'triclinic', 'monoclinic', 'orthorhombic', 'tetragonal', 'hexagonal', 'cubic'}, optional. diff --git a/python/tests/test_Orientation.py b/python/tests/test_Orientation.py index 686ed66c2..9f623fc6c 100644 --- a/python/tests/test_Orientation.py +++ b/python/tests/test_Orientation.py @@ -7,9 +7,9 @@ from damask import Orientation from damask import Table from damask import util from damask import grid_filters -from damask import _orientation +from damask import _crystal -crystal_families = set(_orientation.lattice_symmetries.values()) +crystal_families = set(_crystal.lattice_symmetries.values()) @pytest.fixture From 9f152aca0daaf253b52f49b3c39e9b370f829fcd Mon Sep 17 00:00:00 2001 From: Test User Date: Sat, 30 Oct 2021 10:03:53 +0200 Subject: [PATCH 02/15] [skip ci] updated version information after successful test of v3.0.0-alpha5-31-gddb25ad0e --- python/damask/VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/damask/VERSION b/python/damask/VERSION index 4ab41203b..98903601b 100644 --- a/python/damask/VERSION +++ b/python/damask/VERSION @@ -1 +1 @@ -v3.0.0-alpha5-29-g84df8b71f +v3.0.0-alpha5-31-gddb25ad0e From bb757cf82e27f1bd72c1d5a243e71d58a55fad98 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sat, 30 Oct 2021 10:36:47 +0200 Subject: [PATCH 03/15] style adjustments --- ...phase_mechanical_plastic_dislotungsten.f90 | 191 +++++++++--------- 1 file changed, 97 insertions(+), 94 deletions(-) diff --git a/src/phase_mechanical_plastic_dislotungsten.f90 b/src/phase_mechanical_plastic_dislotungsten.f90 index 1e5e120e5..fce013bb2 100644 --- a/src/phase_mechanical_plastic_dislotungsten.f90 +++ b/src/phase_mechanical_plastic_dislotungsten.f90 @@ -148,7 +148,7 @@ module function plastic_dislotungsten_init() result(myPlasticity) else prm%P_nS_pos = prm%P_sl prm%P_nS_neg = prm%P_sl - endif + end if prm%h_sl_sl = lattice_interaction_SlipBySlip(N_sl,pl%get_as1dFloat('h_sl-sl'), & phase_lattice(ph)) @@ -209,13 +209,13 @@ module function plastic_dislotungsten_init() result(myPlasticity) if (any(prm%f_at <= 0.0_pReal)) extmsg = trim(extmsg)//' f_at or b_sl' else slipActive - rho_mob_0= emptyRealArray; rho_dip_0 = emptyRealArray + rho_mob_0 = emptyRealArray; rho_dip_0 = emptyRealArray allocate(prm%b_sl,prm%d_caron,prm%i_sl,prm%f_at,prm%tau_Peierls, & prm%Q_s,prm%v_0,prm%p,prm%q,prm%B,prm%h,prm%w,prm%omega, & source = emptyRealArray) allocate(prm%forestProjection(0,0)) allocate(prm%h_sl_sl (0,0)) - endif slipActive + end if slipActive !-------------------------------------------------------------------------------------------------- ! allocate state arrays @@ -258,7 +258,7 @@ module function plastic_dislotungsten_init() result(myPlasticity) ! exit if any parameter is out of range if (extmsg /= '') call IO_error(211,ext_msg=trim(extmsg)//'(dislotungsten)') - enddo + end do end function plastic_dislotungsten_init @@ -267,7 +267,7 @@ end function plastic_dislotungsten_init !> @brief Calculate plastic velocity gradient and its tangent. !-------------------------------------------------------------------------------------------------- pure module subroutine dislotungsten_LpAndItsTangent(Lp,dLp_dMp, & - Mp,T,ph,en) + Mp,T,ph,en) real(pReal), dimension(3,3), intent(out) :: & Lp !< plastic velocity gradient real(pReal), dimension(3,3,3,3), intent(out) :: & @@ -287,19 +287,20 @@ pure module subroutine dislotungsten_LpAndItsTangent(Lp,dLp_dMp, & dot_gamma_pos,dot_gamma_neg, & ddot_gamma_dtau_pos,ddot_gamma_dtau_neg + Lp = 0.0_pReal dLp_dMp = 0.0_pReal associate(prm => param(ph)) - call kinetics(Mp,T,ph,en,dot_gamma_pos,dot_gamma_neg,ddot_gamma_dtau_pos,ddot_gamma_dtau_neg) - do i = 1, prm%sum_N_sl - Lp = Lp + (dot_gamma_pos(i)+dot_gamma_neg(i))*prm%P_sl(1:3,1:3,i) - 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) & - + ddot_gamma_dtau_pos(i) * prm%P_sl(k,l,i) * prm%P_nS_pos(m,n,i) & - + ddot_gamma_dtau_neg(i) * prm%P_sl(k,l,i) * prm%P_nS_neg(m,n,i) - enddo + call kinetics(Mp,T,ph,en,dot_gamma_pos,dot_gamma_neg,ddot_gamma_dtau_pos,ddot_gamma_dtau_neg) + do i = 1, prm%sum_N_sl + Lp = Lp + (dot_gamma_pos(i)+dot_gamma_neg(i))*prm%P_sl(1:3,1:3,i) + 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) & + + ddot_gamma_dtau_pos(i) * prm%P_sl(k,l,i) * prm%P_nS_pos(m,n,i) & + + ddot_gamma_dtau_neg(i) * prm%P_sl(k,l,i) * prm%P_nS_neg(m,n,i) + end do end associate @@ -328,35 +329,36 @@ module subroutine dislotungsten_dotState(Mp,T,ph,en) dot_rho_dip_climb, & d_hat + associate(prm => param(ph), stt => state(ph), dot => dotState(ph), dst => dependentState(ph)) - call kinetics(Mp,T,ph,en,& - dot_gamma_pos,dot_gamma_neg, & - tau_pos_out = tau_pos,tau_neg_out = tau_neg) + call kinetics(Mp,T,ph,en,& + dot_gamma_pos,dot_gamma_neg, & + tau_pos_out = tau_pos,tau_neg_out = tau_neg) - dot%gamma_sl(:,en) = abs(dot_gamma_pos+dot_gamma_neg) + dot%gamma_sl(:,en) = abs(dot_gamma_pos+dot_gamma_neg) - where(dEq0(tau_pos)) ! ToDo: use avg of +/- - dot_rho_dip_formation = 0.0_pReal - dot_rho_dip_climb = 0.0_pReal - else where - d_hat = math_clip(3.0_pReal*prm%mu*prm%b_sl/(16.0_pReal*PI*abs(tau_pos)), & ! ToDo: use avg of +/- - prm%d_caron, & ! lower limit - dst%Lambda_sl(:,en)) ! upper limit - dot_rho_dip_formation = merge(2.0_pReal*(d_hat-prm%d_caron)*stt%rho_mob(:,en)*dot%gamma_sl(:,en)/prm%b_sl, & - 0.0_pReal, & - prm%dipoleformation) - v_cl = (3.0_pReal*prm%mu*prm%D_0*exp(-prm%Q_cl/(kB*T))*prm%f_at/(2.0_pReal*PI*kB*T)) & - * (1.0_pReal/(d_hat+prm%d_caron)) - dot_rho_dip_climb = (4.0_pReal*v_cl*stt%rho_dip(:,en))/(d_hat-prm%d_caron) ! ToDo: Discuss with Franz: Stress dependency? - end where + where(dEq0(tau_pos)) ! ToDo: use avg of +/- + dot_rho_dip_formation = 0.0_pReal + dot_rho_dip_climb = 0.0_pReal + else where + d_hat = math_clip(3.0_pReal*prm%mu*prm%b_sl/(16.0_pReal*PI*abs(tau_pos)), & ! ToDo: use avg of +/- + prm%d_caron, & ! lower limit + dst%Lambda_sl(:,en)) ! upper limit + dot_rho_dip_formation = merge(2.0_pReal*(d_hat-prm%d_caron)*stt%rho_mob(:,en)*dot%gamma_sl(:,en)/prm%b_sl, & + 0.0_pReal, & + prm%dipoleformation) + v_cl = (3.0_pReal*prm%mu*prm%D_0*exp(-prm%Q_cl/(kB*T))*prm%f_at/(2.0_pReal*PI*kB*T)) & + * (1.0_pReal/(d_hat+prm%d_caron)) + dot_rho_dip_climb = (4.0_pReal*v_cl*stt%rho_dip(:,en))/(d_hat-prm%d_caron) ! ToDo: Discuss with Franz: Stress dependency? + end where - dot%rho_mob(:,en) = dot%gamma_sl(:,en)/(prm%b_sl*dst%Lambda_sl(:,en)) & ! multiplication - - dot_rho_dip_formation & - - (2.0_pReal*prm%d_caron)/prm%b_sl*stt%rho_mob(:,en)*dot%gamma_sl(:,en) ! Spontaneous annihilation of 2 edges - dot%rho_dip(:,en) = dot_rho_dip_formation & - - (2.0_pReal*prm%d_caron)/prm%b_sl*stt%rho_dip(:,en)*dot%gamma_sl(:,en) & ! Spontaneous annihilation of an edge with a dipole - - dot_rho_dip_climb + dot%rho_mob(:,en) = dot%gamma_sl(:,en)/(prm%b_sl*dst%Lambda_sl(:,en)) & ! multiplication + - dot_rho_dip_formation & + - (2.0_pReal*prm%d_caron)/prm%b_sl*stt%rho_mob(:,en)*dot%gamma_sl(:,en) ! Spontaneous annihilation of 2 edges + dot%rho_dip(:,en) = dot_rho_dip_formation & + - (2.0_pReal*prm%d_caron)/prm%b_sl*stt%rho_dip(:,en)*dot%gamma_sl(:,en) & ! Spontaneous annihilation of an edge with a dipole + - dot_rho_dip_climb end associate @@ -368,7 +370,7 @@ end subroutine dislotungsten_dotState !-------------------------------------------------------------------------------------------------- module subroutine dislotungsten_dependentState(ph,en) - integer, intent(in) :: & + integer, intent(in) :: & ph, & en @@ -423,7 +425,7 @@ module subroutine plastic_dislotungsten_results(ph,group) 'threshold stress for slip','Pa',prm%systems_sl) end select - enddo + end do end associate @@ -456,6 +458,7 @@ pure subroutine kinetics(Mp,T,ph,en, & ddot_gamma_dtau_neg, & tau_pos_out, & tau_neg_out + real(pReal), dimension(param(ph)%sum_N_sl) :: & StressRatio, & StressRatio_p,StressRatio_pminus1, & @@ -464,80 +467,80 @@ pure subroutine kinetics(Mp,T,ph,en, & t_n, t_k, dtk,dtn integer :: j + associate(prm => param(ph), stt => state(ph), dst => dependentState(ph)) - do j = 1, prm%sum_N_sl - tau_pos(j) = math_tensordot(Mp,prm%P_nS_pos(1:3,1:3,j)) - tau_neg(j) = math_tensordot(Mp,prm%P_nS_neg(1:3,1:3,j)) - enddo + do j = 1, prm%sum_N_sl + tau_pos(j) = math_tensordot(Mp,prm%P_nS_pos(1:3,1:3,j)) + tau_neg(j) = math_tensordot(Mp,prm%P_nS_neg(1:3,1:3,j)) + end do + if (present(tau_pos_out)) tau_pos_out = tau_pos + if (present(tau_neg_out)) tau_neg_out = tau_neg - if (present(tau_pos_out)) tau_pos_out = tau_pos - if (present(tau_neg_out)) tau_neg_out = tau_neg + associate(BoltzmannRatio => prm%Q_s/(kB*T), & + dot_gamma_0 => stt%rho_mob(:,en)*prm%b_sl*prm%v_0, & + effectiveLength => dst%Lambda_sl(:,en) - prm%w) - associate(BoltzmannRatio => prm%Q_s/(kB*T), & - dot_gamma_0 => stt%rho_mob(:,en)*prm%b_sl*prm%v_0, & - effectiveLength => dst%Lambda_sl(:,en) - prm%w) + significantPositiveTau: where(abs(tau_pos)-dst%tau_pass(:,en) > tol_math_check) + StressRatio = (abs(tau_pos)-dst%tau_pass(:,en))/prm%tau_Peierls + StressRatio_p = StressRatio** prm%p + StressRatio_pminus1 = StressRatio**(prm%p-1.0_pReal) - significantPositiveTau: where(abs(tau_pos)-dst%tau_pass(:,en) > tol_math_check) - StressRatio = (abs(tau_pos)-dst%tau_pass(:,en))/prm%tau_Peierls - StressRatio_p = StressRatio** prm%p - StressRatio_pminus1 = StressRatio**(prm%p-1.0_pReal) + t_n = prm%b_sl/(exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q)*prm%omega*effectiveLength) + t_k = effectiveLength * prm%B /(2.0_pReal*prm%b_sl*tau_pos) - t_n = prm%b_sl/(exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q)*prm%omega*effectiveLength) - t_k = effectiveLength * prm%B /(2.0_pReal*prm%b_sl*tau_pos) + vel = prm%h/(t_n + t_k) - vel = prm%h/(t_n + t_k) + dot_gamma_pos = dot_gamma_0 * sign(vel,tau_pos) * 0.5_pReal + else where significantPositiveTau + dot_gamma_pos = 0.0_pReal + end where significantPositiveTau - dot_gamma_pos = dot_gamma_0 * sign(vel,tau_pos) * 0.5_pReal - else where significantPositiveTau - dot_gamma_pos = 0.0_pReal - end where significantPositiveTau + if (present(ddot_gamma_dtau_pos)) then + significantPositiveTau2: where(abs(tau_pos)-dst%tau_pass(:,en) > tol_math_check) + dtn = -1.0_pReal * t_n * BoltzmannRatio * prm%p * prm%q * (1.0_pReal-StressRatio_p)**(prm%q - 1.0_pReal) & + * (StressRatio)**(prm%p - 1.0_pReal) / prm%tau_Peierls + dtk = -1.0_pReal * t_k / tau_pos - if (present(ddot_gamma_dtau_pos)) then - significantPositiveTau2: where(abs(tau_pos)-dst%tau_pass(:,en) > tol_math_check) - dtn = -1.0_pReal * t_n * BoltzmannRatio * prm%p * prm%q * (1.0_pReal-StressRatio_p)**(prm%q - 1.0_pReal) & - * (StressRatio)**(prm%p - 1.0_pReal) / prm%tau_Peierls - dtk = -1.0_pReal * t_k / tau_pos + dvel = -1.0_pReal * prm%h * (dtk + dtn) / (t_n + t_k)**2.0_pReal - dvel = -1.0_pReal * prm%h * (dtk + dtn) / (t_n + t_k)**2.0_pReal + ddot_gamma_dtau_pos = dot_gamma_0 * dvel* 0.5_pReal + else where significantPositiveTau2 + ddot_gamma_dtau_pos = 0.0_pReal + end where significantPositiveTau2 + end if - ddot_gamma_dtau_pos = dot_gamma_0 * dvel* 0.5_pReal - else where significantPositiveTau2 - ddot_gamma_dtau_pos = 0.0_pReal - end where significantPositiveTau2 - endif + significantNegativeTau: where(abs(tau_neg)-dst%tau_pass(:,en) > tol_math_check) + StressRatio = (abs(tau_neg)-dst%tau_pass(:,en))/prm%tau_Peierls + StressRatio_p = StressRatio** prm%p + StressRatio_pminus1 = StressRatio**(prm%p-1.0_pReal) - significantNegativeTau: where(abs(tau_neg)-dst%tau_pass(:,en) > tol_math_check) - StressRatio = (abs(tau_neg)-dst%tau_pass(:,en))/prm%tau_Peierls - StressRatio_p = StressRatio** prm%p - StressRatio_pminus1 = StressRatio**(prm%p-1.0_pReal) + t_n = prm%b_sl/(exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q)*prm%omega*effectiveLength) + t_k = effectiveLength * prm%B /(2.0_pReal*prm%b_sl*tau_pos) - t_n = prm%b_sl/(exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q)*prm%omega*effectiveLength) - t_k = effectiveLength * prm%B /(2.0_pReal*prm%b_sl*tau_pos) + vel = prm%h/(t_n + t_k) - vel = prm%h/(t_n + t_k) + dot_gamma_neg = dot_gamma_0 * sign(vel,tau_neg) * 0.5_pReal + else where significantNegativeTau + dot_gamma_neg = 0.0_pReal + end where significantNegativeTau - dot_gamma_neg = dot_gamma_0 * sign(vel,tau_neg) * 0.5_pReal - else where significantNegativeTau - dot_gamma_neg = 0.0_pReal - end where significantNegativeTau + if (present(ddot_gamma_dtau_neg)) then + significantNegativeTau2: where(abs(tau_neg)-dst%tau_pass(:,en) > tol_math_check) + dtn = -1.0_pReal * t_n * BoltzmannRatio * prm%p * prm%q * (1.0_pReal-StressRatio_p)**(prm%q - 1.0_pReal) & + * (StressRatio)**(prm%p - 1.0_pReal) / prm%tau_Peierls + dtk = -1.0_pReal * t_k / tau_neg - if (present(ddot_gamma_dtau_neg)) then - significantNegativeTau2: where(abs(tau_neg)-dst%tau_pass(:,en) > tol_math_check) - dtn = -1.0_pReal * t_n * BoltzmannRatio * prm%p * prm%q * (1.0_pReal-StressRatio_p)**(prm%q - 1.0_pReal) & - * (StressRatio)**(prm%p - 1.0_pReal) / prm%tau_Peierls - dtk = -1.0_pReal * t_k / tau_neg + dvel = -1.0_pReal * prm%h * (dtk + dtn) / (t_n + t_k)**2.0_pReal - dvel = -1.0_pReal * prm%h * (dtk + dtn) / (t_n + t_k)**2.0_pReal + ddot_gamma_dtau_neg = dot_gamma_0 * dvel * 0.5_pReal + else where significantNegativeTau2 + ddot_gamma_dtau_neg = 0.0_pReal + end where significantNegativeTau2 + end if - ddot_gamma_dtau_neg = dot_gamma_0 * dvel * 0.5_pReal - else where significantNegativeTau2 - ddot_gamma_dtau_neg = 0.0_pReal - end where significantNegativeTau2 - end if - - end associate + end associate end associate end subroutine kinetics From bff186051c47e1f62170cb234a5a4fa704c4c8b4 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sat, 30 Oct 2021 22:08:55 +0200 Subject: [PATCH 04/15] simplified --- src/phase_mechanical_plastic_dislotungsten.f90 | 16 +++++++--------- src/phase_mechanical_plastic_dislotwin.f90 | 3 ++- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/phase_mechanical_plastic_dislotungsten.f90 b/src/phase_mechanical_plastic_dislotungsten.f90 index fce013bb2..6b2e65796 100644 --- a/src/phase_mechanical_plastic_dislotungsten.f90 +++ b/src/phase_mechanical_plastic_dislotungsten.f90 @@ -462,7 +462,7 @@ pure subroutine kinetics(Mp,T,ph,en, & real(pReal), dimension(param(ph)%sum_N_sl) :: & StressRatio, & StressRatio_p,StressRatio_pminus1, & - dvel, vel, & + dvel, & tau_pos,tau_neg, & t_n, t_k, dtk,dtn integer :: j @@ -487,12 +487,11 @@ pure subroutine kinetics(Mp,T,ph,en, & StressRatio_p = StressRatio** prm%p StressRatio_pminus1 = StressRatio**(prm%p-1.0_pReal) - t_n = prm%b_sl/(exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q)*prm%omega*effectiveLength) + t_n = prm%b_sl*exp(BoltzmannRatio*(1.0_pReal-StressRatio_p) ** prm%q) & + / (prm%omega*effectiveLength) t_k = effectiveLength * prm%B /(2.0_pReal*prm%b_sl*tau_pos) - vel = prm%h/(t_n + t_k) - - dot_gamma_pos = dot_gamma_0 * sign(vel,tau_pos) * 0.5_pReal + dot_gamma_pos = dot_gamma_0 * sign(prm%h/(t_n + t_k),tau_pos) * 0.5_pReal else where significantPositiveTau dot_gamma_pos = 0.0_pReal end where significantPositiveTau @@ -516,12 +515,11 @@ pure subroutine kinetics(Mp,T,ph,en, & StressRatio_p = StressRatio** prm%p StressRatio_pminus1 = StressRatio**(prm%p-1.0_pReal) - t_n = prm%b_sl/(exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q)*prm%omega*effectiveLength) + t_n = prm%b_sl*exp(BoltzmannRatio*(1.0_pReal-StressRatio_p) ** prm%q) & + / (prm%omega*effectiveLength) t_k = effectiveLength * prm%B /(2.0_pReal*prm%b_sl*tau_pos) - vel = prm%h/(t_n + t_k) - - dot_gamma_neg = dot_gamma_0 * sign(vel,tau_neg) * 0.5_pReal + dot_gamma_neg = dot_gamma_0 * sign(prm%h/(t_n + t_k),tau_neg) * 0.5_pReal else where significantNegativeTau dot_gamma_neg = 0.0_pReal end where significantNegativeTau diff --git a/src/phase_mechanical_plastic_dislotwin.f90 b/src/phase_mechanical_plastic_dislotwin.f90 index ac179d775..de73cee04 100644 --- a/src/phase_mechanical_plastic_dislotwin.f90 +++ b/src/phase_mechanical_plastic_dislotwin.f90 @@ -890,7 +890,8 @@ pure subroutine kinetics_sl(Mp,T,ph,en, & stressRatio = tau_eff/prm%tau_0 StressRatio_p = stressRatio** prm%p Q_kB_T = prm%Q_sl/(kB*T) - v_wait_inverse = prm%v_0**(-1.0_pReal) * exp(Q_kB_T*(1.0_pReal-StressRatio_p)** prm%q) + v_wait_inverse = exp(Q_kB_T*(1.0_pReal-StressRatio_p)** prm%q) & + / prm%v_0 v_run_inverse = prm%B/(tau_eff*prm%b_sl) dot_gamma_sl = sign(stt%rho_mob(:,en)*prm%b_sl/(v_wait_inverse+v_run_inverse),tau) From e20b705f5416ee81935b8b2e70747f33076ea2c5 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sat, 30 Oct 2021 23:02:51 +0200 Subject: [PATCH 05/15] following dislotwin --- src/phase_mechanical_plastic_dislotungsten.f90 | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/phase_mechanical_plastic_dislotungsten.f90 b/src/phase_mechanical_plastic_dislotungsten.f90 index 6b2e65796..6a947cc70 100644 --- a/src/phase_mechanical_plastic_dislotungsten.f90 +++ b/src/phase_mechanical_plastic_dislotungsten.f90 @@ -463,7 +463,7 @@ pure subroutine kinetics(Mp,T,ph,en, & StressRatio, & StressRatio_p,StressRatio_pminus1, & dvel, & - tau_pos,tau_neg, & + tau_pos, tau_neg, tau_eff, & t_n, t_k, dtk,dtn integer :: j @@ -482,8 +482,10 @@ pure subroutine kinetics(Mp,T,ph,en, & dot_gamma_0 => stt%rho_mob(:,en)*prm%b_sl*prm%v_0, & effectiveLength => dst%Lambda_sl(:,en) - prm%w) - significantPositiveTau: where(abs(tau_pos)-dst%tau_pass(:,en) > tol_math_check) - StressRatio = (abs(tau_pos)-dst%tau_pass(:,en))/prm%tau_Peierls + tau_eff = abs(tau_pos)-dst%tau_pass(:,en) + + significantPositiveTau: where(tau_eff > tol_math_check) + StressRatio = tau_eff/prm%tau_Peierls StressRatio_p = StressRatio** prm%p StressRatio_pminus1 = StressRatio**(prm%p-1.0_pReal) @@ -510,8 +512,10 @@ pure subroutine kinetics(Mp,T,ph,en, & end where significantPositiveTau2 end if - significantNegativeTau: where(abs(tau_neg)-dst%tau_pass(:,en) > tol_math_check) - StressRatio = (abs(tau_neg)-dst%tau_pass(:,en))/prm%tau_Peierls + tau_eff = abs(tau_neg)-dst%tau_pass(:,en) + + significantNegativeTau: where(tau_eff > tol_math_check) + StressRatio = tau_eff/prm%tau_Peierls StressRatio_p = StressRatio** prm%p StressRatio_pminus1 = StressRatio**(prm%p-1.0_pReal) From f5fe0b9dca43ff022f9de1154814821a5821b32d Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sat, 30 Oct 2021 23:03:27 +0200 Subject: [PATCH 06/15] bugfix: change of behavior negative values for the resolved stress do not make sense. The paper does not take this into account (eq (14), Cereceda et. al 2016). According to my understanding, only the non-thermal contributions should be substracted, so abs(tau_pos)/abs(tau_neg) would not be sufficient. --- src/phase_mechanical_plastic_dislotungsten.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/phase_mechanical_plastic_dislotungsten.f90 b/src/phase_mechanical_plastic_dislotungsten.f90 index 6a947cc70..9f565df67 100644 --- a/src/phase_mechanical_plastic_dislotungsten.f90 +++ b/src/phase_mechanical_plastic_dislotungsten.f90 @@ -491,7 +491,7 @@ pure subroutine kinetics(Mp,T,ph,en, & t_n = prm%b_sl*exp(BoltzmannRatio*(1.0_pReal-StressRatio_p) ** prm%q) & / (prm%omega*effectiveLength) - t_k = effectiveLength * prm%B /(2.0_pReal*prm%b_sl*tau_pos) + t_k = effectiveLength * prm%B /(2.0_pReal*prm%b_sl*tau_eff) ! corrected eq. (14) dot_gamma_pos = dot_gamma_0 * sign(prm%h/(t_n + t_k),tau_pos) * 0.5_pReal else where significantPositiveTau @@ -521,7 +521,7 @@ pure subroutine kinetics(Mp,T,ph,en, & t_n = prm%b_sl*exp(BoltzmannRatio*(1.0_pReal-StressRatio_p) ** prm%q) & / (prm%omega*effectiveLength) - t_k = effectiveLength * prm%B /(2.0_pReal*prm%b_sl*tau_pos) + t_k = effectiveLength * prm%B /(2.0_pReal*prm%b_sl*tau_eff) ! corrected eq. (14) dot_gamma_neg = dot_gamma_0 * sign(prm%h/(t_n + t_k),tau_neg) * 0.5_pReal else where significantNegativeTau From 25ca77c38e96a6e99f0c1fc295efc4d77e1dc4e2 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 31 Oct 2021 13:32:24 +0100 Subject: [PATCH 07/15] parameters from original paper (mostly) --- examples/config/Phase_Dislotungsten_W.yaml | 26 ---------------- .../mechanical/plastic/dislotungsten_W.yaml | 30 +++++++++++++++++++ 2 files changed, 30 insertions(+), 26 deletions(-) delete mode 100644 examples/config/Phase_Dislotungsten_W.yaml create mode 100644 examples/config/phase/mechanical/plastic/dislotungsten_W.yaml diff --git a/examples/config/Phase_Dislotungsten_W.yaml b/examples/config/Phase_Dislotungsten_W.yaml deleted file mode 100644 index bf8796cfa..000000000 --- a/examples/config/Phase_Dislotungsten_W.yaml +++ /dev/null @@ -1,26 +0,0 @@ -type: dislotungsten - -N_sl: [12] - -rho_mob_0: [1.0e+9] -rho_dip_0: [1.0] - -nu_a: [9.1e+11] -b_sl: [2.72e-10] -Delta_H_kp,0: [2.61154e-19] # 1.63 eV, Delta_H0 - -tau_Peierls: [2.03e+9] -p_sl: [0.86] -q_sl: [1.69] -h: [2.566e-10] -w: [2.992e-09] -B: [8.3e-5] -D_a: 1.0 # d_edge - -# climb (disabled) -D_0: 0.0 -Q_cl: 0.0 -V_cl: [0.0] - -h_sl-sl: [0.009, 0.72, 0.009, 0.05, 0.05, 0.06, 0.09] -a_nonSchmid: [0.938, 0.71, 4.43] diff --git a/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml b/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml new file mode 100644 index 000000000..ea6ea5383 --- /dev/null +++ b/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml @@ -0,0 +1,30 @@ +type: dislotungsten +references: + - D. Cereceda et al., + International Journal of Plasticity 78:242-265, 2016, + http://dx.doi.org/10.1016/j.ijplas.2015.09.002 +N_sl: [12] +b_sl: [2.72e-10] +rho_mob_0: [1.0e+9] # estimated from section 3.2 +rho_dip_0: [1.0] # not given +Q_s: [2.61154e-19] # 1.63 eV, Delta_H0 +B: [8.3e-5] +omega: [9.1e+11] # nu_0 +p_sl: [0.86] +q_sl: [1.69] +tau_Peierls: [2.03e+9] # there is also tau_c^* = 2.92GPa, not clear in the paper +h: [2.566e-10] +a_nonSchmid: [0.938, 0.71, 4.43] +h_sl-sl: [0.009, 0.72, 0.009, 0.05, 0.05, 0.06, 0.09] +w: [2.992e-09] # 11b +i_sl: [1] # c, eq. (25) +D: 1.0e+10 # d_g, eq. (25) +D_a: 1.0 # d_edge = D_a*b + +# climb (disabled) +D_0: 0.0 # disable climb +f_at: 1 +Q_cl: 1.0 +output: [Lambda_sl] + +v_0: [1] From fbc4865c30c2a306fdec8af0f11c8fcfdaba22ad Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 31 Oct 2021 15:42:18 +0100 Subject: [PATCH 08/15] mathematically equivalent re-formulation allows to disable contribution from grain size by setting it to a large value --- .../config/phase/mechanical/plastic/dislotungsten_W.yaml | 3 +-- src/phase_mechanical_plastic_dislotungsten.f90 | 9 +++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml b/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml index ea6ea5383..6a0e4dcc2 100644 --- a/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml +++ b/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml @@ -18,10 +18,9 @@ a_nonSchmid: [0.938, 0.71, 4.43] h_sl-sl: [0.009, 0.72, 0.009, 0.05, 0.05, 0.06, 0.09] w: [2.992e-09] # 11b i_sl: [1] # c, eq. (25) -D: 1.0e+10 # d_g, eq. (25) +D: 1.0e+20 # d_g, eq. (25) D_a: 1.0 # d_edge = D_a*b -# climb (disabled) D_0: 0.0 # disable climb f_at: 1 Q_cl: 1.0 diff --git a/src/phase_mechanical_plastic_dislotungsten.f90 b/src/phase_mechanical_plastic_dislotungsten.f90 index 9f565df67..21ea34611 100644 --- a/src/phase_mechanical_plastic_dislotungsten.f90 +++ b/src/phase_mechanical_plastic_dislotungsten.f90 @@ -196,7 +196,7 @@ module function plastic_dislotungsten_init() result(myPlasticity) prm%d_caron = pl%get_asFloat('D_a') * prm%b_sl ! sanity checks - if ( prm%D_0 <= 0.0_pReal) extmsg = trim(extmsg)//' D_0' + if ( prm%D_0 < 0.0_pReal) extmsg = trim(extmsg)//' D_0' if ( prm%Q_cl <= 0.0_pReal) extmsg = trim(extmsg)//' Q_cl' if (any(rho_mob_0 < 0.0_pReal)) extmsg = trim(extmsg)//' rho_mob_0' if (any(rho_dip_0 < 0.0_pReal)) extmsg = trim(extmsg)//' rho_dip_0' @@ -375,16 +375,17 @@ module subroutine dislotungsten_dependentState(ph,en) en real(pReal), dimension(param(ph)%sum_N_sl) :: & - dislocationSpacing + Lambda_sl_inv associate(prm => param(ph), stt => state(ph), dst => dependentState(ph)) - dislocationSpacing = sqrt(matmul(prm%forestProjection,stt%rho_mob(:,en)+stt%rho_dip(:,en))) dst%tau_pass(:,en) = prm%mu*prm%b_sl & * sqrt(matmul(prm%h_sl_sl,stt%rho_mob(:,en)+stt%rho_dip(:,en))) - dst%Lambda_sl(:,en) = prm%D/(1.0_pReal+prm%D*dislocationSpacing/prm%i_sl) + Lambda_sl_inv = 1.0_pReal/prm%D & + + sqrt(matmul(prm%forestProjection,stt%rho_mob(:,en)+stt%rho_dip(:,en)))/prm%i_sl + dst%Lambda_sl(:,en) = Lambda_sl_inv**(-1.0_pReal) end associate From a352f8deebcef3a8c4681066a55c8dc625dd9358 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 31 Oct 2021 16:05:22 +0100 Subject: [PATCH 09/15] reasonable convergence --- .../phase/mechanical/plastic/dislotungsten_W.yaml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml b/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml index 6a0e4dcc2..6efe77644 100644 --- a/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml +++ b/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml @@ -3,6 +3,10 @@ references: - D. Cereceda et al., International Journal of Plasticity 78:242-265, 2016, http://dx.doi.org/10.1016/j.ijplas.2015.09.002 + - A. Koester et al., + Acta Materialia 60:3894-3901, 2012 + http://dx.doi.org/10.1016/j.actamat.2012.03.053 +output: [Lambda_sl] N_sl: [12] b_sl: [2.72e-10] rho_mob_0: [1.0e+9] # estimated from section 3.2 @@ -12,18 +16,19 @@ B: [8.3e-5] omega: [9.1e+11] # nu_0 p_sl: [0.86] q_sl: [1.69] -tau_Peierls: [2.03e+9] # there is also tau_c^* = 2.92GPa, not clear in the paper +tau_Peierls: [2.03e+9] h: [2.566e-10] -a_nonSchmid: [0.938, 0.71, 4.43] h_sl-sl: [0.009, 0.72, 0.009, 0.05, 0.05, 0.06, 0.09] w: [2.992e-09] # 11b i_sl: [1] # c, eq. (25) D: 1.0e+20 # d_g, eq. (25) D_a: 1.0 # d_edge = D_a*b +# values in Cereceda et al. are high, using parameters from Koester et al. +a_nonSchmid: [0.61, 0.23, 0.55] # Table 1 + D_0: 0.0 # disable climb f_at: 1 Q_cl: 1.0 -output: [Lambda_sl] v_0: [1] From 6d117882c5965e0b5cc9583bd46bce5779b17a46 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 31 Oct 2021 17:29:35 +0100 Subject: [PATCH 10/15] use precalculated value --- src/phase_mechanical_plastic_dislotungsten.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/phase_mechanical_plastic_dislotungsten.f90 b/src/phase_mechanical_plastic_dislotungsten.f90 index 21ea34611..d1b932619 100644 --- a/src/phase_mechanical_plastic_dislotungsten.f90 +++ b/src/phase_mechanical_plastic_dislotungsten.f90 @@ -502,7 +502,7 @@ pure subroutine kinetics(Mp,T,ph,en, & if (present(ddot_gamma_dtau_pos)) then significantPositiveTau2: where(abs(tau_pos)-dst%tau_pass(:,en) > tol_math_check) dtn = -1.0_pReal * t_n * BoltzmannRatio * prm%p * prm%q * (1.0_pReal-StressRatio_p)**(prm%q - 1.0_pReal) & - * (StressRatio)**(prm%p - 1.0_pReal) / prm%tau_Peierls + * StressRatio_pminus1 / prm%tau_Peierls dtk = -1.0_pReal * t_k / tau_pos dvel = -1.0_pReal * prm%h * (dtk + dtn) / (t_n + t_k)**2.0_pReal @@ -532,7 +532,7 @@ pure subroutine kinetics(Mp,T,ph,en, & if (present(ddot_gamma_dtau_neg)) then significantNegativeTau2: where(abs(tau_neg)-dst%tau_pass(:,en) > tol_math_check) dtn = -1.0_pReal * t_n * BoltzmannRatio * prm%p * prm%q * (1.0_pReal-StressRatio_p)**(prm%q - 1.0_pReal) & - * (StressRatio)**(prm%p - 1.0_pReal) / prm%tau_Peierls + * StressRatio_pminus1 / prm%tau_Peierls dtk = -1.0_pReal * t_k / tau_neg dvel = -1.0_pReal * prm%h * (dtk + dtn) / (t_n + t_k)**2.0_pReal From 737eff91793e8b794124878f5a22bfb42b0699e4 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 31 Oct 2021 17:31:01 +0100 Subject: [PATCH 11/15] bugfix: change of behavior v_0 was erroneously introduced use tau = (tau_pos+tau_neg)/2 --- PRIVATE | 2 +- .../phase/mechanical/plastic/dislotungsten_W.yaml | 2 -- src/phase_mechanical_plastic_dislotungsten.f90 | 12 ++++-------- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/PRIVATE b/PRIVATE index fabe69749..00a536a78 160000 --- a/PRIVATE +++ b/PRIVATE @@ -1 +1 @@ -Subproject commit fabe69749425e8a7aceb3b7c2758b40d97d8b809 +Subproject commit 00a536a78508cb273071517128a7edc7c387088b diff --git a/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml b/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml index 6efe77644..8f474d2a3 100644 --- a/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml +++ b/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml @@ -30,5 +30,3 @@ a_nonSchmid: [0.61, 0.23, 0.55] # Table 1 D_0: 0.0 # disable climb f_at: 1 Q_cl: 1.0 - -v_0: [1] diff --git a/src/phase_mechanical_plastic_dislotungsten.f90 b/src/phase_mechanical_plastic_dislotungsten.f90 index d1b932619..8970fd53c 100644 --- a/src/phase_mechanical_plastic_dislotungsten.f90 +++ b/src/phase_mechanical_plastic_dislotungsten.f90 @@ -24,7 +24,6 @@ submodule(phase:plastic) dislotungsten tau_Peierls, & !< Peierls stress !* mobility law parameters Q_s, & !< activation energy for glide [J] - v_0, & !< dislocation velocity prefactor [m/s] p, & !< p-exponent in glide velocity q, & !< q-exponent in glide velocity B, & !< friction coefficient @@ -158,7 +157,6 @@ module function plastic_dislotungsten_init() result(myPlasticity) rho_mob_0 = pl%get_as1dFloat('rho_mob_0', requiredSize=size(N_sl)) rho_dip_0 = pl%get_as1dFloat('rho_dip_0', requiredSize=size(N_sl)) - prm%v_0 = pl%get_as1dFloat('v_0', requiredSize=size(N_sl)) prm%b_sl = pl%get_as1dFloat('b_sl', requiredSize=size(N_sl)) prm%Q_s = pl%get_as1dFloat('Q_s', requiredSize=size(N_sl)) @@ -189,7 +187,6 @@ module function plastic_dislotungsten_init() result(myPlasticity) prm%w = math_expand(prm%w, N_sl) prm%omega = math_expand(prm%omega, N_sl) prm%tau_Peierls = math_expand(prm%tau_Peierls, N_sl) - prm%v_0 = math_expand(prm%v_0, N_sl) prm%B = math_expand(prm%B, N_sl) prm%i_sl = math_expand(prm%i_sl, N_sl) prm%f_at = math_expand(prm%f_at, N_sl) @@ -200,7 +197,6 @@ module function plastic_dislotungsten_init() result(myPlasticity) if ( prm%Q_cl <= 0.0_pReal) extmsg = trim(extmsg)//' Q_cl' if (any(rho_mob_0 < 0.0_pReal)) extmsg = trim(extmsg)//' rho_mob_0' if (any(rho_dip_0 < 0.0_pReal)) extmsg = trim(extmsg)//' rho_dip_0' - if (any(prm%v_0 < 0.0_pReal)) extmsg = trim(extmsg)//' v_0' if (any(prm%b_sl <= 0.0_pReal)) extmsg = trim(extmsg)//' b_sl' if (any(prm%Q_s <= 0.0_pReal)) extmsg = trim(extmsg)//' Q_s' if (any(prm%tau_Peierls < 0.0_pReal)) extmsg = trim(extmsg)//' tau_Peierls' @@ -211,7 +207,7 @@ module function plastic_dislotungsten_init() result(myPlasticity) else slipActive rho_mob_0 = emptyRealArray; rho_dip_0 = emptyRealArray allocate(prm%b_sl,prm%d_caron,prm%i_sl,prm%f_at,prm%tau_Peierls, & - prm%Q_s,prm%v_0,prm%p,prm%q,prm%B,prm%h,prm%w,prm%omega, & + prm%Q_s,prm%p,prm%q,prm%B,prm%h,prm%w,prm%omega, & source = emptyRealArray) allocate(prm%forestProjection(0,0)) allocate(prm%h_sl_sl (0,0)) @@ -338,11 +334,11 @@ module subroutine dislotungsten_dotState(Mp,T,ph,en) dot%gamma_sl(:,en) = abs(dot_gamma_pos+dot_gamma_neg) - where(dEq0(tau_pos)) ! ToDo: use avg of +/- + where(dEq0((tau_pos+tau_neg)*0.5_pReal)) dot_rho_dip_formation = 0.0_pReal dot_rho_dip_climb = 0.0_pReal else where - d_hat = math_clip(3.0_pReal*prm%mu*prm%b_sl/(16.0_pReal*PI*abs(tau_pos)), & ! ToDo: use avg of +/- + d_hat = math_clip(3.0_pReal*prm%mu*prm%b_sl/(16.0_pReal*PI*abs(tau_pos+tau_neg)*0.5_pReal), & prm%d_caron, & ! lower limit dst%Lambda_sl(:,en)) ! upper limit dot_rho_dip_formation = merge(2.0_pReal*(d_hat-prm%d_caron)*stt%rho_mob(:,en)*dot%gamma_sl(:,en)/prm%b_sl, & @@ -480,7 +476,7 @@ pure subroutine kinetics(Mp,T,ph,en, & if (present(tau_neg_out)) tau_neg_out = tau_neg associate(BoltzmannRatio => prm%Q_s/(kB*T), & - dot_gamma_0 => stt%rho_mob(:,en)*prm%b_sl*prm%v_0, & + dot_gamma_0 => stt%rho_mob(:,en)*prm%b_sl, & effectiveLength => dst%Lambda_sl(:,en) - prm%w) tau_eff = abs(tau_pos)-dst%tau_pass(:,en) From 3f3224a9cb0734df1de18f04211f40d590dc43ec Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 31 Oct 2021 18:59:57 +0100 Subject: [PATCH 12/15] found better source --- .../phase/mechanical/plastic/dislotungsten_W.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml b/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml index 8f474d2a3..cb1d837a1 100644 --- a/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml +++ b/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml @@ -3,9 +3,9 @@ references: - D. Cereceda et al., International Journal of Plasticity 78:242-265, 2016, http://dx.doi.org/10.1016/j.ijplas.2015.09.002 - - A. Koester et al., - Acta Materialia 60:3894-3901, 2012 - http://dx.doi.org/10.1016/j.actamat.2012.03.053 + - R. Gröger et al., + Acta Materialia 56(19):5412-5425, 2008, + https://doi.org/10.1016/j.actamat.2008.07.037 output: [Lambda_sl] N_sl: [12] b_sl: [2.72e-10] @@ -24,8 +24,8 @@ i_sl: [1] # c, eq. (25) D: 1.0e+20 # d_g, eq. (25) D_a: 1.0 # d_edge = D_a*b -# values in Cereceda et al. are high, using parameters from Koester et al. -a_nonSchmid: [0.61, 0.23, 0.55] # Table 1 +# values in Cereceda et al. are high, using parameters from Gröger et al. +a_nonSchmid: [0.0, 0.56, 0.75] # Table 2 D_0: 0.0 # disable climb f_at: 1 From e0b6a28b4800a2438baa19aa9f8285df203c654b Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 31 Oct 2021 22:13:36 +0100 Subject: [PATCH 13/15] better matching name --- src/phase_mechanical_plastic_dislotungsten.f90 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/phase_mechanical_plastic_dislotungsten.f90 b/src/phase_mechanical_plastic_dislotungsten.f90 index 8970fd53c..c759cdaad 100644 --- a/src/phase_mechanical_plastic_dislotungsten.f90 +++ b/src/phase_mechanical_plastic_dislotungsten.f90 @@ -476,7 +476,7 @@ pure subroutine kinetics(Mp,T,ph,en, & if (present(tau_neg_out)) tau_neg_out = tau_neg associate(BoltzmannRatio => prm%Q_s/(kB*T), & - dot_gamma_0 => stt%rho_mob(:,en)*prm%b_sl, & + b_rho_half => stt%rho_mob(:,en) * prm%b_sl * 0.5_pReal, & effectiveLength => dst%Lambda_sl(:,en) - prm%w) tau_eff = abs(tau_pos)-dst%tau_pass(:,en) @@ -490,7 +490,7 @@ pure subroutine kinetics(Mp,T,ph,en, & / (prm%omega*effectiveLength) t_k = effectiveLength * prm%B /(2.0_pReal*prm%b_sl*tau_eff) ! corrected eq. (14) - dot_gamma_pos = dot_gamma_0 * sign(prm%h/(t_n + t_k),tau_pos) * 0.5_pReal + dot_gamma_pos = b_rho_half * sign(prm%h/(t_n + t_k),tau_pos) else where significantPositiveTau dot_gamma_pos = 0.0_pReal end where significantPositiveTau @@ -503,7 +503,7 @@ pure subroutine kinetics(Mp,T,ph,en, & dvel = -1.0_pReal * prm%h * (dtk + dtn) / (t_n + t_k)**2.0_pReal - ddot_gamma_dtau_pos = dot_gamma_0 * dvel* 0.5_pReal + ddot_gamma_dtau_pos = b_rho_half * dvel else where significantPositiveTau2 ddot_gamma_dtau_pos = 0.0_pReal end where significantPositiveTau2 @@ -520,7 +520,7 @@ pure subroutine kinetics(Mp,T,ph,en, & / (prm%omega*effectiveLength) t_k = effectiveLength * prm%B /(2.0_pReal*prm%b_sl*tau_eff) ! corrected eq. (14) - dot_gamma_neg = dot_gamma_0 * sign(prm%h/(t_n + t_k),tau_neg) * 0.5_pReal + dot_gamma_neg = b_rho_half * sign(prm%h/(t_n + t_k),tau_neg) else where significantNegativeTau dot_gamma_neg = 0.0_pReal end where significantNegativeTau @@ -533,7 +533,7 @@ pure subroutine kinetics(Mp,T,ph,en, & dvel = -1.0_pReal * prm%h * (dtk + dtn) / (t_n + t_k)**2.0_pReal - ddot_gamma_dtau_neg = dot_gamma_0 * dvel * 0.5_pReal + ddot_gamma_dtau_neg = b_rho_half * dvel else where significantNegativeTau2 ddot_gamma_dtau_neg = 0.0_pReal end where significantNegativeTau2 From 2e3de727ccf396d021116f2398d20126c2bbccfb Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Tue, 2 Nov 2021 07:27:08 +0100 Subject: [PATCH 14/15] hint at issues with the current parametrization --- .../phase/mechanical/plastic/dislotungsten_W.yaml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml b/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml index cb1d837a1..55814c3f8 100644 --- a/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml +++ b/examples/config/phase/mechanical/plastic/dislotungsten_W.yaml @@ -20,13 +20,16 @@ tau_Peierls: [2.03e+9] h: [2.566e-10] h_sl-sl: [0.009, 0.72, 0.009, 0.05, 0.05, 0.06, 0.09] w: [2.992e-09] # 11b -i_sl: [1] # c, eq. (25) -D: 1.0e+20 # d_g, eq. (25) -D_a: 1.0 # d_edge = D_a*b # values in Cereceda et al. are high, using parameters from Gröger et al. a_nonSchmid: [0.0, 0.56, 0.75] # Table 2 -D_0: 0.0 # disable climb +# (almost) no annhilation, adjustment needed for simulations beyond the yield point +i_sl: [1] # c, eq. (25) +D: 1.0e+20 # d_g, eq. (25) +D_a: 1.0 # d_edge = D_a*b + +# disable climb (not discussed in Cereceda et al.) +D_0: 0.0 f_at: 1 Q_cl: 1.0 From 493a0969eb15837177e999add4d366377da6793e Mon Sep 17 00:00:00 2001 From: Test User Date: Tue, 2 Nov 2021 16:42:50 +0100 Subject: [PATCH 15/15] [skip ci] updated version information after successful test of v3.0.0-alpha5-45-g1a558db83 --- python/damask/VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/damask/VERSION b/python/damask/VERSION index 98903601b..8c8e85679 100644 --- a/python/damask/VERSION +++ b/python/damask/VERSION @@ -1 +1 @@ -v3.0.0-alpha5-31-gddb25ad0e +v3.0.0-alpha5-45-g1a558db83