From eeb5f45e8890806ac8557a64a8993b4d861d66a7 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Fri, 5 Jul 2019 22:55:08 -0700 Subject: [PATCH 01/16] adopted from Viteshs branch --- src/plastic_dislotwin.f90 | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/src/plastic_dislotwin.f90 b/src/plastic_dislotwin.f90 index 43b379667..16baba1c9 100644 --- a/src/plastic_dislotwin.f90 +++ b/src/plastic_dislotwin.f90 @@ -53,7 +53,8 @@ module plastic_dislotwin nu, & D0, & !< prefactor for self-diffusion coefficient Qsd, & !< activation energy for dislocation climb - D, & ! system prm%rho_mob_0 = math_expand(prm%rho_mob_0, prm%N_sl) @@ -740,8 +754,11 @@ subroutine plastic_dislotwin_dotState(Mp,T,instance,of) f_unrotated, & VacancyDiffusion, & rho_dip_distance, & - v_cl, & - tau + v_cl, & !< climb velocity + Gamma, & !< stacking fault energy + tau, & + tau_cl, & ! ToDo: MD: good name? It is not a resolved stress but a different projection + b_d real(pReal), dimension(param(instance)%sum_N_sl) :: & dot_rho_dip_formation, & dot_rho_dip_climb, & @@ -760,6 +777,8 @@ subroutine plastic_dislotwin_dotState(Mp,T,instance,of) - sum(stt%f_tr(1:prm%sum_N_tr,of)) VacancyDiffusion = prm%D0*exp(-prm%Qsd/(kB*T)) + Gamma = prm%SFE_0K + prm%dSFE_dT * T + call kinetics_slip(Mp,T,instance,of,dot_gamma_sl) dot%gamma_sl(:,of) = abs(dot_gamma_sl) @@ -786,8 +805,16 @@ subroutine plastic_dislotwin_dotState(Mp,T,instance,of) if (dEq0(rho_dip_distance-rho_dip_distance_min(i))) then dot_rho_dip_climb(i) = 0.0_pReal else - v_cl = 3.0_pReal*prm%mu*VacancyDiffusion*prm%atomicVolume(i) & - / (2.0_pReal*PI*kB*T*(rho_dip_distance+rho_dip_distance_min(i))) + tau_cl = norm2(matmul(Mp,prm%n0_sl(1:3,i))) ! ToDo: MD: correct? + + if (prm%SFE_0K > 0.0_pReal) then ! ToDo: MD: I'm not really sure if this is correct. Maybe Gamma(0K) = 0 + b_d = 24.0_pReal*PI*(1.0_pReal - prm%nu)/(2.0_pReal + prm%nu)* Gamma/(prm%mu*prm%b_sl(i)) + else + b_d = 1.0_pReal + endif + + v_cl = 2.0_pReal*prm%omega*b_d**2.0_pReal*exp(-prm%Qsd/(kB*T)) & + * (exp(abs(tau_cl)*prm%b_sl(i)**3.0_pReal/(kB*T)) - 1.0_pReal) dot_rho_dip_climb(i) = 4.0_pReal*v_cl*stt%rho_dip(i,of) & / (rho_dip_distance-rho_dip_distance_min(i)) endif From f786fcd5f17b93625926ba7f0cb2b032d74e1faf Mon Sep 17 00:00:00 2001 From: Vitesh Shah Date: Sat, 27 Jul 2019 11:07:36 +0200 Subject: [PATCH 02/16] Better name for climb stress --- src/plastic_dislotwin.f90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plastic_dislotwin.f90 b/src/plastic_dislotwin.f90 index 16baba1c9..3553630dc 100644 --- a/src/plastic_dislotwin.f90 +++ b/src/plastic_dislotwin.f90 @@ -757,7 +757,7 @@ subroutine plastic_dislotwin_dotState(Mp,T,instance,of) v_cl, & !< climb velocity Gamma, & !< stacking fault energy tau, & - tau_cl, & ! ToDo: MD: good name? It is not a resolved stress but a different projection + sigma_cl, & ! ToDo: MD: good name? It is not a resolved stress but a different projection b_d real(pReal), dimension(param(instance)%sum_N_sl) :: & dot_rho_dip_formation, & @@ -805,7 +805,7 @@ subroutine plastic_dislotwin_dotState(Mp,T,instance,of) if (dEq0(rho_dip_distance-rho_dip_distance_min(i))) then dot_rho_dip_climb(i) = 0.0_pReal else - tau_cl = norm2(matmul(Mp,prm%n0_sl(1:3,i))) ! ToDo: MD: correct? + sigma_cl = norm2(matmul(Mp,prm%n0_sl(1:3,i))) ! ToDo: MD: correct? if (prm%SFE_0K > 0.0_pReal) then ! ToDo: MD: I'm not really sure if this is correct. Maybe Gamma(0K) = 0 b_d = 24.0_pReal*PI*(1.0_pReal - prm%nu)/(2.0_pReal + prm%nu)* Gamma/(prm%mu*prm%b_sl(i)) @@ -814,7 +814,7 @@ subroutine plastic_dislotwin_dotState(Mp,T,instance,of) endif v_cl = 2.0_pReal*prm%omega*b_d**2.0_pReal*exp(-prm%Qsd/(kB*T)) & - * (exp(abs(tau_cl)*prm%b_sl(i)**3.0_pReal/(kB*T)) - 1.0_pReal) + * (exp(abs(sigma_cl)*prm%b_sl(i)**3.0_pReal/(kB*T)) - 1.0_pReal) dot_rho_dip_climb(i) = 4.0_pReal*v_cl*stt%rho_dip(i,of) & / (rho_dip_distance-rho_dip_distance_min(i)) endif From d40e4a3800a14c80c110523cd6934cac81243a8f Mon Sep 17 00:00:00 2001 From: Vitesh Shah Date: Tue, 30 Jul 2019 10:53:19 +0200 Subject: [PATCH 03/16] SFE at 0K can be negative as well --- src/plastic_dislotwin.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plastic_dislotwin.f90 b/src/plastic_dislotwin.f90 index 3553630dc..57be24480 100644 --- a/src/plastic_dislotwin.f90 +++ b/src/plastic_dislotwin.f90 @@ -807,7 +807,7 @@ subroutine plastic_dislotwin_dotState(Mp,T,instance,of) else sigma_cl = norm2(matmul(Mp,prm%n0_sl(1:3,i))) ! ToDo: MD: correct? - if (prm%SFE_0K > 0.0_pReal) then ! ToDo: MD: I'm not really sure if this is correct. Maybe Gamma(0K) = 0 + if (prm%SFE_0K == 0.0_pReal) then ! ToDo: MD: I'm not really sure if this is correct. Maybe Gamma(0K) = 0 b_d = 24.0_pReal*PI*(1.0_pReal - prm%nu)/(2.0_pReal + prm%nu)* Gamma/(prm%mu*prm%b_sl(i)) else b_d = 1.0_pReal From 860ef2f25663332d824f0d8b84dbc62025884034 Mon Sep 17 00:00:00 2001 From: Vitesh Shah Date: Thu, 1 Aug 2019 15:29:32 +0200 Subject: [PATCH 04/16] Corrected the calculation of sigma_cl --- src/plastic_dislotwin.f90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/plastic_dislotwin.f90 b/src/plastic_dislotwin.f90 index 57be24480..b10375fec 100644 --- a/src/plastic_dislotwin.f90 +++ b/src/plastic_dislotwin.f90 @@ -757,7 +757,7 @@ subroutine plastic_dislotwin_dotState(Mp,T,instance,of) v_cl, & !< climb velocity Gamma, & !< stacking fault energy tau, & - sigma_cl, & ! ToDo: MD: good name? It is not a resolved stress but a different projection + sigma_cl, & b_d real(pReal), dimension(param(instance)%sum_N_sl) :: & dot_rho_dip_formation, & @@ -805,9 +805,9 @@ subroutine plastic_dislotwin_dotState(Mp,T,instance,of) if (dEq0(rho_dip_distance-rho_dip_distance_min(i))) then dot_rho_dip_climb(i) = 0.0_pReal else - sigma_cl = norm2(matmul(Mp,prm%n0_sl(1:3,i))) ! ToDo: MD: correct? - - if (prm%SFE_0K == 0.0_pReal) then ! ToDo: MD: I'm not really sure if this is correct. Maybe Gamma(0K) = 0 +! sigma_cl = norm2(matmul(Mp,prm%n0_sl(1:3,i))) ! ToDo: MD: correct? + sigma_cl = DOT_PRODUCT(prm%n0_sl(1:3,i),matmul(Mp,prm%n0_sl(1:3,i))) + if (prm%SFE_0K == 0.0_pReal) then b_d = 24.0_pReal*PI*(1.0_pReal - prm%nu)/(2.0_pReal + prm%nu)* Gamma/(prm%mu*prm%b_sl(i)) else b_d = 1.0_pReal From 310d262e9f8be3f6af5173076b33c635182ceeef Mon Sep 17 00:00:00 2001 From: Vitesh Shah Date: Thu, 15 Aug 2019 13:55:12 +0200 Subject: [PATCH 05/16] nearest neighbour number is 12 for fcc --- src/plastic_dislotwin.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plastic_dislotwin.f90 b/src/plastic_dislotwin.f90 index b10375fec..47c56d7f1 100644 --- a/src/plastic_dislotwin.f90 +++ b/src/plastic_dislotwin.f90 @@ -282,7 +282,7 @@ subroutine plastic_dislotwin_init ! multiplication factor according to slip system if (lattice_structure(p) == LATTICE_FCC_ID .or. lattice_structure(p) == LATTICE_HEX_ID ) then - prm%omega = prm%omega * 11.0_pReal + prm%omega = prm%omega * 12.0_pReal else prm%omega = prm%omega * 8.0_pReal endif From 5a72f513c7d1e6dbbb57c8dd7a15d2ae2bf154b9 Mon Sep 17 00:00:00 2001 From: Vitesh Shah Date: Thu, 15 Aug 2019 13:56:59 +0200 Subject: [PATCH 06/16] SFE not equal to zero --- src/plastic_dislotwin.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plastic_dislotwin.f90 b/src/plastic_dislotwin.f90 index 47c56d7f1..6491acb0c 100644 --- a/src/plastic_dislotwin.f90 +++ b/src/plastic_dislotwin.f90 @@ -807,7 +807,7 @@ subroutine plastic_dislotwin_dotState(Mp,T,instance,of) else ! sigma_cl = norm2(matmul(Mp,prm%n0_sl(1:3,i))) ! ToDo: MD: correct? sigma_cl = DOT_PRODUCT(prm%n0_sl(1:3,i),matmul(Mp,prm%n0_sl(1:3,i))) - if (prm%SFE_0K == 0.0_pReal) then + if (prm%SFE_0K /= 0.0_pReal) then b_d = 24.0_pReal*PI*(1.0_pReal - prm%nu)/(2.0_pReal + prm%nu)* Gamma/(prm%mu*prm%b_sl(i)) else b_d = 1.0_pReal From 5dfd13b759e47a2dc03ccc4175bc54d9e95796b4 Mon Sep 17 00:00:00 2001 From: Vitesh Shah Date: Fri, 16 Aug 2019 15:07:19 +0200 Subject: [PATCH 07/16] documenting new variables --- src/plastic_dislotwin.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plastic_dislotwin.f90 b/src/plastic_dislotwin.f90 index 6491acb0c..de7d0c971 100644 --- a/src/plastic_dislotwin.f90 +++ b/src/plastic_dislotwin.f90 @@ -757,8 +757,8 @@ subroutine plastic_dislotwin_dotState(Mp,T,instance,of) v_cl, & !< climb velocity Gamma, & !< stacking fault energy tau, & - sigma_cl, & - b_d + sigma_cl, & !< climb stress + b_d !< width of burgers vector to stacking fault real(pReal), dimension(param(instance)%sum_N_sl) :: & dot_rho_dip_formation, & dot_rho_dip_climb, & From 50b372d9f1bb42550ee4c01087d8d2a166694d77 Mon Sep 17 00:00:00 2001 From: Vitesh Shah Date: Fri, 16 Aug 2019 15:57:11 +0200 Subject: [PATCH 08/16] ClimbSwitch introduced --- src/plastic_dislotwin.f90 | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/plastic_dislotwin.f90 b/src/plastic_dislotwin.f90 index de7d0c971..e2a8b1728 100644 --- a/src/plastic_dislotwin.f90 +++ b/src/plastic_dislotwin.f90 @@ -117,7 +117,8 @@ module plastic_dislotwin integer :: & sum_N_sl, & !< total number of active slip 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 + climbSwitch !< Switch to decide climb integer, dimension(:), allocatable :: & N_sl, & !< number of active slip systems for each family N_tw, & !< number of active twin systems for each family @@ -280,6 +281,8 @@ subroutine plastic_dislotwin_init prm%SFE_0K = config%getFloat('sfe_0k',defaultVal = 0.0_pReal) prm%dSFE_dT = config%getFloat('dsfe_dt',defaultVal = 0.0_pReal) + prm%climbSwitch = config%getInt('climbswitch',defaultVal = 1) + ! multiplication factor according to slip system if (lattice_structure(p) == LATTICE_FCC_ID .or. lattice_structure(p) == LATTICE_HEX_ID ) then prm%omega = prm%omega * 12.0_pReal @@ -807,10 +810,10 @@ subroutine plastic_dislotwin_dotState(Mp,T,instance,of) else ! sigma_cl = norm2(matmul(Mp,prm%n0_sl(1:3,i))) ! ToDo: MD: correct? sigma_cl = DOT_PRODUCT(prm%n0_sl(1:3,i),matmul(Mp,prm%n0_sl(1:3,i))) - if (prm%SFE_0K /= 0.0_pReal) then + if (prm%climbSwitch /= 0) then b_d = 24.0_pReal*PI*(1.0_pReal - prm%nu)/(2.0_pReal + prm%nu)* Gamma/(prm%mu*prm%b_sl(i)) else - b_d = 1.0_pReal + b_d = 0.0_pReal endif v_cl = 2.0_pReal*prm%omega*b_d**2.0_pReal*exp(-prm%Qsd/(kB*T)) & From 38755cb30d5bcc837235bbb891342e342495b5da Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Fri, 16 Aug 2019 13:56:52 -0700 Subject: [PATCH 09/16] polishing --- src/plastic_dislotwin.f90 | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/plastic_dislotwin.f90 b/src/plastic_dislotwin.f90 index e2a8b1728..f1c42b678 100644 --- a/src/plastic_dislotwin.f90 +++ b/src/plastic_dislotwin.f90 @@ -59,7 +59,7 @@ module plastic_dislotwin q_sb, & !< q-exponent in shear band velocity CEdgeDipMinDistance, & !< i_tw, & !< - tau_0, & ! system prm%rho_mob_0 = math_expand(prm%rho_mob_0, prm%N_sl) @@ -808,8 +805,7 @@ subroutine plastic_dislotwin_dotState(Mp,T,instance,of) if (dEq0(rho_dip_distance-rho_dip_distance_min(i))) then dot_rho_dip_climb(i) = 0.0_pReal else -! sigma_cl = norm2(matmul(Mp,prm%n0_sl(1:3,i))) ! ToDo: MD: correct? - sigma_cl = DOT_PRODUCT(prm%n0_sl(1:3,i),matmul(Mp,prm%n0_sl(1:3,i))) + sigma_cl = dot_product(prm%n0_sl(1:3,i),matmul(Mp,prm%n0_sl(1:3,i))) if (prm%climbSwitch /= 0) then b_d = 24.0_pReal*PI*(1.0_pReal - prm%nu)/(2.0_pReal + prm%nu)* Gamma/(prm%mu*prm%b_sl(i)) else From d2affaa414cab4169fc325ba2a42e18674902799 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Fri, 16 Aug 2019 14:04:12 -0700 Subject: [PATCH 10/16] clearer logic --- src/plastic_dislotwin.f90 | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/plastic_dislotwin.f90 b/src/plastic_dislotwin.f90 index f1c42b678..9880ad868 100644 --- a/src/plastic_dislotwin.f90 +++ b/src/plastic_dislotwin.f90 @@ -118,7 +118,7 @@ module plastic_dislotwin sum_N_sl, & !< total number of active slip system sum_N_tw, & !< total number of active twin system sum_N_tr, & !< total number of active transformation system - climbSwitch !< Switch to decide climb + climbSwitch !< Switch to decide climb !ToDo: Needs better name and should be a logical integer, dimension(:), allocatable :: & N_sl, & !< number of active slip systems for each family N_tw, & !< number of active twin systems for each family @@ -280,7 +280,7 @@ subroutine plastic_dislotwin_init prm%SFE_0K = config%getFloat('sfe_0k', defaultVal = 0.0_pReal) prm%dSFE_dT = config%getFloat('dsfe_dt',defaultVal = 0.0_pReal) - prm%climbSwitch = config%getInt('climbswitch',defaultVal = 1) + prm%climbSwitch = config%getInt('climbswitch',defaultVal = 1) ! ToDo: turn on with config%key_exists('/name/') prm%omega = config%getFloat('omega', defaultVal = 1000.0_pReal) & * merge(12.0_pReal, & @@ -802,20 +802,22 @@ subroutine plastic_dislotwin_dotState(Mp,T,instance,of) dot_rho_dip_formation(i) = 0.0_pReal endif - if (dEq0(rho_dip_distance-rho_dip_distance_min(i))) then + if (dEq0(rho_dip_distance-rho_dip_distance_min(i))) then !ToDo: use or here for climb switch (second if else not needed) dot_rho_dip_climb(i) = 0.0_pReal else sigma_cl = dot_product(prm%n0_sl(1:3,i),matmul(Mp,prm%n0_sl(1:3,i))) if (prm%climbSwitch /= 0) then b_d = 24.0_pReal*PI*(1.0_pReal - prm%nu)/(2.0_pReal + prm%nu)* Gamma/(prm%mu*prm%b_sl(i)) + + v_cl = 2.0_pReal*prm%omega*b_d**2.0_pReal*exp(-prm%Qsd/(kB*T)) & + * (exp(abs(sigma_cl)*prm%b_sl(i)**3.0_pReal/(kB*T)) - 1.0_pReal) + + dot_rho_dip_climb(i) = 4.0_pReal*v_cl*stt%rho_dip(i,of) & + / (rho_dip_distance-rho_dip_distance_min(i)) else - b_d = 0.0_pReal + dot_rho_dip_climb(i) = 0.0_pReal endif - - v_cl = 2.0_pReal*prm%omega*b_d**2.0_pReal*exp(-prm%Qsd/(kB*T)) & - * (exp(abs(sigma_cl)*prm%b_sl(i)**3.0_pReal/(kB*T)) - 1.0_pReal) - dot_rho_dip_climb(i) = 4.0_pReal*v_cl*stt%rho_dip(i,of) & - / (rho_dip_distance-rho_dip_distance_min(i)) + endif endif significantSlipStress enddo slipState From c71b060c4883d91ab9904373ba1c880705d53676 Mon Sep 17 00:00:00 2001 From: Vitesh Shah Date: Tue, 20 Aug 2019 10:56:36 +0200 Subject: [PATCH 11/16] Improved syntax for binary switches --- src/plastic_dislotwin.f90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/plastic_dislotwin.f90 b/src/plastic_dislotwin.f90 index e2a8b1728..7d0fb0201 100644 --- a/src/plastic_dislotwin.f90 +++ b/src/plastic_dislotwin.f90 @@ -118,7 +118,7 @@ module plastic_dislotwin sum_N_sl, & !< total number of active slip system sum_N_tw, & !< total number of active twin system sum_N_tr, & !< total number of active transformation system - climbSwitch !< Switch to decide climb + ExtendedDislocations !< flag for existence of partial dislocations integer, dimension(:), allocatable :: & N_sl, & !< number of active slip systems for each family N_tw, & !< number of active twin systems for each family @@ -281,8 +281,8 @@ subroutine plastic_dislotwin_init prm%SFE_0K = config%getFloat('sfe_0k',defaultVal = 0.0_pReal) prm%dSFE_dT = config%getFloat('dsfe_dt',defaultVal = 0.0_pReal) - prm%climbSwitch = config%getInt('climbswitch',defaultVal = 1) - + prm%ExtendedDislocations = config%getInt('/ExtendedDislocations/',defaultVal = 1) + ! multiplication factor according to slip system if (lattice_structure(p) == LATTICE_FCC_ID .or. lattice_structure(p) == LATTICE_HEX_ID ) then prm%omega = prm%omega * 12.0_pReal @@ -810,7 +810,7 @@ subroutine plastic_dislotwin_dotState(Mp,T,instance,of) else ! sigma_cl = norm2(matmul(Mp,prm%n0_sl(1:3,i))) ! ToDo: MD: correct? sigma_cl = DOT_PRODUCT(prm%n0_sl(1:3,i),matmul(Mp,prm%n0_sl(1:3,i))) - if (prm%climbSwitch /= 0) then + if (prm%ExtendedDislocations /= 0) then b_d = 24.0_pReal*PI*(1.0_pReal - prm%nu)/(2.0_pReal + prm%nu)* Gamma/(prm%mu*prm%b_sl(i)) else b_d = 0.0_pReal From b854e7ee086102650aca8bc0e2ca94e76fb2dce4 Mon Sep 17 00:00:00 2001 From: Vitesh Shah Date: Tue, 20 Aug 2019 13:54:51 +0200 Subject: [PATCH 12/16] Decision based on possibility of partials --- src/plastic_dislotwin.f90 | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/plastic_dislotwin.f90 b/src/plastic_dislotwin.f90 index 7d0fb0201..9d9e6cfd3 100644 --- a/src/plastic_dislotwin.f90 +++ b/src/plastic_dislotwin.f90 @@ -278,11 +278,12 @@ subroutine plastic_dislotwin_init prm%Qsd = config%getFloat('qsd') prm%omega = config%getFloat('omega',defaultVal=1000.0_pReal) prm%atomicVolume = config%getFloat('catomicvolume') * prm%b_sl**3.0_pReal - prm%SFE_0K = config%getFloat('sfe_0k',defaultVal = 0.0_pReal) - prm%dSFE_dT = config%getFloat('dsfe_dt',defaultVal = 0.0_pReal) - - prm%ExtendedDislocations = config%getInt('/ExtendedDislocations/',defaultVal = 1) - + prm%ExtendedDislocations = config%getInt('extend_dislocations',defaultVal = 0) + if (prm%ExtendedDislocations == 1) then + prm%SFE_0K = config%getFloat('sfe_0k') + prm%dSFE_dT = config%getFloat('dsfe_dt') !TODO: should this be in sanity check part? + endif + ! multiplication factor according to slip system if (lattice_structure(p) == LATTICE_FCC_ID .or. lattice_structure(p) == LATTICE_HEX_ID ) then prm%omega = prm%omega * 12.0_pReal @@ -780,8 +781,6 @@ subroutine plastic_dislotwin_dotState(Mp,T,instance,of) - sum(stt%f_tr(1:prm%sum_N_tr,of)) VacancyDiffusion = prm%D0*exp(-prm%Qsd/(kB*T)) - Gamma = prm%SFE_0K + prm%dSFE_dT * T - call kinetics_slip(Mp,T,instance,of,dot_gamma_sl) dot%gamma_sl(:,of) = abs(dot_gamma_sl) @@ -811,9 +810,10 @@ subroutine plastic_dislotwin_dotState(Mp,T,instance,of) ! sigma_cl = norm2(matmul(Mp,prm%n0_sl(1:3,i))) ! ToDo: MD: correct? sigma_cl = DOT_PRODUCT(prm%n0_sl(1:3,i),matmul(Mp,prm%n0_sl(1:3,i))) if (prm%ExtendedDislocations /= 0) then + Gamma = prm%SFE_0K + prm%dSFE_dT * T b_d = 24.0_pReal*PI*(1.0_pReal - prm%nu)/(2.0_pReal + prm%nu)* Gamma/(prm%mu*prm%b_sl(i)) else - b_d = 0.0_pReal + b_d = 1.0_pReal endif v_cl = 2.0_pReal*prm%omega*b_d**2.0_pReal*exp(-prm%Qsd/(kB*T)) & From 7ce098c75c6f470386871fa631239f121279ed11 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Wed, 4 Sep 2019 14:52:44 -0700 Subject: [PATCH 13/16] small polishing --- src/plastic_dislotwin.f90 | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/plastic_dislotwin.f90 b/src/plastic_dislotwin.f90 index 7026fc1f5..e85a552c1 100644 --- a/src/plastic_dislotwin.f90 +++ b/src/plastic_dislotwin.f90 @@ -117,8 +117,7 @@ module plastic_dislotwin integer :: & sum_N_sl, & !< total number of active slip system sum_N_tw, & !< total number of active twin system - sum_N_tr, & !< total number of active transformation system - ExtendedDislocations !< flag for existence of partial dislocations + sum_N_tr !< total number of active transformation system integer, dimension(:), allocatable :: & N_sl, & !< number of active slip systems for each family N_tw, & !< number of active twin systems for each family @@ -126,6 +125,7 @@ module plastic_dislotwin integer(kind(undefined_ID)), dimension(:), allocatable :: & outputID !< ID of each post result output logical :: & + ExtendedDislocations, & !< consider split into partials for climb calculation fccTwinTransNucleation, & !< twinning and transformation models are for fcc dipoleFormation !< flag indicating consideration of dipole formation end type !< container type for internal constitutive parameters @@ -277,13 +277,13 @@ subroutine plastic_dislotwin_init prm%D0 = config%getFloat('d0') prm%Qsd = config%getFloat('qsd') prm%atomicVolume = config%getFloat('catomicvolume') * prm%b_sl**3.0_pReal - prm%ExtendedDislocations = config%getInt('extend_dislocations',defaultVal = 0) - if (prm%ExtendedDislocations == 1) then + prm%ExtendedDislocations = config%keyExists('/extend_dislocations/') + if (prm%ExtendedDislocations) then prm%SFE_0K = config%getFloat('sfe_0k') - prm%dSFE_dT = config%getFloat('dsfe_dt') !TODO: should this be in sanity check part? + prm%dSFE_dT = config%getFloat('dsfe_dt') endif - ! multiplication factor according to slip system + ! multiplication factor according to crystal structure (nearest neighbors bcc vs fcc/hex) prm%omega = config%getFloat('omega', defaultVal = 1000.0_pReal) & * merge(12.0_pReal, & 8.0_pReal, & @@ -803,11 +803,11 @@ subroutine plastic_dislotwin_dotState(Mp,T,instance,of) dot_rho_dip_formation(i) = 0.0_pReal endif - if (dEq0(rho_dip_distance-rho_dip_distance_min(i))) then !ToDo: use or here for climb switch (second if else not needed) + if (dEq0(rho_dip_distance-rho_dip_distance_min(i))) then dot_rho_dip_climb(i) = 0.0_pReal else - sigma_cl = DOT_PRODUCT(prm%n0_sl(1:3,i),matmul(Mp,prm%n0_sl(1:3,i))) - if (prm%ExtendedDislocations /= 0) then + sigma_cl = dot_product(prm%n0_sl(1:3,i),matmul(Mp,prm%n0_sl(1:3,i))) + if (prm%ExtendedDislocations) then Gamma = prm%SFE_0K + prm%dSFE_dT * T b_d = 24.0_pReal*PI*(1.0_pReal - prm%nu)/(2.0_pReal + prm%nu)* Gamma/(prm%mu*prm%b_sl(i)) else From fbf82fbca8bfab4ab8c6cf7b158cb699f79c93f8 Mon Sep 17 00:00:00 2001 From: Vitesh Shah Date: Thu, 5 Sep 2019 09:42:45 +0200 Subject: [PATCH 14/16] Referencing --- src/plastic_dislotwin.f90 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plastic_dislotwin.f90 b/src/plastic_dislotwin.f90 index e85a552c1..f8f405739 100644 --- a/src/plastic_dislotwin.f90 +++ b/src/plastic_dislotwin.f90 @@ -284,6 +284,7 @@ subroutine plastic_dislotwin_init endif ! multiplication factor according to crystal structure (nearest neighbors bcc vs fcc/hex) + !@details: Refer: Argon & Moffat, Acta Metallurgica, Vol. 29, pg 293 to 299, 1981 prm%omega = config%getFloat('omega', defaultVal = 1000.0_pReal) & * merge(12.0_pReal, & 8.0_pReal, & @@ -806,6 +807,7 @@ subroutine plastic_dislotwin_dotState(Mp,T,instance,of) if (dEq0(rho_dip_distance-rho_dip_distance_min(i))) then dot_rho_dip_climb(i) = 0.0_pReal else + !@details: Refer: Argon & Moffat, Acta Metallurgica, Vol. 29, pg 293 to 299, 1981 sigma_cl = dot_product(prm%n0_sl(1:3,i),matmul(Mp,prm%n0_sl(1:3,i))) if (prm%ExtendedDislocations) then Gamma = prm%SFE_0K + prm%dSFE_dT * T From 949de8df287f83a262ed37936ad8934608f9d025 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Wed, 11 Sep 2019 12:09:10 -0700 Subject: [PATCH 15/16] don't run test on master --- .gitlab-ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e2f95c82d..73b6abd58 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -390,7 +390,6 @@ Phenopowerlaw_singleSlip: - master - release - ################################################################################################### Marc_compileIfort2018_1: stage: compileMarc @@ -402,7 +401,6 @@ Marc_compileIfort2018_1: - master - release - ################################################################################################### Hex_elastic: stage: marc @@ -440,11 +438,13 @@ J2_plasticBehavior: - master - release - ################################################################################################### grid_all_example: stage: example script: grid_all_example/test.py + except: + - master + - release ################################################################################################### SpectralRuntime: From d6e93367ebd2669bcb61d002d4feefeb1edb0ce1 Mon Sep 17 00:00:00 2001 From: Franz Roters Date: Thu, 19 Sep 2019 11:17:23 +0200 Subject: [PATCH 16/16] [skip ci] clarified comment --- src/plastic_dislotwin.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plastic_dislotwin.f90 b/src/plastic_dislotwin.f90 index f8f405739..925215c69 100644 --- a/src/plastic_dislotwin.f90 +++ b/src/plastic_dislotwin.f90 @@ -762,7 +762,7 @@ subroutine plastic_dislotwin_dotState(Mp,T,instance,of) Gamma, & !< stacking fault energy tau, & sigma_cl, & !< climb stress - b_d !< width of burgers vector to stacking fault + b_d !< ratio of burgers vector to stacking fault width real(pReal), dimension(param(instance)%sum_N_sl) :: & dot_rho_dip_formation, & dot_rho_dip_climb, &