create_spontaneous_fission_file.py
Go to the documentation of this file.
1 # Author: Moritz Reichert
2 # Date: 15.03.2023
3 #
4 # This file will create a file that contains entries for
5 # spontaneous fission reactions. These entries have to be copied
6 # into the fission rates file (e.g., fissionrates_frdm).
7 # To create the file here we use the fission barriers from
8 # Moeller et al. 2015 https://journals.aps.org/prc/supplemental/10.1103/PhysRevC.91.024310 and
9 # the FRDM fit of Khuyagbaatar 2020 (https://ui.adsabs.harvard.edu/abs/2020NuPhA100221958K/abstract)
10 # In contrast to Khuyagbaatar 2020, we also include odd nuclei, not only even ones.
11 # Additionally we add experimentally determined rates that can be accessed from the ENDFS database
12 # https://www-nds.iaea.org/relnsd/v1/data?fields=ground_states&nuclides=all.
13 # It is in principle possible to also create spontaneous fission rates for the ETFSI model, but the
14 # here used fit has to be changed and the correct fission barriers have to be used.
15 import numpy as np
16 import pandas as pd
17 from nucleus_class import nucleus
18 
19 
20 # Path to the fission barriers.
21 path_barriers = 'fission_barriers_frdm.dat'
22 
23 # Path to experimental spontaneous fission half-lives
24 path_exp_halflifes = 'sf_halflife.csv'
25 
26 # Read the fission barriers of frdm. They can be accessed at
27 # https://journals.aps.org/prc/supplemental/10.1103/PhysRevC.91.024310
28 Z,N,A,B=np.loadtxt(path_barriers,unpack=True)
29 
30 
31 # Read the experimental spontaneous fission half-lives.
32 df = pd.read_csv(path_exp_halflifes)
33 df['sf_halflife'] = pd.to_numeric(df['sf_halflife'],errors='coerce')
34 df = df[np.isfinite(df['sf_halflife'])]
35 hl_exp = df['sf_halflife'].values
36 
37 
38 def T05(Z,N,B):
39  """
40  Calculate the half-life as in Khuyagbaatar 2020.
41  The link to the paper is the following:
42  https://ui.adsabs.harvard.edu/abs/2020NuPhA100221958K/abstract
43  Here, we use the fit of the FRDM data (Eq. 3) in combination with
44  Eq. 1 and 2.
45  """
46  A = Z+N
47  hqueromega = 0.14025*Z**2/A-4.6335
48  T = (1+np.exp(np.pi*2*B/hqueromega))**(-1)
49  hquer = 6.582119514e-16
50  n = hqueromega/hquer/(2*np.pi)
51  # n=1e14
52  Tsf = np.log(2)/(n*T)
53  # Negative values can happen due to hqueromega being negative.
54  # These cases have an infinite half-life.
55  if Tsf<0:
56  Tsf = np.inf
57  return Tsf
58 
59 
60 
61 # Create lists for the half-lifes and nuclei names
62 t05 = []
63 nuc = []
64 
65 # Proton number range for spontaneous
66 # fission half-lives.
67 zmin = 90
68 zmax = 112
69 
70 # Loop through the half-lives and create a new array
71 # containing them. Put experimental ones whenever possible.
72 for ind,ztmp in enumerate(Z):
73  # Skip irrelevant nuclei
74  if (ztmp>zmax) or (ztmp <zmin):
75  continue
76  # Get the name of the nucleus
77  nuc.append(nucleus(Z=int(Z[ind]),N=int(N[ind])).get_name())
78  # Check if experimental half-life is available
79  if np.any((df["z"]==ztmp) & (df["n"]==N[ind])):
80  ht = hl_exp[(df["z"]==ztmp) & (df["n"]==N[ind])][0]
81  # Check if the value is not nan
82  if not np.isnan(ht):
83  t05.append(float(ht))
84  else:
85  t05.append(T05(ztmp,N[ind],B[ind]))
86  else:
87  t05.append(T05(ztmp,N[ind],B[ind]))
88 
89 
90 # Create the reaclib file
91 out = ''
92 # Maximum half-life to be considered
93 # 1e25s = 3.17e17 years
94 thalf_max = 1e25
95 # Minimum cut-off half-life for too short half-lives
96 # Note that too fast rates will mess up the network equations
97 # and lead to a crash
98 thalf_min = 1e-15
99 
100 # Loop through the half-lives and create the reaclib file
101 for ind,n in enumerate(nuc):
102  if t05[ind]>thalf_max:
103  continue
104  if t05[ind]<thalf_min:
105  t05[ind]=thalf_min
106 
107  # Calculate reaclib parameter
108  a0 = np.log(np.log(2)/t05[ind])
109  # Create the entry in correct format
110  out += ' '+n.rjust(5)+33*' '+'sfis'+4*' '+'{:13.6e}'.format(0)+'\n'
111  out += '{:13.6e}'.format(a0)+3*'{:13.6e}'.format(0)+'\n'
112  out += 3*'{:13.6e}'.format(0)+'\n'
113 
114 
115 # Write the file
116 with open("frdm_sfis.dat","w") as f:
117  f.write(out)
bin.create_spontaneous_fission_file.T05
def T05(Z, N, B)
Definition: create_spontaneous_fission_file.py:38
bin.create_alpha_decay_file.get_name
def get_name(Z, N, Zdict, Ndict)
Definition: create_alpha_decay_file.py:116