Skip to content

Commit 7534dfa

Browse files
committed
fix: use total atom counts for defect energies
Fixes #1901 Coding-Agent: Codex Codex-Version: codex-cli 0.149.0 Model: gpt-5.6-sol Reasoning-Effort: xhigh
1 parent d5ce577 commit 7534dfa

4 files changed

Lines changed: 23 additions & 6 deletions

File tree

dpgen/auto_test/Interstitial.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import dpgen.auto_test.lib.abacus as abacus
1010
import dpgen.auto_test.lib.lammps as lammps
11-
from dpgen.auto_test.Property import Property
11+
from dpgen.auto_test.Property import Property, _total_atom_count
1212
from dpgen.auto_test.refine import make_refine
1313
from dpgen.auto_test.reproduce import make_repro, post_repro
1414

@@ -514,14 +514,14 @@ def _compute_lower(self, output_file, all_tasks, all_res):
514514
idid += 1
515515
structure_dir = os.path.basename(ii)
516516
task_result = loadfn(all_res[idid])
517-
natoms = task_result["atom_numbs"][0]
517+
natoms = _total_atom_count(task_result)
518518
equi_path = os.path.abspath(
519519
os.path.join(
520520
os.path.dirname(output_file), "../relaxation/relax_task"
521521
)
522522
)
523523
equi_result = loadfn(os.path.join(equi_path, "result.json"))
524-
equi_epa = equi_result["energies"][-1] / equi_result["atom_numbs"][0]
524+
equi_epa = equi_result["energies"][-1] / _total_atom_count(equi_result)
525525
evac = task_result["energies"][-1] - equi_epa * natoms
526526

527527
supercell_index = loadfn(os.path.join(ii, "supercell.json"))

dpgen/auto_test/Property.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@
88
from dpgen.auto_test.calculator import make_calculator
99

1010

11+
def _total_atom_count(result):
12+
"""Return the total number of atoms across all species in a result."""
13+
return sum(result["atom_numbs"])
14+
15+
1116
class Property(ABC):
1217
@abstractmethod
1318
def __init__(self, parameter):

dpgen/auto_test/Vacancy.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import dpgen.auto_test.lib.abacus as abacus
1010
from dpgen import dlog
11-
from dpgen.auto_test.Property import Property
11+
from dpgen.auto_test.Property import Property, _total_atom_count
1212
from dpgen.auto_test.refine import make_refine
1313
from dpgen.auto_test.reproduce import make_repro, post_repro
1414

@@ -231,14 +231,14 @@ def _compute_lower(self, output_file, all_tasks, all_res):
231231
idid += 1
232232
structure_dir = os.path.basename(ii)
233233
task_result = loadfn(all_res[idid])
234-
natoms = task_result["atom_numbs"][0]
234+
natoms = _total_atom_count(task_result)
235235
equi_path = os.path.abspath(
236236
os.path.join(
237237
os.path.dirname(output_file), "../relaxation/relax_task"
238238
)
239239
)
240240
equi_result = loadfn(os.path.join(equi_path, "result.json"))
241-
equi_epa = equi_result["energies"][-1] / equi_result["atom_numbs"][0]
241+
equi_epa = equi_result["energies"][-1] / _total_atom_count(equi_result)
242242
evac = task_result["energies"][-1] - equi_epa * natoms
243243

244244
supercell_index = loadfn(os.path.join(ii, "supercell.json"))
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import unittest
2+
3+
from dpgen.auto_test.Property import _total_atom_count
4+
5+
6+
class TestPropertyAtomCount(unittest.TestCase):
7+
def test_counts_all_species(self):
8+
self.assertEqual(_total_atom_count({"atom_numbs": [2, 3, 4]}), 9)
9+
10+
11+
if __name__ == "__main__":
12+
unittest.main()

0 commit comments

Comments
 (0)