diff --git a/elkparser/metainfo/__init__.py b/elkparser/metainfo/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..d315526ffd7f331530acdec3c5d14a42047b9e8d
--- /dev/null
+++ b/elkparser/metainfo/__init__.py
@@ -0,0 +1,13 @@
+import sys
+from nomad.metainfo import Environment
+from nomad.metainfo.legacy import LegacyMetainfoEnvironment
+import elkparser.metainfo.elk
+import nomad.datamodel.metainfo.common
+import nomad.datamodel.metainfo.public
+import nomad.datamodel.metainfo.general
+
+m_env = LegacyMetainfoEnvironment()
+m_env.m_add_sub_section(Environment.packages, sys.modules['elkparser.metainfo.elk'].m_package)  # type: ignore
+m_env.m_add_sub_section(Environment.packages, sys.modules['nomad.datamodel.metainfo.common'].m_package)  # type: ignore
+m_env.m_add_sub_section(Environment.packages, sys.modules['nomad.datamodel.metainfo.public'].m_package)  # type: ignore
+m_env.m_add_sub_section(Environment.packages, sys.modules['nomad.datamodel.metainfo.general'].m_package)  # type: ignore
diff --git a/elkparser/metainfo/elk.py b/elkparser/metainfo/elk.py
new file mode 100644
index 0000000000000000000000000000000000000000..c6cb9a38f238777ad051d4132de2d0c2ea328482
--- /dev/null
+++ b/elkparser/metainfo/elk.py
@@ -0,0 +1,779 @@
+import numpy as np            # pylint: disable=unused-import
+import typing                 # pylint: disable=unused-import
+from nomad.metainfo import (  # pylint: disable=unused-import
+    MSection, MCategory, Category, Package, Quantity, Section, SubSection, SectionProxy,
+    Reference
+)
+from nomad.metainfo.legacy import LegacyDefinition
+
+from nomad.datamodel.metainfo import public
+
+m_package = Package(
+    name='elk_nomadmetainfo_json',
+    description='None',
+    a_legacy=LegacyDefinition(name='elk.nomadmetainfo.json'))
+
+
+class x_elk_section_lattice_vectors(MSection):
+    '''
+    lattice vectors
+    '''
+
+    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_elk_section_lattice_vectors'))
+
+    x_elk_geometry_lattice_vector_x = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='meter',
+        description='''
+        x component of lattice vector
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_geometry_lattice_vector_x'))
+
+    x_elk_geometry_lattice_vector_y = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='meter',
+        description='''
+        y component of lattice vector
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_geometry_lattice_vector_y'))
+
+    x_elk_geometry_lattice_vector_z = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='meter',
+        description='''
+        z component of lattice vector
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_geometry_lattice_vector_z'))
+
+
+class x_elk_section_reciprocal_lattice_vectors(MSection):
+    '''
+    reciprocal lattice vectors
+    '''
+
+    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_elk_section_reciprocal_lattice_vectors'))
+
+    x_elk_geometry_reciprocal_lattice_vector_x = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='1 / meter',
+        description='''
+        x component of reciprocal lattice vector
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_geometry_reciprocal_lattice_vector_x'))
+
+    x_elk_geometry_reciprocal_lattice_vector_y = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='1 / meter',
+        description='''
+        y component of reciprocal lattice vector
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_geometry_reciprocal_lattice_vector_y'))
+
+    x_elk_geometry_reciprocal_lattice_vector_z = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='1 / meter',
+        description='''
+        z component of reciprocal lattice vector
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_geometry_reciprocal_lattice_vector_z'))
+
+
+class x_elk_section_atoms_group(MSection):
+    '''
+    a group of atoms of the same type
+    '''
+
+    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_elk_section_atoms_group'))
+
+    x_elk_geometry_atom_labels = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        labels of atom
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_geometry_atom_labels'))
+
+    x_elk_geometry_atom_number = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        number to identify the atoms of a species
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_geometry_atom_number'))
+
+    x_elk_geometry_atom_positions_x = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='meter',
+        description='''
+        x component of atomic position
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_geometry_atom_positions_x'))
+
+    x_elk_geometry_atom_positions_y = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='meter',
+        description='''
+        y component of atomic position
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_geometry_atom_positions_y'))
+
+    x_elk_geometry_atom_positions_z = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='meter',
+        description='''
+        z component of atomic position
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_geometry_atom_positions_z'))
+
+
+class x_elk_section_spin(MSection):
+    '''
+    section for exciting spin treatment
+    '''
+
+    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_elk_section_spin'))
+
+    x_elk_spin_treatment = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        Spin treatment
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_spin_treatment'))
+
+
+class x_elk_section_xc(MSection):
+    '''
+    index for elk functional
+    '''
+
+    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_elk_section_xc'))
+
+    x_elk_xc_functional = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        index for elk functional
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_xc_functional'))
+
+
+class section_system(public.section_system):
+
+    m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_system'))
+
+    x_elk_brillouin_zone_volume = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='1 / meter ** 3',
+        description='''
+        Brillouin zone volume
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_brillouin_zone_volume'))
+
+    x_elk_simulation_reciprocal_cell = Quantity(
+        type=np.dtype(np.float64),
+        shape=[3, 3],
+        unit='meter',
+        description='''
+        Reciprocal lattice vectors of the simulation cell.
+        ''',
+        categories=[public.configuration_core],
+        a_legacy=LegacyDefinition(name='x_elk_simulation_reciprocal_cell'))
+
+    x_elk_unit_cell_volume = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='meter ** 3',
+        description='''
+        unit cell volume
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_unit_cell_volume'))
+
+    x_elk_muffin_tin_radius = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='meter',
+        description='''
+        muffin-tin radius
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_muffin_tin_radius'))
+
+    x_elk_muffin_tin_points = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        muffin-tin points
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_muffin_tin_points'))
+
+    x_elk_number_kpoint_x = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        number k-points x
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_number_kpoint_x'))
+
+    x_elk_number_kpoint_y = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        number k-points y
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_number_kpoint_y'))
+
+    x_elk_number_kpoint_z = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        number k-points z
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_number_kpoint_z'))
+
+    x_elk_number_kpoints = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        number k-points
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_number_kpoints'))
+
+    x_elk_kpoint_offset_x = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        K-points offset x component
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_kpoint_offset_x'))
+
+    x_elk_kpoint_offset_y = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        K-points offset y component
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_kpoint_offset_y'))
+
+    x_elk_kpoint_offset_z = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        K-points offset z component
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_kpoint_offset_z'))
+
+    x_elk_rgkmax = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='meter',
+        description='''
+        Radius MT * Gmax
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_rgkmax'))
+
+    x_elk_gvector_size_x = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        G-vector grid size x
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_gvector_size_x'))
+
+    x_elk_gvector_size_y = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        G-vector grid size y
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_gvector_size_y'))
+
+    x_elk_gvector_size_z = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        G-vector grid size z
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_gvector_size_z'))
+
+    x_elk_gvector_total = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        G-vector total
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_gvector_total'))
+
+    x_elk_lmaxapw = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        Angular momentum cut-off for the APW functions
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_lmaxapw'))
+
+    x_elk_gkmax = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='1 / meter',
+        description='''
+        Maximum length of |G+k| for APW functions
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_gkmax'))
+
+    x_elk_smearing_width = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        Smearing width for KS occupancies
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_smearing_width'))
+
+    x_elk_lo = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        Total number of local-orbitals
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_lo'))
+
+    x_elk_gmaxvr = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='1 / meter',
+        description='''
+        Maximum length of |G|
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_gmaxvr'))
+
+    x_elk_valence_states = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        Total number of valence states
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_valence_states'))
+
+    x_elk_core_states = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        Total number of core states
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_core_states'))
+
+    x_elk_empty_states = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        Number of empty states
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_empty_states'))
+
+    x_elk_wigner_radius = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='meter',
+        description='''
+        Effective Wigner radius
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_wigner_radius'))
+
+    x_elk_electronic_charge = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        Electronic charge
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_electronic_charge'))
+
+    x_elk_valence_charge = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        Valence charge
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_valence_charge'))
+
+    x_elk_nuclear_charge = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        Nuclear charge
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_nuclear_charge'))
+
+    x_elk_core_charge = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        Core charge
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_core_charge'))
+
+    x_elk_section_lattice_vectors = SubSection(
+        sub_section=SectionProxy('x_elk_section_lattice_vectors'),
+        repeats=True,
+        a_legacy=LegacyDefinition(name='x_elk_section_lattice_vectors'))
+
+    x_elk_section_reciprocal_lattice_vectors = SubSection(
+        sub_section=SectionProxy('x_elk_section_reciprocal_lattice_vectors'),
+        repeats=True,
+        a_legacy=LegacyDefinition(name='x_elk_section_reciprocal_lattice_vectors'))
+
+    x_elk_section_atoms_group = SubSection(
+        sub_section=SectionProxy('x_elk_section_atoms_group'),
+        repeats=True,
+        a_legacy=LegacyDefinition(name='x_elk_section_atoms_group'))
+
+    x_elk_section_spin = SubSection(
+        sub_section=SectionProxy('x_elk_section_spin'),
+        repeats=True,
+        a_legacy=LegacyDefinition(name='x_elk_section_spin'))
+
+    x_elk_section_xc = SubSection(
+        sub_section=SectionProxy('x_elk_section_xc'),
+        repeats=True,
+        a_legacy=LegacyDefinition(name='x_elk_section_xc'))
+
+
+class section_scf_iteration(public.section_scf_iteration):
+
+    m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_scf_iteration'))
+
+    x_elk_core_charge_scf_iteration = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        Core charge scf iteration
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_core_charge_scf_iteration'))
+
+    x_elk_valence_charge_scf_iteration = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        Valence charge scf iteration
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_valence_charge_scf_iteration'))
+
+    x_elk_interstitial_charge_scf_iteration = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        Interstitial charge scf iteration
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_interstitial_charge_scf_iteration'))
+
+    x_elk_fermi_energy_scf_iteration = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Fermi energy
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_fermi_energy_scf_iteration'))
+
+    x_elk_core_electron_kinetic_energy_scf_iteration = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Core-electron kinetic energy
+        ''',
+        categories=[public.energy_value, public.energy_component],
+        a_legacy=LegacyDefinition(name='x_elk_core_electron_kinetic_energy_scf_iteration'))
+
+    x_elk_coulomb_energy_scf_iteration = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Coulomb energy
+        ''',
+        categories=[public.energy_value, public.energy_component],
+        a_legacy=LegacyDefinition(name='x_elk_coulomb_energy_scf_iteration'))
+
+    x_elk_coulomb_potential_energy_scf_iteration = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Coulomb potential energy
+        ''',
+        categories=[public.energy_value, public.energy_component],
+        a_legacy=LegacyDefinition(name='x_elk_coulomb_potential_energy_scf_iteration'))
+
+    x_elk_nuclear_nuclear_energy_scf_iteration = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Nuclear-nuclear energy
+        ''',
+        categories=[public.energy_value, public.energy_component],
+        a_legacy=LegacyDefinition(name='x_elk_nuclear_nuclear_energy_scf_iteration'))
+
+    x_elk_electron_nuclear_energy_scf_iteration = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Electron-nuclear energy
+        ''',
+        categories=[public.energy_value, public.energy_component],
+        a_legacy=LegacyDefinition(name='x_elk_electron_nuclear_energy_scf_iteration'))
+
+    x_elk_hartree_energy_scf_iteration = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Hartree energy
+        ''',
+        categories=[public.energy_value, public.energy_component],
+        a_legacy=LegacyDefinition(name='x_elk_hartree_energy_scf_iteration'))
+
+    x_elk_madelung_energy_scf_iteration = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Madelung energy
+        ''',
+        categories=[public.energy_value, public.energy_component],
+        a_legacy=LegacyDefinition(name='x_elk_madelung_energy_scf_iteration'))
+
+    x_elk_exchange_energy_scf_iteration = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Exchange energy
+        ''',
+        categories=[public.energy_value, public.energy_component],
+        a_legacy=LegacyDefinition(name='x_elk_exchange_energy_scf_iteration'))
+
+    x_elk_correlation_energy_scf_iteration = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Correlation energy
+        ''',
+        categories=[public.energy_value, public.energy_component],
+        a_legacy=LegacyDefinition(name='x_elk_correlation_energy_scf_iteration'))
+
+    x_elk_electron_entropic_energy_scf_iteration = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Electron entropic energy
+        ''',
+        categories=[public.energy_value, public.energy_component],
+        a_legacy=LegacyDefinition(name='x_elk_electron_entropic_energy_scf_iteration'))
+
+    x_elk_dos_fermi_scf_iteration = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='1 / joule',
+        description='''
+        DOS at Fermi energy
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_dos_fermi_scf_iteration'))
+
+    x_elk_direct_gap_scf_iteration = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Estimated fundamental direct gap
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_direct_gap_scf_iteration'))
+
+    x_elk_indirect_gap_scf_iteration = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Estimated fundamental indirect gap
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_indirect_gap_scf_iteration'))
+
+
+class section_single_configuration_calculation(public.section_single_configuration_calculation):
+
+    m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_single_configuration_calculation'))
+
+    x_elk_core_charge_final = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        Core charge final
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_core_charge_final'))
+
+    x_elk_valence_charge_final = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        Valence charge final
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_valence_charge_final'))
+
+    x_elk_interstitial_charge_final = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        Interstitial charge final
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_interstitial_charge_final'))
+
+    x_elk_fermi_energy = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Fermi energy final
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_fermi_energy'))
+
+    x_elk_core_electron_kinetic_energy = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Core-electron kinetic energy final
+        ''',
+        categories=[public.energy_value, public.energy_component],
+        a_legacy=LegacyDefinition(name='x_elk_core_electron_kinetic_energy'))
+
+    x_elk_coulomb_energy = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Coulomb energy final
+        ''',
+        categories=[public.energy_value, public.energy_component],
+        a_legacy=LegacyDefinition(name='x_elk_coulomb_energy'))
+
+    x_elk_coulomb_potential_energy = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Coulomb potential energy final
+        ''',
+        categories=[public.energy_value, public.energy_component],
+        a_legacy=LegacyDefinition(name='x_elk_coulomb_potential_energy'))
+
+    x_elk_nuclear_nuclear_energy = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Nuclear-nuclear energy final
+        ''',
+        categories=[public.energy_value, public.energy_component],
+        a_legacy=LegacyDefinition(name='x_elk_nuclear_nuclear_energy'))
+
+    x_elk_electron_nuclear_energy = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Electron-nuclear energy final
+        ''',
+        categories=[public.energy_value, public.energy_component],
+        a_legacy=LegacyDefinition(name='x_elk_electron_nuclear_energy'))
+
+    x_elk_hartree_energy = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Hartree energy final
+        ''',
+        categories=[public.energy_value, public.energy_component],
+        a_legacy=LegacyDefinition(name='x_elk_hartree_energy'))
+
+    x_elk_madelung_energy = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Madelung energy final
+        ''',
+        categories=[public.energy_value, public.energy_component],
+        a_legacy=LegacyDefinition(name='x_elk_madelung_energy'))
+
+    x_elk_exchange_energy = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Exchange energy final
+        ''',
+        categories=[public.energy_value, public.energy_component],
+        a_legacy=LegacyDefinition(name='x_elk_exchange_energy'))
+
+    x_elk_correlation_energy = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Correlation energy final
+        ''',
+        categories=[public.energy_value, public.energy_component],
+        a_legacy=LegacyDefinition(name='x_elk_correlation_energy'))
+
+    x_elk_electron_entropic_energy = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Electron entropic energy final
+        ''',
+        categories=[public.energy_value, public.energy_component],
+        a_legacy=LegacyDefinition(name='x_elk_electron_entropic_energy'))
+
+    x_elk_dos_fermi = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='1 / joule',
+        description='''
+        DOS at Fermi energy
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_dos_fermi'))
+
+    x_elk_direct_gap = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Estimated fundamental direct gap final
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_direct_gap'))
+
+    x_elk_indirect_gap = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='joule',
+        description='''
+        Estimated fundamental indirect gap final
+        ''',
+        a_legacy=LegacyDefinition(name='x_elk_indirect_gap'))
+
+
+m_package.__init_metainfo__()