Skip to content

Commit 9292b49

Browse files
committed
update nnsk to json and add mos2.vasp
1 parent b666d17 commit 9292b49

File tree

2 files changed

+51
-21
lines changed

2 files changed

+51
-21
lines changed

dptb/nn/nnsk.py

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -962,7 +962,7 @@ def to_json(self, version=2, basisref=None):
962962
"""
963963
basisref= {'Atom':{"s":"2s", "p":"2p", "d":"3d", "f":"4f"}}
964964
"""
965-
965+
print(basisref)
966966
to_uniform = False
967967
new_basis = self.basis.copy()
968968
if basisref is not None:
@@ -1023,25 +1023,29 @@ def to_json(self, version=2, basisref=None):
10231023
fiorb, fjorb = orbpair.split("-")
10241024
iorb = self.idp_sk.full_basis_to_basis[iasym].get(fiorb)
10251025
jorb = self.idp_sk.full_basis_to_basis[jasym].get(fjorb)
1026-
if to_uniform:
1027-
iorb = basisref[iasym][iorb]
1028-
jorb = basisref[jasym][jorb]
1026+
10291027
if iorb != None and jorb != None:
1028+
if to_uniform:
1029+
iorb = basisref[iasym][iorb]
1030+
jorb = basisref[jasym][jorb]
10301031
# iasym-jasym-iorb-jorb
10311032
for i in range(slices.stop-slices.start):
10321033
if ian < jan:
1033-
continue
1034+
if fiorb == fjorb:
1035+
hopping_param[f"{jasym}-{iasym}-{jorb}-{iorb}-{i}"] = ((hopping[pos_line, slices][i] + hopping[rev_line, slices][i])*0.5).tolist()
1036+
else:
1037+
hopping_param[f"{jasym}-{iasym}-{jorb}-{iorb}-{i}"] = hopping[pos_line, slices][i].tolist()
10341038
elif ian > jan:
10351039
if fiorb == fjorb: # this might have problems
10361040
hopping_param[f"{iasym}-{jasym}-{iorb}-{jorb}-{i}"] = ((hopping[pos_line, slices][i] + hopping[rev_line, slices][i])*0.5).tolist()
10371041
else:
10381042
hopping_param[f"{iasym}-{jasym}-{iorb}-{jorb}-{i}"] = hopping[pos_line, slices][i].tolist()
1039-
iiorb = self.idp_sk.full_basis_to_basis[iasym].get(fjorb)
1040-
jjorb = self.idp_sk.full_basis_to_basis[jasym].get(fiorb)
1041-
if to_uniform:
1042-
iiorb = basisref[iasym][iiorb]
1043-
jjorb = basisref[jasym][jjorb]
1044-
hopping_param[f"{iasym}-{jasym}-{iiorb}-{jjorb}-{i}"] = hopping[rev_line, slices][i].tolist()
1043+
#iiorb = self.idp_sk.full_basis_to_basis[iasym].get(fjorb)
1044+
#jjorb = self.idp_sk.full_basis_to_basis[jasym].get(fiorb)
1045+
#if to_uniform:
1046+
# iiorb = basisref[iasym][iiorb]
1047+
# jjorb = basisref[jasym][jjorb]
1048+
# hopping_param[f"{iasym}-{jasym}-{iiorb}-{jjorb}-{i}"] = hopping[rev_line, slices][i].tolist()
10451049
elif ian == jan:
10461050
if self.idp_sk.full_basis.index(fiorb) <= self.idp_sk.full_basis.index(fjorb):
10471051
hopping_param[f"{iasym}-{jasym}-{iorb}-{jorb}-{i}"] = hopping[pos_line, slices][i].tolist()
@@ -1062,25 +1066,29 @@ def to_json(self, version=2, basisref=None):
10621066
fiorb, fjorb = orbpair.split("-")
10631067
iorb = self.idp_sk.full_basis_to_basis[iasym].get(fiorb)
10641068
jorb = self.idp_sk.full_basis_to_basis[jasym].get(fjorb)
1065-
if to_uniform:
1066-
iorb = basisref[iasym][iorb]
1067-
jorb = basisref[jasym][jorb]
1069+
10681070
if iorb != None and jorb != None:
1071+
if to_uniform:
1072+
iorb = basisref[iasym][iorb]
1073+
jorb = basisref[jasym][jorb]
10691074
# iasym-jasym-iorb-jorb
10701075
for i in range(slices.stop-slices.start):
10711076
if ian < jan:
1072-
continue
1077+
if fiorb == fjorb: # this might have problems
1078+
overlap_param[f"{jasym}-{iasym}-{jorb}-{iorb}-{i}"] = ((overlap[pos_line, slices][i] + overlap[rev_line, slices][i])*0.5).tolist()
1079+
else:
1080+
overlap_param[f"{jasym}-{iasym}-{jorb}-{iorb}-{i}"] = overlap[pos_line, slices][i].tolist()
10731081
elif ian > jan:
10741082
if fiorb == fjorb: # this might have problems
10751083
overlap_param[f"{iasym}-{jasym}-{iorb}-{jorb}-{i}"] = ((overlap[pos_line, slices][i] + overlap[rev_line, slices][i])*0.5).tolist()
10761084
else:
10771085
overlap_param[f"{iasym}-{jasym}-{iorb}-{jorb}-{i}"] = overlap[pos_line, slices][i].tolist()
1078-
iiorb = self.idp_sk.full_basis_to_basis[iasym].get(fjorb)
1079-
jjorb = self.idp_sk.full_basis_to_basis[jasym].get(fiorb)
1080-
if to_uniform:
1081-
iiorb = basisref[iasym][iiorb]
1082-
jjorb = basisref[jasym][jjorb]
1083-
overlap_param[f"{iasym}-{jasym}-{iiorb}-{jjorb}-{i}"] = overlap[rev_line, slices][i].tolist()
1086+
# iiorb = self.idp_sk.full_basis_to_basis[iasym].get(fjorb)
1087+
# jjorb = self.idp_sk.full_basis_to_basis[jasym].get(fiorb)
1088+
# if to_uniform:
1089+
# iiorb = basisref[iasym][iiorb]
1090+
# jjorb = basisref[jasym][jjorb]
1091+
# overlap_param[f"{iasym}-{jasym}-{iiorb}-{jjorb}-{i}"] = overlap[rev_line, slices][i].tolist()
10841092
elif ian == jan:
10851093
if self.idp_sk.full_basis.index(fiorb) <= self.idp_sk.full_basis.index(fjorb):
10861094
overlap_param[f"{iasym}-{jasym}-{iorb}-{jorb}-{i}"] = overlap[pos_line, slices][i].tolist()
@@ -1093,6 +1101,8 @@ def to_json(self, version=2, basisref=None):
10931101
for asym in self.idp_sk.type_names:
10941102
for orbpair, slices in self.idp_sk.skonsite_maps.items():
10951103
fiorb, fjorb = orbpair.split("-")
1104+
if fiorb not in self.idp_sk.full_basis_to_basis[asym] or fjorb not in self.idp_sk.full_basis_to_basis[asym]:
1105+
continue
10961106
if fiorb != fjorb:
10971107
iorb = self.idp_sk.full_basis_to_basis[asym][fiorb]
10981108
jorb = self.idp_sk.full_basis_to_basis[asym][fjorb]
@@ -1112,6 +1122,8 @@ def to_json(self, version=2, basisref=None):
11121122
ian, jan = torch.tensor(atomic_num_dict[iasym]), torch.tensor(atomic_num_dict[jasym])
11131123
for orbpair, slices in self.idp_sk.orbpair_maps.items():
11141124
fiorb, fjorb = orbpair.split("-")
1125+
if fiorb not in self.idp_sk.full_basis_to_basis[iasym] or fjorb not in self.idp_sk.full_basis_to_basis[jasym]:
1126+
continue
11151127
iorb = self.idp_sk.full_basis_to_basis[iasym].get(fiorb)
11161128
jorb = self.idp_sk.full_basis_to_basis[jasym].get(fjorb)
11171129
if to_uniform:
@@ -1128,6 +1140,8 @@ def to_json(self, version=2, basisref=None):
11281140
for asym in self.idp_sk.type_names:
11291141
for orbpair, slices in self.idp_sk.skonsite_maps.items():
11301142
fiorb, fjorb = orbpair.split("-")
1143+
if fiorb not in self.idp_sk.full_basis_to_basis[asym] or fjorb not in self.idp_sk.full_basis_to_basis[asym]:
1144+
continue
11311145
iorb = self.idp_sk.full_basis_to_basis[asym][fiorb]
11321146
jorb = self.idp_sk.full_basis_to_basis[asym][fjorb]
11331147
if to_uniform:
@@ -1154,6 +1168,8 @@ def to_json(self, version=2, basisref=None):
11541168
for asym in self.idp_sk.type_names:
11551169
for fiorb, slices in self.idp_sk.sksoc_maps.items():
11561170
iorb = self.idp_sk.full_basis_to_basis[asym][fiorb]
1171+
if fiorb not in self.idp_sk.full_basis_to_basis[asym]:
1172+
continue
11571173
if to_uniform:
11581174
iorb = basisref[asym][iorb]
11591175
for i in range(slices.start, slices.stop):

examples/mos2/mos2.vasp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
Mo2 S4
2+
1.0
3+
3.1922378540 0.0000000000 0.0000000000
4+
-1.5961192951 2.7645588640 0.0000000000
5+
0.0000000000 0.0000000000 13.3782939911
6+
Mo S
7+
2 4
8+
Direct
9+
0.000000000 0.000000000 0.250000000
10+
0.666666666 0.333333333 0.750000000
11+
0.666666666 0.333333333 0.133082002
12+
0.666666666 0.333333333 0.366917998
13+
0.000000000 0.000000000 0.633081973
14+
0.000000000 0.000000000 0.866918027

0 commit comments

Comments
 (0)