-
Notifications
You must be signed in to change notification settings - Fork 0
/
compute.py
95 lines (66 loc) · 2.75 KB
/
compute.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import os
from pfac import fac
from label import get_ion_states_label_list
def default_fname(elem: str, n_elec: int, uta: int) -> str:
match uta:
case 0:
return f"{elem}_{n_elec:02}_DLA"
case 1:
return f"{elem}_{n_elec:02}_DCA"
case _:
raise Exception(f"{uta} is not a valid UTA flag.")
def add_lev_to_econfig(config_label_list: list[str]) -> None:
for label in config_label_list:
if label == "naked":
fac.Config(" ", group=label)
continue
fac_config = " ".join(label.split("."))
fac.Config(fac_config, group=label)
def prepare_fac_setup(elem: str, uta_flag: 0 | 1, ci_flag: int):
fac.Reinit(0)
fac.SetAtom(elem)
fac.SetCILevel(ci_flag)
fac.SetUTA(uta_flag)
def compute_lev(elem: str, nelec: int, uta_flag: 0 | 1, ci_flag: int) -> None:
label_list = get_ion_states_label_list(nelec)
prepare_fac_setup(elem, uta_flag, ci_flag)
add_lev_to_econfig(label_list)
fac.ConfigEnergy(0)
fac.OptimizeRadial(label_list[0])
fac.ConfigEnergy(1)
fname = default_fname(elem, nelec, uta_flag)
fpath = os.path.join(os.getcwd(), fname)
fac.Structure(fpath + ".lev.b", label_list)
fac.MemENTable(fpath + ".lev.b")
fac.PrintTable(fpath + ".lev.b", fpath + ".lev", 1)
def compute_tr(elem: str, nelec: int, uta_flag: 0 | 1, ci_flag: int) -> None:
label_list = get_ion_states_label_list(nelec)
prepare_fac_setup(elem, uta_flag, ci_flag)
add_lev_to_econfig(label_list)
fac.ConfigEnergy(0)
fac.OptimizeRadial(label_list[0])
fac.ConfigEnergy(1)
fname = default_fname(elem, nelec, uta_flag)
fpath = os.path.join(os.getcwd(), fname)
fac.Structure(fpath + ".lev.b", label_list)
fac.MemENTable(fpath + ".lev.b")
fac.PrintTable(fpath + ".lev.b", fpath + ".lev", 1)
fac.TransitionTable(fpath + ".tr.b", label_list, label_list)
fac.PrintTable(fpath + ".tr.b", fpath + ".tr")
def compute_rr(elem: str, nelec: int, uta_flag: 0 | 1, ci_flag: int) -> None:
upp_label_list = get_ion_states_label_list(nelec - 1)
low_label_list = get_ion_states_label_list(nelec)
prepare_fac_setup(elem, uta_flag, ci_flag)
add_lev_to_econfig(upp_label_list)
add_lev_to_econfig(low_label_list)
fac.ConfigEnergy(0)
fac.OptimizeRadial(low_label_list[0])
fac.ConfigEnergy(1)
fname = default_fname(elem, nelec, uta_flag)
fpath = os.path.join(os.getcwd(), fname)
fac.Structure(fpath + ".lev.b", upp_label_list)
fac.Structure(fpath + ".lev.b", low_label_list)
fac.MemENTable(fpath + ".lev.b")
fac.PrintTable(fpath + ".lev.b", fpath + ".lev", 1)
fac.RRTable(fpath + ".pi.b", low_label_list, upp_label_list)
fac.PrintTable(fpath + ".pi.b", fpath + ".pi", 1)