146 ener = inp.energetics
156 omega_i = d[
'omega_i_eff']
157 omega_v = d[
'omega_v_eff']
158 omega_h = d[
'omega_h_eff']
165 s_3D = float(diff.get(
's_3D', 0.0))
167 i_mobile = d[
'i_mobile']
168 v_mobile = d[
'v_mobile']
173 gamma_s = d[
'gamma_s']
182 A_iv = 4.0 * np.sqrt(3.0) * np.pi
194 rho_d = float(re.get(
'rho_d', 1.0e14))
205 rho_d = float(re.get(
'rho_net', rho_d))
206 Z_i = float(re.get(
'Z_i', 1.10))
207 Z_v = float(re.get(
'Z_v', 1.00))
208 Z_He = float(re.get(
'Z_He', 1.00))
216 Z_i_loop =
_num(re.get(
'Z_i_loop', Z_i), Z_i)
219 d_g = float(re.get(
'd_g', 5.0e-6))
229 Z_gb_i = float(re.get(
'Z_gb_i', 1.0))
230 Z_gb_v = float(re.get(
'Z_gb_v', 1.0))
233 rho_p = float(re.get(
'rho_p', 1.0e21))
234 r_p = float(re.get(
'r_p', 5.0e-9))
235 Z_p_i = float(re.get(
'Z_p_i', 1.0))
236 Z_p_v = float(re.get(
'Z_p_v', 1.0))
239 A_111 = float(inp.dissociation.get(
'A_111', 0.7501))
240 B_111 = float(inp.dissociation.get(
'B_111', 0.3873))
244 A_100 = float(inp.dissociation.get(
'A_100', 0.7160))
245 B_100 = float(inp.dissociation.get(
'B_100', 0.3581))
246 n_tr = float(inp.dissociation.get(
'n_tr', 25.0))
247 sigma_tr = float(inp.dissociation.get(
'sigma_tr', 5.0))
248 gamma_sf = float(inp.dissociation.get(
'gamma_sf', 0.6))
268 if E_b_i2
is not None:
269 A_111_new = A_111_from_E_b_i2(E_b_i2, B_111)
271 A_100 = A_100 * (A_111_new / A_111)
279 lambda_void = float(inp.dissociation.get(
'lambda', 0.5756))
280 A_void_0 = float(inp.dissociation.get(
'A_void_0', 1.2353))
281 alpha_He = inp.alpha_He
282 nu0_TM = float(inp.dissociation.get(
'nu0_TM', 1.0e12))
288 E_f_i = float(ener.get(
'E_f_i', 3.64))
289 mu_Pa = float(ener.get(
'mu', 82.0)) * 1.0e9
290 nu_pois = float(ener.get(
'nu', 0.29))
294 b0_key =
'b0_fission' if 'fiss' in spec
else 'b0_fusion'
295 b0_res = float(re.get(b0_key, 0.01
if 'fiss' in spec
else 0.10))
301 inv_Omega23 = Omega**(-2.0 / 3.0)
307 return A_sph * float(m)**(1.0/3.0) * D * inv_Omega23
311 return A_loop * float(n)**(1.0/2.0) * Z_i_loop * Di_eff * inv_Omega23
315 K_iv_scalar = A_iv * (Di_eff + Dv_eff) * inv_Omega23
320 denom = 1.0 + B_rot * L_hat**2 * float(m)**(-1.0/3.0)
321 return A_sph * float(m)**(1.0/3.0) * D1D(n) * inv_Omega23 / denom
327 Eb = E_b_loop_i(n, A_111, B_111, A_100, B_100, n_tr, sigma_tr,
328 E_f_i=E_f_i, G_shear=mu_Pa, b_111=b_111,
329 nu=nu_pois, gamma_sf=gamma_sf, Omega=Omega)
330 return A_sph * max(n - 1.0, 0.0)**(1.0/3.0) * Di_eff * np.exp(-Eb / kBT) * inv_Omega23
336 Eb = E_b_void(m, E_f_v, gamma_s, Omega,
337 lambda_void=lambda_void, A_void_0=A_void_0)
338 return A_sph * max(m - 1.0, 0.0)**(1.0/3.0) * Dv_eff * np.exp(-Eb / kBT) * inv_Omega23
341 def alpha_bubble(m, ell):
344 Eb = E_b_bubble(m, ell, E_f_v, gamma_s, Omega, T)
346 return A_sph * max(m - 1.0, 0.0)**(1.0/3.0) * Dv_eff * np.exp(-Eb / kBT) * inv_Omega23
349 def alpha_He_emit(m, ell):
352 from .binding_energies
import E_b_He
353 Eb = E_b_He(m, ell, E_s_He, Omega, T)
355 return A_sph * max(m - 1.0, 0.0)**(1.0/3.0) * Dh_eff * np.exp(-Eb / kBT) * inv_Omega23
358 ns = np.arange(1, I + 1, dtype=float)
363 def Di_cluster_3D(n):
364 return Di_eff / float(n)**s_3D
368 rot_factor = 1.0 + B_rot * L_hat**2
392 sia_D_flat = int(
_num(re.get(
'sia_D_flat', 0), 0))
430 Z_loop_model = int(
_num(re.get(
'Z_loop_model', 0), 0))
431 r_cap_i_b = float(
_num(re.get(
'r_cap_i_b', 3.0), 3.0))
432 r_cap_v_b = float(
_num(re.get(
'r_cap_v_b', 1.0), 1.0))
435 """Radius of a prismatic loop of n SIAs: pi r^2 = n*Omega/b."""
436 return np.sqrt(max(n, 1.0) * Omega / (np.pi * b_111))
438 def _Z_wolfer(n, r_cap_b):
439 """Z_j^loop(r_L) = ln(8 r_L / r_0) / ln(8 r_L / r_c^j), r_0 = b."""
443 x0, xj = 8.0 * r_L / r0, 8.0 * r_L / rc
445 if xj <= 1.05
or x0 <= 1.0:
447 return float(min(np.log(x0) / np.log(xj), _Z_WOLFER_MAX))
460 K_SIA_grow_arr = np.zeros(I)
461 for ni
in range(1, I + 1):
462 Zi_n = (_Z_wolfer(ni, r_cap_i_b)
if Z_loop_model
else Z_i_loop)
463 if ni < 4
and not sia_D_flat:
464 K_SIA_grow_arr[ni - 1] = K_sph(Di_eff, ni)
468 D_n_3D = Di_eff
if sia_D_flat
else D1D(ni) / rot_factor
469 K_SIA_grow_arr[ni - 1] = (A_loop * float(ni)**0.5
470 * Zi_n * (Di_eff + D_n_3D) * inv_Omega23)
472 K_SIA_grow_arr[ni - 1] = (A_loop * float(ni)**0.5
473 * Zi_n * Di_eff * inv_Omega23)
476 [(_Z_wolfer(ni, r_cap_i_b)
if Z_loop_model
else Z_i_loop)
477 for ni
in range(1, I + 1)])
480 K_SIA_loop_arr = np.zeros(I)
481 for ni
in range(1, I + 1):
483 K_SIA_loop_arr[ni - 1] = K_loop(ni)
485 D_n_3D = D1D(ni) / rot_factor
486 K_SIA_loop_arr[ni - 1] = (A_loop * float(ni)**0.5
487 * Z_i_loop * D_n_3D * inv_Omega23)
489 K_SIA_loop_arr[ni - 1] = K_loop(ni)
495 K_SIA_shrink_arr = np.zeros(I)
496 for ni
in range(1, I + 1):
500 Zv_n = (_Z_wolfer(ni, r_cap_v_b)
if Z_loop_model
else 1.0)
501 if ni < 4
and not sia_D_flat:
502 K_SIA_shrink_arr[ni - 1] = K_sph(Dv_eff, ni)
504 D_n_3D = Di_eff
if sia_D_flat
else D1D(ni) / rot_factor
505 K_SIA_shrink_arr[ni - 1] = (A_loop * float(ni)**0.5
506 * Zv_n * (Dv_eff + D_n_3D) * inv_Omega23)
508 K_SIA_shrink_arr[ni - 1] = (A_loop * float(ni)**0.5
509 * Zv_n * Dv_eff * inv_Omega23)
513 self.
G_SIA = np.array([alpha_loop(n)
for n
in ns])
523 for n
in range(1, I + 1):
525 om = omega_i / float(n)**s_3D
528 om = D1D(n) / (a_m**2 * rot_factor)
531 k2_d = Z_i * rho_d * om * a_m**2
532 k2_gb = Z_gb_i * np.pi**2 * (om * a_m**2) / d_g**2
533 k2_p = A_PREC * Z_p_i * rho_p * r_p * (om * a_m**2)
534 k2_SIA[n - 1] = (k2_d + k2_gb + k2_p)
540 K_1D_pref = np.zeros(I)
541 for n
in range(1, I + 1):
542 if n <= i_mobile
and n >= 4:
543 K_1D_pref[n - 1] = A_sph * D1D(n) * inv_Omega23
547 ms = np.arange(1, V + 1, dtype=float)
556 self.
K_HeV = np.array([K_sph(Dh_eff, m)
for m
in ms])
559 self.
G_VAC = np.array([alpha_void(m)
for m
in ms])
562 k2_d_v = Z_v * rho_d * Dv_eff
563 k2_gb_v = Z_gb_v * np.pi**2 * Dv_eff / d_g**2
564 k2_p_v = A_PREC * Z_p_v * rho_p * r_p * Dv_eff
568 k2_d_h = Z_He * rho_d * Dh_eff
569 k2_gb_h = np.pi**2 * Dh_eff / d_g**2
573 k2_d_i = Z_i * rho_d * Di_eff
574 k2_gb_i = Z_gb_i * np.pi**2 * Di_eff / d_g**2
575 k2_p_i = A_PREC * Z_p_i * rho_p * r_p * Di_eff
598 D_SIA_eff = np.zeros(I)
599 for n
in range(1, I + 1):
603 D_SIA_eff[n - 1] = Di_eff
605 D_SIA_eff[n - 1] = Di_cluster_3D(n)
607 D_SIA_eff[n - 1] = D1D(n) / rot_factor
627 D_loop_coal = np.zeros(I)
629 for n
in range(1, I + 1):
631 D_loop_coal[n - 1] = Di_cluster_3D(n)
633 D_loop_coal[n - 1] = D1D(n) / rot_factor
639 s_vc = float(diff.get(
's_vc', 1.0))
640 D_VAC_eff = np.zeros(V)
641 for m
in range(1, V + 1):
643 D_VAC_eff[m - 1] = Dv_eff / float(m) ** s_vc
657 T_star_C=float(re.get(
'T_star_conv_C', 450.0)),
658 n_ref=float(re.get(
'n_ref_conv', 30.0)))
665 n_loop_min = int(re.get(
'n_loop_min', 4))
670 E_a0 = float(re.get(
'E_a0_conv', 1.8))
671 gamma_a = float(re.get(
'gamma_a_conv', 0.03))
672 nu0_conv = float(re.get(
'nu0_conv', 1.0e13))
673 dF = le.driving_force_array(T, I)
674 P111 = np.asarray(le.perimeter(ns, 111), dtype=float)
675 E_a = E_a0 + gamma_a * P111 / le.b_111
680 gate[pos] = 1.0 - np.exp(-dF[pos] / kBT)
681 Gamma_uni = nu0_conv * np.exp(-E_a / kBT) * gate
683 Gamma_uni[:max(n_loop_min - 1, 0)] = 0.0
695 phi_max = float(re.get(
'phi_max_junc', 0.5))
696 sigma_s = float(re.get(
'sigma_s_junc', 0.35))
701 re.get(
'n_j_min_frac', 0.6))
710 dH2_conv = float(re.get(
'dH2_conv', 1.0))
711 dH_rev_conv = float(re.get(
'dH_rev_conv', 0.30))
712 ef = np.exp(-dH2_conv / kBT)
713 eb = np.exp(-dH_rev_conv / kBT)
740 dH2_abs = float(
_num(re.get(
'dH2_abs_conv', dH2_conv), dH2_conv))
741 A_abs = float(
_num(re.get(
'psucc_abs_pref', 1.0), 1.0))
742 ef_abs = np.exp(-dH2_abs / kBT)
754 K100_grow = np.zeros(I)
755 K100_shrink = np.zeros(I)
764 grow_boost_100 = float(re.get(
'grow_boost_100', 1.0)
or 1.0)
765 for n
in range(1, I + 1):
768 K100_grow[n - 1] = (A_loop * rt * Z_i_loop * Di_eff
769 * inv_Omega23 * grow_boost_100)
770 K100_shrink[n - 1] = A_loop * rt * Dv_eff * inv_Omega23
772 Eb100 = E_b_loop_100(n, A_100=A_100, B_100=B_100,
773 n_tr=n_tr, sigma_tr=sigma_tr,
774 E_f_i=E_f_i, G_shear=mu_Pa, b_100=a_m,
775 nu=nu_pois, gamma_sf=gamma_sf, Omega=Omega)
776 G100[n - 1] = (A_loop * max(n - 1.0, 0.0) ** 0.5 * Di_eff
777 * np.exp(-Eb100 / kBT) * inv_Omega23)
797 ns_f = np.arange(1.0, I + 1.0)
800 self.
d_loop_111 = 2.0 * np.sqrt(ns_f * Omega / (np.pi * b_111))
801 self.
d_loop_100 = 2.0 * np.sqrt(ns_f * Omega / (np.pi * b_100_val))
814 chi =
_num(re.get(
'loop_net_chi', 1.0), 1.0)
815 xi =
_num(re.get(
'loop_net_xi', 0.0), 0.0)
816 n_inc = int(
_num(re.get(
'loop_net_n_inc', i_mobile), i_mobile))
821 self.
K_rec =
_num(re.get(
'loop_net_K_rec', 0.0), 0.0)
834 ci1 = float(re.get(
'ci1_seg', 0.0))
835 cv1 = float(re.get(
'cv1_seg', 0.0))
836 v_net = (a_m ** 2 / b_111) * (Z_i * omega_i * ci1 - Z_v * omega_v * cv1)
838 L_ld = rho_net ** -0.5
if rho_net > 0.0
else np.inf
840 def _lambda_net(d_arr, b_c, w_c):
843 R_int = R_int + xi * b_c * np.sqrt(
844 mu_Pa * Omega * _J_eV * ns_f / max(kBT, 1e-30))
845 s_ld = np.maximum(b_c, L_ld - 0.5 * d_arr)
846 P_ld = 0.5 * (1.0 + np.tanh((R_int - s_ld) / b_c))
847 Lam = (v_net * rho_net * w_c) * P_ld
849 Lam[:min(n_inc - 1, I)] = 0.0
856 w_c_111 = w_c_over
if w_c_over
is not None else b_111
857 w_c_100 = w_c_over
if w_c_over
is not None else b_100_val
895 v_chi =
_num(re.get(
'void_net_chi', 1.0), 1.0)
899 m_inc = int(
_num(re.get(
'void_net_m_inc', v_mobile), v_mobile))
903 ci1_v = float(re.get(
'ci1_seg', 0.0))
904 cv1_v = float(re.get(
'cv1_seg', 0.0))
905 v_net_v = abs((a_m ** 2 / b_111)
906 * (Z_i * omega_i * ci1_v - Z_v * omega_v * cv1_v))
907 self.
L_ld_void = rho_n ** -0.5
if rho_n > 0.0
else np.inf
910 d_cav = 2.0 * (3.0 * ms * Omega / (4.0 * np.pi)) ** (1.0 / 3.0)
914 w_arr = d_cav
if w_c_v
is None else np.full(V, w_c_v)
924 Lam_v = (v_net_v * rho_n) * (v_chi * w_arr)
929 Lam_v[:min(m_inc, V)] = 0.0