TB2J 0.9.12.9__py3-none-any.whl → 0.9.12.13__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- TB2J/.gitignore +5 -0
- TB2J/io_exchange/io_espins.py +276 -0
- TB2J/io_exchange/io_exchange.py +10 -2
- TB2J/io_exchange/io_vampire.py +3 -1
- TB2J/rotate_atoms.py +9 -6
- TB2J/symmetrize_J.py +2 -2
- {tb2j-0.9.12.9.dist-info → tb2j-0.9.12.13.dist-info}/METADATA +2 -2
- {tb2j-0.9.12.9.dist-info → tb2j-0.9.12.13.dist-info}/RECORD +12 -10
- {tb2j-0.9.12.9.dist-info → tb2j-0.9.12.13.dist-info}/WHEEL +0 -0
- {tb2j-0.9.12.9.dist-info → tb2j-0.9.12.13.dist-info}/entry_points.txt +0 -0
- {tb2j-0.9.12.9.dist-info → tb2j-0.9.12.13.dist-info}/licenses/LICENSE +0 -0
- {tb2j-0.9.12.9.dist-info → tb2j-0.9.12.13.dist-info}/top_level.txt +0 -0
TB2J/.gitignore
ADDED
@@ -0,0 +1,276 @@
|
|
1
|
+
import os
|
2
|
+
|
3
|
+
import numpy as np
|
4
|
+
|
5
|
+
|
6
|
+
def _get_shell_index(cls, key):
|
7
|
+
"""Determine shell index based on distance grouping.
|
8
|
+
|
9
|
+
Parameters
|
10
|
+
----------
|
11
|
+
cls : SpinIO
|
12
|
+
SpinIO instance
|
13
|
+
key : tuple
|
14
|
+
(R, i, j) key for exchange parameter
|
15
|
+
|
16
|
+
Returns
|
17
|
+
-------
|
18
|
+
int
|
19
|
+
Shell index (1 for nearest neighbors, 2 for next nearest, etc.)
|
20
|
+
"""
|
21
|
+
if not hasattr(cls, "_distance_shells"):
|
22
|
+
# Calculate all distances and group into shells
|
23
|
+
distances = []
|
24
|
+
for k in cls.exchange_Jdict:
|
25
|
+
if cls.distance_dict and k in cls.distance_dict:
|
26
|
+
distances.append(cls.distance_dict[k][1])
|
27
|
+
|
28
|
+
if distances:
|
29
|
+
# Sort distances and group by rounding to nearest 0.01 Å
|
30
|
+
sorted_distances = sorted(set(round(d * 100) for d in distances))
|
31
|
+
cls._distance_shells = {}
|
32
|
+
for shell_idx, dist_int in enumerate(sorted_distances, 1):
|
33
|
+
cls._distance_shells[dist_int / 100] = shell_idx
|
34
|
+
else:
|
35
|
+
cls._distance_shells = {}
|
36
|
+
|
37
|
+
if cls.distance_dict and key in cls.distance_dict:
|
38
|
+
distance = cls.distance_dict[key][1]
|
39
|
+
rounded_dist = round(distance * 100)
|
40
|
+
return cls._distance_shells.get(rounded_dist / 100, 1)
|
41
|
+
|
42
|
+
return 1
|
43
|
+
|
44
|
+
|
45
|
+
def write_espins(cls, path="TB2J_results/ESPInS"):
|
46
|
+
"""Write ESPInS format input files.
|
47
|
+
|
48
|
+
Parameters
|
49
|
+
----------
|
50
|
+
cls : SpinIO
|
51
|
+
SpinIO instance containing exchange parameters
|
52
|
+
path : str
|
53
|
+
Output directory path
|
54
|
+
"""
|
55
|
+
if not os.path.exists(path):
|
56
|
+
os.makedirs(path)
|
57
|
+
|
58
|
+
write_espins_input(cls, os.path.join(path, "espins.in"))
|
59
|
+
|
60
|
+
|
61
|
+
def write_espins_input(cls, fname):
|
62
|
+
"""Write the main ESPInS input file.
|
63
|
+
|
64
|
+
Parameters
|
65
|
+
----------
|
66
|
+
cls : SpinIO
|
67
|
+
SpinIO instance
|
68
|
+
fname : str
|
69
|
+
Output filename
|
70
|
+
"""
|
71
|
+
with open(fname, "w") as myfile:
|
72
|
+
# Write unit cell
|
73
|
+
myfile.write("! ESPInS input file generated by TB2J\n")
|
74
|
+
# myfile.write("! Compatible with ESPInS version > 1.0 \n")
|
75
|
+
myfile.write("! The unit cell in angstrom\n")
|
76
|
+
myfile.write("Begin Unit_Cell_Cart\n")
|
77
|
+
cell = cls.atoms.get_cell()
|
78
|
+
for i in range(3):
|
79
|
+
myfile.write(" " + " ".join(f"{x:12.8f}" for x in cell[i]) + "\n")
|
80
|
+
myfile.write("End Unit_Cell_Cart\n\n")
|
81
|
+
|
82
|
+
# Write atomic positions
|
83
|
+
myfile.write("! Atomic positions in reduced coordinates\n")
|
84
|
+
myfile.write("Begin Atoms_Frac\n")
|
85
|
+
scaled_positions = cls.atoms.get_scaled_positions()
|
86
|
+
symbols = cls.atoms.get_chemical_symbols()
|
87
|
+
|
88
|
+
for i, (symbol, pos) in enumerate(zip(symbols, scaled_positions)):
|
89
|
+
if cls.index_spin[i] >= 0: # Only magnetic atoms
|
90
|
+
myfile.write(
|
91
|
+
f" {symbol:<8} {pos[0]:10.7f} {pos[1]:10.7f} {pos[2]:10.7f} 1.00\n"
|
92
|
+
)
|
93
|
+
myfile.write("End Atoms_Frac\n\n\n")
|
94
|
+
|
95
|
+
# Write temperature settings (default values)
|
96
|
+
myfile.write("tem_start = 1\n")
|
97
|
+
myfile.write("tem_end = 30\n")
|
98
|
+
myfile.write("tems_num = 30\n")
|
99
|
+
# myfile.write("!! tems_mode = man\n")
|
100
|
+
# myfile.write("!! tems = 5.00 10.00 15.00 20.00\n\n")
|
101
|
+
|
102
|
+
# Write Monte Carlo parameters (default values)
|
103
|
+
myfile.write("! Pt = .True.\n")
|
104
|
+
myfile.write("! Pt_steps_swap = 40\n\n")
|
105
|
+
|
106
|
+
myfile.write("steps_warmup = 100000\n")
|
107
|
+
myfile.write("steps_mc = 100000\n")
|
108
|
+
myfile.write("steps_measure = 2\n\n")
|
109
|
+
|
110
|
+
myfile.write("initial_sconfig = ferro\n")
|
111
|
+
myfile.write("mcarlo_mode = random\n\n")
|
112
|
+
|
113
|
+
myfile.write("supercell_size = 10 10 1\n\n")
|
114
|
+
|
115
|
+
# Write Hamiltonian settings
|
116
|
+
myfile.write(" ## Hamiltonian\n")
|
117
|
+
myfile.write("Ham_bij = .False.\n")
|
118
|
+
myfile.write("Ham_jij_matrix = .True.\n")
|
119
|
+
myfile.write("! We don't have single ion anisotropy, put it to .False.\n")
|
120
|
+
myfile.write("Ham_singleion_matrix = .False.\n\n\n")
|
121
|
+
|
122
|
+
# Write single ion anisotropy matrix if available
|
123
|
+
# if cls.has_uniaxial_anistropy:
|
124
|
+
# myfile.write("! Don't put this block\n")
|
125
|
+
# myfile.write("!Begin SingleIon_Matrix\n")
|
126
|
+
# # Placeholder for single ion anisotropy
|
127
|
+
# myfile.write("@Axx=0.000 , Axy=-1.65e-07 , Axz=6e-08 , Ayx=-1.65e-07 , Ayy=7.73e-05 , Ayz=-1.5e-05 , Azx=6e-08 , Azz= 6.8e-05\n")
|
128
|
+
# myfile.write("!End SingleIon_Matrix\n\n")
|
129
|
+
|
130
|
+
# Write exchange parameters
|
131
|
+
myfile.write(
|
132
|
+
"""! f1 is the fractional coordinate of atom i, and f2 is of atom j (rj+Rj). Then jij in eV, sh is index of shell, t1 is index of i, t2 is index of j (counting from 1). \n
|
133
|
+
!The convention of the Hamiltonian is H = - sum_<ij> Jij Si Sj, and i, j are ordererd so that there is no double counting (ij and ji). To convert from TB2J exchange.out (which has both ij and ji), multiply Jij by 2. \n
|
134
|
+
\n"""
|
135
|
+
)
|
136
|
+
|
137
|
+
if cls.has_exchange:
|
138
|
+
myfile.write("Begin Jij_parameters\n")
|
139
|
+
|
140
|
+
# Create a list of unique exchange parameters sorted by distance
|
141
|
+
exchange_list = []
|
142
|
+
# written_keys = set()
|
143
|
+
|
144
|
+
for key, jval in cls.exchange_Jdict.items():
|
145
|
+
R, i, j = key
|
146
|
+
|
147
|
+
# Skip if this is the symmetric counterpart of an already written pair
|
148
|
+
# symmetric_key = (tuple(-np.array(R)), j, i)
|
149
|
+
# if symmetric_key in written_keys:
|
150
|
+
# continue
|
151
|
+
|
152
|
+
# Get distance for sorting
|
153
|
+
distance = (
|
154
|
+
cls.distance_dict[key][1]
|
155
|
+
if cls.distance_dict and key in cls.distance_dict
|
156
|
+
else 0.0
|
157
|
+
)
|
158
|
+
|
159
|
+
exchange_list.append((distance, key, jval))
|
160
|
+
# written_keys.add(key)
|
161
|
+
|
162
|
+
# Sort by distance
|
163
|
+
exchange_list.sort(key=lambda x: x[0])
|
164
|
+
|
165
|
+
for distance, key, jval in exchange_list:
|
166
|
+
R, i, j = key
|
167
|
+
iatom = cls.iatom(i)
|
168
|
+
jatom = cls.iatom(j)
|
169
|
+
|
170
|
+
# Get fractional coordinates
|
171
|
+
pos_i = cls.atoms.get_scaled_positions()[iatom]
|
172
|
+
pos_j = cls.atoms.get_scaled_positions()[jatom]
|
173
|
+
|
174
|
+
# Calculate fractional coordinates for j+R
|
175
|
+
pos_jR = pos_j + R
|
176
|
+
# Determine shell index based on distance
|
177
|
+
shell = _get_shell_index(cls, key)
|
178
|
+
|
179
|
+
myfile.write(
|
180
|
+
f" f1= {pos_i[0]:10.6f}, {pos_i[1]:10.6f}, {pos_i[2]:10.6f}:f2= {pos_jR[0]:10.6f}, {pos_jR[1]:10.6f}, {pos_jR[2]:10.6f}:jij= {jval*2:10.8f}!:sh= {shell}!:t1= {i+1}:t2= {j+1}\n"
|
181
|
+
)
|
182
|
+
|
183
|
+
myfile.write("End Jij_parameters\n\n")
|
184
|
+
|
185
|
+
# Write exchange matrix if available
|
186
|
+
if cls.has_exchange:
|
187
|
+
myfile.write(
|
188
|
+
"! Each matrix element is corresponding to the previous block. The J tensor include the isotropic, anisotropic exchange and DMI. \n"
|
189
|
+
)
|
190
|
+
myfile.write("Begin Jij_matrix\n")
|
191
|
+
|
192
|
+
# Create a list of unique exchange parameters sorted by distance
|
193
|
+
exchange_list = []
|
194
|
+
# written_keys = set()
|
195
|
+
|
196
|
+
for key in cls.exchange_Jdict:
|
197
|
+
R, i, j = key
|
198
|
+
|
199
|
+
# Skip if this is the symmetric counterpart of an already written pair
|
200
|
+
# symmetric_key = (tuple(-np.array(R)), j, i)
|
201
|
+
# if symmetric_key in written_keys:
|
202
|
+
# continue
|
203
|
+
|
204
|
+
# Get distance for sorting
|
205
|
+
distance = (
|
206
|
+
cls.distance_dict[key][1]
|
207
|
+
if cls.distance_dict and key in cls.distance_dict
|
208
|
+
else 0.0
|
209
|
+
)
|
210
|
+
|
211
|
+
exchange_list.append((distance, key))
|
212
|
+
# written_keys.add(key)
|
213
|
+
|
214
|
+
# Sort by distance
|
215
|
+
exchange_list.sort(key=lambda x: x[0])
|
216
|
+
|
217
|
+
for distance, key in exchange_list:
|
218
|
+
R, i, j = key
|
219
|
+
# Get full J tensor
|
220
|
+
J_tensor = cls.get_J_tensor(i, j, R, Jiso=True, Jani=True, DMI=True) * 2
|
221
|
+
|
222
|
+
# Format matrix elements exactly as in the example
|
223
|
+
myfile.write(
|
224
|
+
f"Jxx={J_tensor[0, 0]:.8f}, Jxy={J_tensor[0, 1]:.8f}, Jxz={J_tensor[0, 2]:.8f}, Jyx={J_tensor[1, 0]:.8f}, Jyy={J_tensor[1, 1]:.8f}, Jyz={J_tensor[1, 2]:.8f}, Jzx={J_tensor[2, 0]:.8f}, Jzy={J_tensor[2, 1]:.8f}, Jzz={J_tensor[2, 2]:.8f}\n"
|
225
|
+
)
|
226
|
+
|
227
|
+
myfile.write("End Jij_matrix\n\n")
|
228
|
+
|
229
|
+
# Write biquadratic exchange if available
|
230
|
+
# if cls.has_biquadratic and cls.biquadratic_Jdict:
|
231
|
+
if False:
|
232
|
+
myfile.write("! Biquadratic, don't put it. \n")
|
233
|
+
myfile.write("Begin Bij_parameters\n")
|
234
|
+
|
235
|
+
# Create a list of unique biquadratic parameters sorted by distance
|
236
|
+
biquadratic_list = []
|
237
|
+
written_keys = set()
|
238
|
+
|
239
|
+
for key, bval in cls.biquadratic_Jdict.items():
|
240
|
+
R, i, j = key
|
241
|
+
|
242
|
+
# Skip if this is the symmetric counterpart of an already written pair
|
243
|
+
symmetric_key = (tuple(-np.array(R)), j, i)
|
244
|
+
if symmetric_key in written_keys:
|
245
|
+
continue
|
246
|
+
|
247
|
+
# Get distance for sorting
|
248
|
+
distance = (
|
249
|
+
cls.distance_dict[key][1]
|
250
|
+
if cls.distance_dict and key in cls.distance_dict
|
251
|
+
else 0.0
|
252
|
+
)
|
253
|
+
|
254
|
+
biquadratic_list.append((distance, key, bval))
|
255
|
+
written_keys.add(key)
|
256
|
+
|
257
|
+
# Sort by distance
|
258
|
+
biquadratic_list.sort(key=lambda x: x[0])
|
259
|
+
|
260
|
+
for distance, key, bval in biquadratic_list:
|
261
|
+
R, i, j = key
|
262
|
+
iatom = cls.iatom(i)
|
263
|
+
jatom = cls.iatom(j)
|
264
|
+
|
265
|
+
# Get fractional coordinates
|
266
|
+
pos_i = cls.atoms.get_scaled_positions()[iatom]
|
267
|
+
pos_j = cls.atoms.get_scaled_positions()[jatom]
|
268
|
+
|
269
|
+
# Calculate fractional coordinates for j+R
|
270
|
+
pos_jR = pos_j + np.dot(R, np.linalg.inv(cls.atoms.get_cell()))
|
271
|
+
|
272
|
+
myfile.write(
|
273
|
+
f" f1= {pos_i[0]:10.6f}, {pos_i[1]:10.6f}, {pos_i[2]:10.6f}:f2= {pos_jR[0]:10.6f}, {pos_jR[1]:10.6f}, {pos_jR[2]:10.6f}:bij= {bval:10.6f} !t1= {i+1}:t2= {j+1}\n"
|
274
|
+
)
|
275
|
+
|
276
|
+
myfile.write("End Bij_parameters\n")
|
TB2J/io_exchange/io_exchange.py
CHANGED
@@ -149,6 +149,7 @@ class SpinIO(object):
|
|
149
149
|
self.has_biquadratic = not (
|
150
150
|
biquadratic_Jdict == {} or biquadratic_Jdict is None
|
151
151
|
)
|
152
|
+
|
152
153
|
self.biquadratic_Jdict = biquadratic_Jdict
|
153
154
|
|
154
155
|
if NJT_ddict is not None:
|
@@ -459,9 +460,10 @@ Generation time: {now.strftime("%y/%m/%d %H:%M:%S")}
|
|
459
460
|
if asr:
|
460
461
|
iR0 = np.argmin(np.linalg.norm(self.Rlist, axis=1))
|
461
462
|
assert np.linalg.norm(self.Rlist[iR0]) == 0
|
462
|
-
sum_JR = np.sum(np.sum(Jmat, axis=0))
|
463
|
+
sum_JR = np.sum(np.sum(Jmat, axis=0), axis=0)
|
464
|
+
print(sum_JR)
|
463
465
|
for i in range(n3):
|
464
|
-
Jmat[iR0][i, i] -=
|
466
|
+
Jmat[iR0][i, i] -= sum_JR[i]
|
465
467
|
elif order == "ij":
|
466
468
|
Jmat = np.zeros((nR, n, n), dtype=float)
|
467
469
|
for iR, R in enumerate(self.Rlist):
|
@@ -521,6 +523,7 @@ Generation time: {now.strftime("%y/%m/%d %H:%M:%S")}
|
|
521
523
|
self.write_multibinit(path=os.path.join(path, "Multibinit"))
|
522
524
|
self.write_tom_format(path=os.path.join(path, "TomASD"))
|
523
525
|
self.write_vampire(path=os.path.join(path, "Vampire"))
|
526
|
+
self.write_espins(path=os.path.join(path, "ESPInS"))
|
524
527
|
|
525
528
|
self.plot_all(savefile=os.path.join(path, "JvsR.pdf"))
|
526
529
|
# self.write_Jq(kmesh=[9, 9, 9], path=path)
|
@@ -684,6 +687,11 @@ Generation time: {now.strftime("%y/%m/%d %H:%M:%S")}
|
|
684
687
|
|
685
688
|
write_uppasd(self, path=path)
|
686
689
|
|
690
|
+
def write_espins(self, path):
|
691
|
+
from TB2J.io_exchange.io_espins import write_espins
|
692
|
+
|
693
|
+
write_espins(self, path=path)
|
694
|
+
|
687
695
|
|
688
696
|
def gen_distance_dict(ind_mag_atoms, atoms, Rlist):
|
689
697
|
distance_dict = {}
|
TB2J/io_exchange/io_vampire.py
CHANGED
@@ -66,7 +66,7 @@ def write_vampire_unitcell_file(cls, fname):
|
|
66
66
|
|
67
67
|
def write_vampire_mat_file(cls, fname):
|
68
68
|
mat_tmpl = """#---------------------------------------------------
|
69
|
-
# Material {id}
|
69
|
+
# Material {id}
|
70
70
|
#---------------------------------------------------
|
71
71
|
material[{id}]:material-name={name}
|
72
72
|
material[{id}]:damping-constant={damping}
|
@@ -75,6 +75,8 @@ material[{id}]:uniaxial-anisotropy-constant={k1}
|
|
75
75
|
material[{id}]:material-element={name}
|
76
76
|
material[{id}]:initial-spin-direction = {spinat}
|
77
77
|
material[{id}]:uniaxial-anisotropy-direction = {k1dir}
|
78
|
+
# The following line is required for vampire 5 and later.
|
79
|
+
material[{id}]:unit-cell-category = {id}
|
78
80
|
#---------------------------------------------------
|
79
81
|
"""
|
80
82
|
with open(fname, "w") as myfile:
|
TB2J/rotate_atoms.py
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
#!/usr/bin/env python3
|
2
2
|
import copy
|
3
|
-
|
3
|
+
|
4
4
|
import numpy as np
|
5
|
+
from ase.io import read, write
|
5
6
|
from TB2J.tensor_rotate import Rzx, Rzy, Rzz
|
6
7
|
|
7
8
|
|
@@ -15,14 +16,16 @@ def rotate_atom_xyz(atoms, noncollinear=False):
|
|
15
16
|
will be generated.
|
16
17
|
"""
|
17
18
|
|
19
|
+
yield atoms
|
18
20
|
rotation_axes = [(1, 0, 0), (0, 1, 0)]
|
19
21
|
if noncollinear:
|
20
22
|
rotation_axes += [(1, 1, 0), (1, 0, 1), (0, 1, 1)]
|
21
|
-
|
23
|
+
|
22
24
|
for axis in rotation_axes:
|
23
25
|
rotated_atoms = copy.deepcopy(atoms)
|
24
26
|
rotated_atoms.rotate(90, axis, rotate_cell=True)
|
25
27
|
yield rotated_atoms
|
28
|
+
yield atoms
|
26
29
|
|
27
30
|
|
28
31
|
def rotate_atom_spin_one_rotation(atoms, Rotation):
|
@@ -109,7 +112,7 @@ def rotate_xyz(fname, ftype="xyz", noncollinear=False):
|
|
109
112
|
rotated = rotate_atom_xyz(atoms, noncollinear=noncollinear)
|
110
113
|
|
111
114
|
for i, rotated_atoms in enumerate(rotated):
|
112
|
-
write(f"atoms_{i
|
113
|
-
|
114
|
-
|
115
|
-
|
115
|
+
write(f"atoms_{i}.{ftype}", rotated_atoms)
|
116
|
+
print(
|
117
|
+
f"The output has been written to the atoms_i.{ftype} files. atoms_0.{ftype} contains the reference structure."
|
118
|
+
)
|
TB2J/symmetrize_J.py
CHANGED
@@ -33,7 +33,7 @@ class TB2JSymmetrizer:
|
|
33
33
|
print("Symmetry found:")
|
34
34
|
print(finder.spacegroup)
|
35
35
|
print("-" * 30)
|
36
|
-
self.pgdict = finder.
|
36
|
+
self.pgdict = finder.get_symmetry_pair_list_dict()
|
37
37
|
self.exc = exc
|
38
38
|
self.new_exc = copy.deepcopy(exc)
|
39
39
|
self.Jonly = Jonly
|
@@ -48,7 +48,7 @@ class TB2JSymmetrizer:
|
|
48
48
|
symJdict = {}
|
49
49
|
# Jdict = self.exc.exchange_Jdict
|
50
50
|
# ngroup = self.pgdict
|
51
|
-
for pairgroup in self.pgdict.
|
51
|
+
for pairgroup in self.pgdict.pairlists:
|
52
52
|
ijRs = pairgroup.get_all_ijR()
|
53
53
|
ijRs_spin = [self.exc.ijR_index_atom_to_spin(*ijR) for ijR in ijRs]
|
54
54
|
Js = [self.exc.get_J(*ijR_spin) for ijR_spin in ijRs_spin]
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: TB2J
|
3
|
-
Version: 0.9.12.
|
3
|
+
Version: 0.9.12.13
|
4
4
|
Summary: TB2J: First principle to Heisenberg exchange J using tight-binding Green function method
|
5
5
|
Author-email: Xu He <mailhexu@gmail.com>
|
6
6
|
Maintainer-email: Xu He <mailhexu@gmail.com>
|
@@ -35,7 +35,7 @@ Requires-Dist: pathos
|
|
35
35
|
Requires-Dist: packaging>=20.0
|
36
36
|
Requires-Dist: HamiltonIO>=0.2.4
|
37
37
|
Requires-Dist: pre-commit
|
38
|
-
Requires-Dist: sympair>0.1.
|
38
|
+
Requires-Dist: sympair>0.1.1
|
39
39
|
Requires-Dist: tomli>=2.0.0
|
40
40
|
Requires-Dist: tomli-w>=1.0.0
|
41
41
|
Requires-Dist: typing_extensions
|
@@ -1,3 +1,4 @@
|
|
1
|
+
TB2J/.gitignore,sha256=0Q9EiAAZLJpONgoHwR1XcEskJykFEKfCc45KGH-C3zI,68
|
1
2
|
TB2J/Jdownfolder.py,sha256=K8WrvU_5daH7eQgB53VymJPFRWZoOMlvQGgIca9GNt0,10885
|
2
3
|
TB2J/Jtensor.py,sha256=WRhpp5N92a6lA1jeM1hc7jYUoTOLIdMnIIKpdOyzjR4,3192
|
3
4
|
TB2J/MAE.py,sha256=fM8U-Dgp9HcQOEeC_kyZV1oVrygBvcux9BraUXVouvY,10994
|
@@ -28,10 +29,10 @@ TB2J/orbmap.py,sha256=XLQjKMxCy2eADaM5eb2F_zG08V7lzpXJxp5uEtTeVYI,7194
|
|
28
29
|
TB2J/pauli.py,sha256=ESpAhk6LG5ugzuW1YFUTqiDxcg-pQ7wNnzR2FtUnvKM,5295
|
29
30
|
TB2J/pert.py,sha256=RaCJfewl0doht4cjAnzzGKe-uj2le4aqe0iPKFrq9fo,1192
|
30
31
|
TB2J/plot.py,sha256=AhZW7ThKYWVZR8L_T2WhvBoqtw1CkrwG1TxgExtvQYI,4079
|
31
|
-
TB2J/rotate_atoms.py,sha256=
|
32
|
+
TB2J/rotate_atoms.py,sha256=taVNQh2OISHx-nuktRNOwDCbz2a_iKTIghCIT_ld250,3250
|
32
33
|
TB2J/rotate_siestaDM.py,sha256=I4ytO8uFP8_GFyBs9-zMdiMSZS3Y3lj2dSLfNBNI2ZY,1078
|
33
34
|
TB2J/sisl_wrapper.py,sha256=A5x1-tt8efUSPeGY5wM5m6-pJYQFXTCzQHVqD6RBa2g,14792
|
34
|
-
TB2J/symmetrize_J.py,sha256=
|
35
|
+
TB2J/symmetrize_J.py,sha256=woZfqWe-NSDBpS_LZAgSXjd2Bkmy6JbVHE4URLfKjaQ,4476
|
35
36
|
TB2J/tensor_rotate.py,sha256=ZAC52knugXNJHpvpqSrmrHVdCs04b9v5X2F7rXV2zn4,8059
|
36
37
|
TB2J/thetaphi.py,sha256=Z7N3EOSM7rjHd7b9HxMYLPQO__uR0VwEiV9b471Yudc,399
|
37
38
|
TB2J/utest.py,sha256=z_ahi7tpHQF9WlHNQihcQ7qzfezRJQXQt28eB1X_z64,3897
|
@@ -56,12 +57,13 @@ TB2J/interfaces/abacus/test_density_matrix.py,sha256=bMWWJYtDS57SpPZ-eZXZ9Hr_UK4
|
|
56
57
|
TB2J/interfaces/abacus/test_read_HRSR.py,sha256=W1oO_yigT50Yb5_u-KB_IfTpM7kArGkBuMSMs0H4CTs,1235
|
57
58
|
TB2J/interfaces/abacus/test_read_stru.py,sha256=hoKPHVco8vwzC7Gao4bOPCdAPhh29x-9DTJJqRr7AYM,788
|
58
59
|
TB2J/io_exchange/__init__.py,sha256=LqEnG67qDVKt4hCUywDEQvUIJ7jsQjmtueOW_J16NOE,54
|
59
|
-
TB2J/io_exchange/
|
60
|
+
TB2J/io_exchange/io_espins.py,sha256=M5VP2z6QY88RtzP06ebqHoQy5ywchojz8gr9Uw9rATk,10615
|
61
|
+
TB2J/io_exchange/io_exchange.py,sha256=VUCog9y120d3Zved-lJ-qIb0pazx1IdAs8SHl3B_MfM,24931
|
60
62
|
TB2J/io_exchange/io_multibinit.py,sha256=8PDmWxzGuv-GwJosj2ZTmiyNY_duFVWJ4ekCuSqGdd8,6739
|
61
63
|
TB2J/io_exchange/io_tomsasd.py,sha256=NqkAC1Fl-CUnFA21eBzSy_S5F_oeQFJysw4UukQbN8o,4173
|
62
64
|
TB2J/io_exchange/io_txt.py,sha256=jFScdZ5W5_VNSEWYq6WDNKWeshZ0wxFfEzyjfvvU9MA,10601
|
63
65
|
TB2J/io_exchange/io_uppasd.py,sha256=qhGhHbp3cZmwuBo1SrEBQulrPjEWPD3yRgVs-juQ7Fs,3268
|
64
|
-
TB2J/io_exchange/io_vampire.py,sha256=
|
66
|
+
TB2J/io_exchange/io_vampire.py,sha256=nheRskvFdjEnWT8BRZ5ckZjC0dosno_PXB9erKPq_T4,5862
|
65
67
|
TB2J/magnon/__init__.py,sha256=Q69duroGIIotgW_71ZdHYarSiJLGAu9NPYgEacUk6eI,117
|
66
68
|
TB2J/magnon/io_exchange2.py,sha256=EcC3x6H13qq61WBsr__xKzHDtSvy_dMz1tEdUaqSG2I,23265
|
67
69
|
TB2J/magnon/magnon3.py,sha256=ecMCCAZiBCPyEPdNI60h5rV0nRyjFeB40FIX8-o87kE,31801
|
@@ -105,9 +107,9 @@ TB2J/spinham/supercell.py,sha256=y17uUC6r3gQb278FhxIW4CABihfLTvKFj6flyXrCPR8,122
|
|
105
107
|
TB2J/wannier/__init__.py,sha256=7ojCbM84PYv1X1Tbo4NHI-d3gWmQsZB_xiYqbfxVV1E,80
|
106
108
|
TB2J/wannier/w90_parser.py,sha256=dbd63LuKyv2DVUzqRINGsbDzEsOxsQyE8_Ear_LQIRg,4620
|
107
109
|
TB2J/wannier/w90_tb_parser.py,sha256=XPh0PNgX_fKYQodDOzZj6DKsvgULMQERU8Kjh4U2xZY,4563
|
108
|
-
tb2j-0.9.12.
|
109
|
-
tb2j-0.9.12.
|
110
|
-
tb2j-0.9.12.
|
111
|
-
tb2j-0.9.12.
|
112
|
-
tb2j-0.9.12.
|
113
|
-
tb2j-0.9.12.
|
110
|
+
tb2j-0.9.12.13.dist-info/licenses/LICENSE,sha256=CbZI-jyRTjiqIcWa244cRSHJdjjtUNqGR4HeJkgEwJw,1332
|
111
|
+
tb2j-0.9.12.13.dist-info/METADATA,sha256=N0jGrHSkjmogF8cvf4sgIwZIt5_IZHWBFAmMA6b2Q6w,4168
|
112
|
+
tb2j-0.9.12.13.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
113
|
+
tb2j-0.9.12.13.dist-info/entry_points.txt,sha256=QlTwH3gCmaKBW48nr0FwGTd5LTThTiemw_36u7e1B7o,770
|
114
|
+
tb2j-0.9.12.13.dist-info/top_level.txt,sha256=whYa5ByLYhl5XnTPBHSWr-IGD6VWmr5Ql2bye2qwV_s,5
|
115
|
+
tb2j-0.9.12.13.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|