diff --git a/parser/parser-gpaw/parser2.py b/parser/parser-gpaw/parser2.py index ed99b99a3e290a50dc51e97b51e138d5130810cc..ab2ea62baf6a49721fb284456381561293792dff 100644 --- a/parser/parser-gpaw/parser2.py +++ b/parser/parser-gpaw/parser2.py @@ -137,6 +137,34 @@ def parse(filename): c(r.occupations.fermilevel, 'eV')) p.addRealValue('energy_reference_fermi', c(r.occupations.fermilevel, 'eV')) + + # Load 3D arrays ("volumetric data") + origin = -0.5 * r.atoms.cell + npoints = np.array(r.density.density.shape[1:]) + npoints[~r.atoms.pbc] += 1 + displacements = r.atoms.cell / npoints + + def add_3d_array(values, kind, unit): + with o(p, 'section_volumetric_data'): + p.addArrayValues('volumetric_data_origin', + origin, 'angstrom') + p.addArrayValues('volumetric_data_displacements', + displacements, 'angstrom') + p.addArrayValues('volumetric_data_values', values) + p.addValue('volumetric_data_kind', kind) + p.addValue('volumetric_data_unit', unit) + + # H.atom.ulm.gpw test can be used to verify that pseudodensity + # integrates to 0.98, corresponding closely to the norm of the + # H 1s pseudowavefunction (see output of "gpaw-setup H"). + # It has mixed BCs so this should show that npoints is taken + # care of correctly, hopefully. + add_3d_array(r.density.density, kind='density', + unit='angstrom**(-3)') + add_3d_array(r.hamiltonian.potential, kind='potential_effective', + unit='eV*angstrom**(-3)') + + if hasattr(r.results, 'forces'): p.addArrayValues('atom_forces_free_raw', c(r.results.forces, 'eV/angstrom')) diff --git a/test/examples/Au.fcc.ulm.gpw b/test/examples/Au.fcc.ulm.gpw new file mode 100644 index 0000000000000000000000000000000000000000..bbd22a11b884ee975914f41a970c7a1e56eedda1 Binary files /dev/null and b/test/examples/Au.fcc.ulm.gpw differ diff --git a/test/examples/H.atom.ulm.gpw b/test/examples/H.atom.ulm.gpw new file mode 100644 index 0000000000000000000000000000000000000000..b0c9828abc01d3eef29b6424ca85ce765ef4d40f Binary files /dev/null and b/test/examples/H.atom.ulm.gpw differ