Added pre-defined CASMO energy group structures to openmx.mgxs module

This commit is contained in:
Will Boyd 2018-10-28 20:05:57 -04:00
parent 4ae02e3c1b
commit f52d2ac18c

View file

@ -77,6 +77,68 @@ class EnergyGroups(object):
cv.check_greater_than('number of group edges', len(edges), 1)
self._group_edges = np.array(edges)
@staticmethod
def get_energy_groups(name):
"""Returns one of many commonly used and energy group structures.
Parameters
----------
name : str
The name of the energy group structure. Pre-defined structures
include "CASMO-X" (where X is 2, 4, 8, 16, 25, 40 or 70).
Returns
-------
EnergyGroups
The energy group structure
"""
if name == "CASMO-2":
group_edges = np.array([
0., 6.25e-1, 2.e7])
elif name == "CASMO-4":
group_edges = np.array([
0., 6.25e-1, 5.53e3, 8.21e5, 2.e7])
elif name == "CASMO-8":
group_edges = np.array([
0., 5.8e-2, 1.4e-1, 2.8e-1, 6.25e-1, 4., 5.53e3, 8.21e5, 2.e7])
elif name == "CASMO-16":
group_edges = np.array([
0., 3.e-2, 5.8e-2, 1.4e-1, 2.8e-1, 3.5e-1, 6.25e-1, 8.5e-1,
9.72e-1, 1.02, 1.097, 1.15, 1.3, 4., 5.53e3, 8.21e5, 2.e7])
elif name == "CASMO-25":
group_edges = np.array([
0., 3.e-2, 5.8e-2, 1.4e-1, 2.8e-1, 3.5e-1, 6.25e-1, 9.72e-1,
1.02, 1.097, 1.15, 1.855, 4., 9.877, 1.5968e1, 1.4873e2,
5.53e3, 9.118e3, 1.11e5, 5.e5, 8.21e5, 1.353e6, 2.231e6,
3.679e6, 6.0655e6, 2.e7])
elif name == "CASMO-40":
group_edges = np.array([
0., 1.5e-2, 3.e-2, 4.2e-2, 5.8e-2, 8.e-2, 1.e-1, 1.4e-1,
1.8e-1, 2.2e-1, 2.8e-1, 3.5e-1, 6.25e-1, 8.5e-1, 9.5e-1,
9.72e-1, 1.02, 1.097, 1.15, 1.3, 1.5, 1.855, 2.1, 2.6, 3.3, 4.,
9.877, 1.5968e1, 2.77e1, 4.8052e1, 1.4873e2, 5.53e3, 9.118e3,
1.11e5, 5.e5, 8.21e5, 1.353e6, 2.231e6, 3.679e6, 6.0655e6,
2.e7])
elif name == "CASMO-70":
group_edges = np.array([
0., 5.e-3, 1.e-2, 1.5e-2, 2.e-2, 2.5e-2, 3.e-2, 3.5e-2, 4.2e-2,
5.e-2, 5.8e-2, 6.7e-2, 8.e-2, 1.e-1, 1.4e-1, 1.8e-1, 2.2e-1,
2.5e-1, 2.8e-1, 3.e-1, 3.2e-1, 3.5e-1, 4.e-1, 5.e-1, 6.25e-1,
7.8e-1, 8.5e-1, 9.1e-1, 9.5e-1, 9.72e-1, 9.96e-6, 1.02, 1.045,
1.071, 1.097, 1.123, 1.15, 1.3, 1.5, 1.855, 2.1, 2.6, 3.3, 4.,
9.877, 1.5968e1, 2.77e1, 4.8052e1, 7.5501e1, 1.4873e2,
3.6726e2, 9.069e-2, 1.4251e3, 2.2395e3, 3.5191e3, 5.53e3,
9.1183e3, 1.503e4, 2.478e4, 4.085e4, 6.734e4, 1.11e5, 1.83e5,
3.025e5, 5.e5, 8.21e5, 1.353e6, 2.231e6, 3.679e6, 6.0655e6,
2.e7])
else:
raise ValueError(f"Energy group structure \"{name}\" is not recognized")
energy_groups = EnergyGroups(group_edges)
return energy_groups
def get_group(self, energy):
"""Returns the energy group in which the given energy resides.