Skip to content

Commit 0bf9c5f

Browse files
authored
double check the models
1 parent 6fccd3b commit 0bf9c5f

File tree

1 file changed

+116
-0
lines changed

1 file changed

+116
-0
lines changed

test/model_recheck.jl

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
using ACEhamiltonians, ACE
2+
using JSON, HDF5, JuLIP, LinearAlgebra
3+
4+
using ACEhamiltonians: Data, Params, write_modeljson,
5+
write_atomjson, wm2fn, fname2index
6+
using ACEhamiltonians.Predict: predict_main, predict_offsite_HS
7+
using ACEhamiltonians.Dictionary: recover_at,recover_model,recover_error
8+
9+
## Model read
10+
11+
const hartree2ev = 27.2114
12+
13+
Hmodelfile = "ACEhamiltonians-data/offsite_models_ord1/10204186688118368371_H.json"
14+
# Hmodelfile = "ACEhamiltonians-data/offsite_models_ord1/14750835312950641338_H.json"
15+
# Hmodelfile = "ACEhamiltonians-data/optimized_model/offsite/4570230078043807257_H.json"
16+
17+
Hmodel_whole = read_dict(load_json(Hmodelfile))
18+
# NOTE: A wrong read here - I should have removed this function!
19+
# Hmodel_whole1 = recover_model(load_json(Hmodelfile))
20+
21+
model_dd = Hmodel_whole.ModelDD[1]
22+
# basis and coeffs - we are checking a offsite model so the mean field is just 0
23+
basis = model_dd.basis
24+
C = model_dd.coeffs
25+
26+
# read reference data, including Hamiltonian, overlap and positions
27+
fname = "ACEhamiltonians-data/reference_data/FCC/FCC-supercell-000.h5"
28+
# fname = "ACEhamiltonians-data/training_data/FCC/SK-supercell-001.h5"
29+
h5 = h5open(fname)
30+
dict = HDF5.read(h5["aitb"])
31+
H = dict["H"]
32+
at = get_atoms(fname)[2]
33+
i,j = 54,55
34+
st = ACEhamiltonians.DataProcess.get_state(at,[(i,j)])[1]
35+
cfg = ACEConfig(st)
36+
37+
A = ACE.evaluate(basis,cfg)
38+
AA = ACEhamiltonians.Fitting.evaluateval_real(A)
39+
40+
Hpred = sum([AA[i] * C[i] for i = 1:length(C)])
41+
Href = H[14(i-1)+10:14(i-1)+14,14(j-1)+10:14(j-1)+14].*hartree2ev
42+
E = Hpred - Href
43+
rmse = norm(E)/5
44+
45+
rmse_total = 0
46+
k = 0
47+
for i = 1:20:729
48+
for j = 2:20:729
49+
st = ACEhamiltonians.DataProcess.get_state(at,[(i,j)])[1]
50+
cfg = ACEConfig(st)
51+
52+
A = ACE.evaluate(basis,cfg)
53+
AA = ACEhamiltonians.Fitting.evaluateval_real(A)
54+
55+
Hpred = sum([AA[t] * C[t] for t = 1:length(C)])
56+
Href = H[14(i-1)+10:14(i-1)+14,14(j-1)+10:14(j-1)+14].*hartree2ev
57+
E = Hpred - Href
58+
rmse_total += norm(E)^2
59+
k += 1
60+
@show k
61+
end
62+
end
63+
rmse_total = sqrt(rmse_total/25/k)
64+
@show log10(rmse_total)
65+
66+
## It returns ~-1.73 for (1,8) and ~-2.43 for (1,14), which is consistent to what we had in the paper
67+
68+
## Onsite check
69+
70+
Hmodelfile = "ACEhamiltonians-data/onsite_models_ord2/1646489440533135164_H.json"
71+
Hmodel_whole = read_dict(load_json(Hmodelfile));
72+
73+
model_dd = Hmodel_whole.ModelDD[1]
74+
# basis, coeffs and mean
75+
basis = model_dd.basis
76+
C = model_dd.coeffs
77+
Mean = model_dd.mean
78+
79+
# read reference data, including Hamiltonian, overlap and positions
80+
fname = "ACEhamiltonians-data/reference_data/FCC/FCC-supercell-000.h5"
81+
# fname = "ACEhamiltonians-data/training_data/FCC/SK-supercell-001.h5"
82+
h5 = h5open(fname)
83+
dict = HDF5.read(h5["aitb"])
84+
H = dict["H"]
85+
at = get_atoms(fname)[2]
86+
i = 1
87+
st = ACE.PositionState.(Vector(JuLIP.Potentials.neigsz(JuLIP.neighbourlist(at,20.0),at,i)[2]))
88+
cfg = ACEConfig(st)
89+
90+
A = ACE.evaluate(basis,cfg)
91+
AA = ACEhamiltonians.Fitting.evaluateval_real(A)
92+
93+
Hpred = (sum([AA[i] * C[i] for i = 1:length(C)])+Mean)
94+
Href = H[14(i-1)+10:14(i-1)+14,14(i-1)+10:14(i-1)+14].*hartree2ev
95+
E = Hpred - Href
96+
rmse = norm(E)/5
97+
98+
rmse_total = 0
99+
k = 0
100+
for i = 1:5:729
101+
st = ACEhamiltonians.DataProcess.get_state(at,[(i,j)])[1]
102+
cfg = ACEConfig(st)
103+
104+
A = ACE.evaluate(basis,cfg)
105+
AA = ACEhamiltonians.Fitting.evaluateval_real(A)
106+
107+
Hpred = (sum([AA[i] * C[i] for i = 1:length(C)])+Mean)
108+
Href = H[14(i-1)+10:14(i-1)+14,14(i-1)+10:14(i-1)+14].*hartree2ev
109+
E = Hpred - Href
110+
rmse_total += norm(E)^2
111+
k += 1
112+
@show k
113+
end
114+
115+
rmse_total = sqrt(rmse_total/25/k)
116+
@show log10(rmse_total)

0 commit comments

Comments
 (0)