From dddddaa0f933d5a38b479ffdd90a95654e9df133 Mon Sep 17 00:00:00 2001
From: Markus Scheidgen <markus.scheidgen@gmail.com>
Date: Thu, 19 Mar 2020 12:23:10 +0100
Subject: [PATCH] Added metainfo python code.

---
 elasticparser/metainfo/__init__.py |  13 ++
 elasticparser/metainfo/elastic.py  | 339 +++++++++++++++++++++++++++++
 2 files changed, 352 insertions(+)
 create mode 100644 elasticparser/metainfo/__init__.py
 create mode 100644 elasticparser/metainfo/elastic.py

diff --git a/elasticparser/metainfo/__init__.py b/elasticparser/metainfo/__init__.py
new file mode 100644
index 0000000..98688be
--- /dev/null
+++ b/elasticparser/metainfo/__init__.py
@@ -0,0 +1,13 @@
+import sys
+from nomad.metainfo import Environment
+from nomad.metainfo.legacy import LegacyMetainfoEnvironment
+import elasticparser.metainfo.elastic
+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['elasticparser.metainfo.elastic'].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/elasticparser/metainfo/elastic.py b/elasticparser/metainfo/elastic.py
new file mode 100644
index 0000000..1928e0c
--- /dev/null
+++ b/elasticparser/metainfo/elastic.py
@@ -0,0 +1,339 @@
+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='elastic_nomadmetainfo_json',
+    description='None',
+    a_legacy=LegacyDefinition(name='elastic.nomadmetainfo.json'))
+
+
+class x_elastic_section_strain_diagrams(MSection):
+    '''
+    section collecting the data of the strain diagrams
+    '''
+
+    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_elastic_section_strain_diagrams'))
+
+    x_elastic_strain_diagram_values = Quantity(
+        type=np.dtype(np.float64),
+        shape=['x_elastic_number_of_deformations', 'x_elastic_strain_diagram_number_of_eta'],
+        description='''
+        Values of the energy(units:J)/d2E(units:Pa)/cross-validation (depending on the
+        value of x_elastic_strain_diagram_type)
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_strain_diagram_values'))
+
+    x_elastic_strain_diagram_eta_values = Quantity(
+        type=np.dtype(np.float64),
+        shape=['x_elastic_number_of_deformations', 'x_elastic_strain_diagram_number_of_eta'],
+        description='''
+        eta values used the strain diagrams
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_strain_diagram_eta_values'))
+
+    x_elastic_strain_diagram_number_of_eta = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        Number of strain values used in the strain diagram
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_strain_diagram_number_of_eta'))
+
+    x_elastic_strain_diagram_type = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        Kind of strain diagram. Possible values are: energy; cross-validation (cross-
+        validation error); d2E (second derivative of the energy wrt the strain)
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_strain_diagram_type'))
+
+    x_elastic_strain_diagram_polynomial_fit_order = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        Order of the polynomial fit
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_strain_diagram_polynomial_fit_order'))
+
+
+class x_elastic_section_fitting_parameters(MSection):
+    '''
+    section collecting the fitting parameters used to calculate the elastic constants
+    '''
+
+    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_elastic_section_fitting_parameters'))
+
+    x_elastic_fitting_parameters_eta = Quantity(
+        type=np.dtype(np.float64),
+        shape=['x_elastic_number_of_deformations'],
+        description='''
+        eta values used to calculate the elastic constants
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_fitting_parameters_eta'))
+
+    x_elastic_fitting_parameters_polynomial_order = Quantity(
+        type=np.dtype(np.int32),
+        shape=['x_elastic_number_of_deformations'],
+        description='''
+        polynomial order used to fit the Energy vs. volume curve and to calculate the
+        elastic constants
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_fitting_parameters_polynomial_order'))
+
+
+class section_method(public.section_method):
+
+    m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_method'))
+
+    x_elastic_elastic_constant_order = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        Order of the elastic constant
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_elastic_constant_order'))
+
+    x_elastic_number_of_deformations = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        number of deformed structures equally spaced in strain, which are generated
+        between the maximum negative strain and the maximum positive one
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_number_of_deformations'))
+
+    x_elastic_deformation_types = Quantity(
+        type=np.dtype('U'),
+        shape=['x_elastic_number_of_deformations', 6],
+        description='''
+        deformation types
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_deformation_types'))
+
+    x_elastic_calculation_method = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        Method of calculation
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_calculation_method'))
+
+    x_elastic_code = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        Code used for the calculation of the elastic constants
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_code'))
+
+    x_elastic_max_lagrangian_strain = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        Maximum lagrangian strain used to calculate the elastic constants
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_max_lagrangian_strain'))
+
+    x_elastic_number_of_distorted_structures = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        Number of distorted structures used to calculate the elastic constants
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_number_of_distorted_structures'))
+
+    x_elastic_section_fitting_parameters = SubSection(
+        sub_section=SectionProxy('x_elastic_section_fitting_parameters'),
+        repeats=True,
+        a_legacy=LegacyDefinition(name='x_elastic_section_fitting_parameters'))
+
+
+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_elastic_2nd_order_constants_notation_matrix = Quantity(
+        type=np.dtype('U'),
+        shape=[6, 6],
+        description='''
+        Symmetry of the second-order elastic constant matrix in Voigt notation
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_2nd_order_constants_notation_matrix'))
+
+    x_elastic_2nd_order_constants_matrix = Quantity(
+        type=np.dtype(np.float64),
+        shape=[6, 6],
+        unit='pascal',
+        description='''
+        2nd order elastic constant (stiffness) matrix in GPa
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_2nd_order_constants_matrix'))
+
+    x_elastic_3rd_order_constants_matrix = Quantity(
+        type=np.dtype(np.float64),
+        shape=[6, 6, 6],
+        unit='pascal',
+        description='''
+        3rd order elastic constant (stiffness) matrix in GPa
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_3rd_order_constants_matrix'))
+
+    x_elastic_2nd_order_constants_compliance_matrix = Quantity(
+        type=np.dtype(np.float64),
+        shape=[6, 6],
+        unit='1 / pascal',
+        description='''
+        Elastic compliance matrix in 1/GPa
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_2nd_order_constants_compliance_matrix'))
+
+    x_elastic_Voigt_bulk_modulus = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='pascal',
+        description='''
+        Voigt bulk modulus
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_Voigt_bulk_modulus'))
+
+    x_elastic_Voigt_shear_modulus = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='pascal',
+        description='''
+        Voigt shear modulus
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_Voigt_shear_modulus'))
+
+    x_elastic_Reuss_bulk_modulus = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='pascal',
+        description='''
+        Reuss bulk modulus
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_Reuss_bulk_modulus'))
+
+    x_elastic_Reuss_shear_modulus = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='pascal',
+        description='''
+        Reuss shear modulus
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_Reuss_shear_modulus'))
+
+    x_elastic_Hill_bulk_modulus = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='pascal',
+        description='''
+        Hill bulk modulus
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_Hill_bulk_modulus'))
+
+    x_elastic_Hill_shear_modulus = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='pascal',
+        description='''
+        Hill shear modulus
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_Hill_shear_modulus'))
+
+    x_elastic_Voigt_Young_modulus = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='pascal',
+        description='''
+        Voigt Young modulus
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_Voigt_Young_modulus'))
+
+    x_elastic_Voigt_Poisson_ratio = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        Voigt Poisson ratio
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_Voigt_Poisson_ratio'))
+
+    x_elastic_Reuss_Young_modulus = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='pascal',
+        description='''
+        Reuss Young modulus
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_Reuss_Young_modulus'))
+
+    x_elastic_Reuss_Poisson_ratio = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        Reuss Poisson ratio
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_Reuss_Poisson_ratio'))
+
+    x_elastic_Hill_Young_modulus = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='pascal',
+        description='''
+        Hill Young modulus
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_Hill_Young_modulus'))
+
+    x_elastic_Hill_Poisson_ratio = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        Hill Poisson ratio
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_Hill_Poisson_ratio'))
+
+    x_elastic_eigenvalues = Quantity(
+        type=np.dtype(np.float64),
+        shape=[6],
+        unit='pascal',
+        description='''
+        Eigemvalues of the stiffness matrix
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_eigenvalues'))
+
+    x_elastic_section_strain_diagrams = SubSection(
+        sub_section=SectionProxy('x_elastic_section_strain_diagrams'),
+        repeats=True,
+        a_legacy=LegacyDefinition(name='x_elastic_section_strain_diagrams'))
+
+
+class section_system(public.section_system):
+
+    m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_system'))
+
+    x_elastic_space_group_number = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        Space-group number of the system
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_space_group_number'))
+
+    x_elastic_unit_cell_volume = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        Volume of the equilibrium unit cell
+        ''',
+        a_legacy=LegacyDefinition(name='x_elastic_unit_cell_volume'))
+
+
+m_package.__init_metainfo__()
-- 
GitLab