diff --git a/.vscode/settings.json b/.vscode/settings.json index 6a8819f554d9e4cba9072a3f47cba4da2513cbd5..baa0321cce049b038bbbbd12ecb4f9f1713870f2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -107,5 +107,5 @@ "python.testing.pytestArgs": ["tests"], "python.testing.unittestEnabled": false, "editor.defaultFormatter": "charliermarsh.ruff", - "editor.formatOnSave": true + "editor.formatOnSave": true, } diff --git a/dependencies/parsers/electronic b/dependencies/parsers/electronic index ec71a8ce90a053f6c7b7d950d604ff0d73be2943..5ab48226d434c8e4041ff45fce982b292c76da6d 160000 --- a/dependencies/parsers/electronic +++ b/dependencies/parsers/electronic @@ -1 +1 @@ -Subproject commit ec71a8ce90a053f6c7b7d950d604ff0d73be2943 +Subproject commit 5ab48226d434c8e4041ff45fce982b292c76da6d diff --git a/dependencies/schema/simulation/run b/dependencies/schema/simulation/run index 5651b5051dcec27a167f0fcc2aa859975a1bb09f..468acfb31a66f009a355ac9357b3a31c1b4d491c 160000 --- a/dependencies/schema/simulation/run +++ b/dependencies/schema/simulation/run @@ -1 +1 @@ -Subproject commit 5651b5051dcec27a167f0fcc2aa859975a1bb09f +Subproject commit 468acfb31a66f009a355ac9357b3a31c1b4d491c diff --git a/dependencies/schema/simulation/workflow b/dependencies/schema/simulation/workflow index bac47d1bf1e5a5af0a2c84571de16ed7530e3d2e..2f264537d3f71bd01087bbc4cba416ee33d79996 160000 --- a/dependencies/schema/simulation/workflow +++ b/dependencies/schema/simulation/workflow @@ -1 +1 @@ -Subproject commit bac47d1bf1e5a5af0a2c84571de16ed7530e3d2e +Subproject commit 2f264537d3f71bd01087bbc4cba416ee33d79996 diff --git a/gui/tests/artifacts.js b/gui/tests/artifacts.js index 91ec0a870db7efe494cdea96ec17cc87bd2c9fd8..cb756dad19a70fa7354f04610c2d7df7d82e11aa 100644 --- a/gui/tests/artifacts.js +++ b/gui/tests/artifacts.js @@ -2822,6 +2822,7 @@ window.nomadArtifacts = { "EELS", "XPS", "XRD", + "NMR", "unavailable" ] }, @@ -4220,6 +4221,34 @@ window.nomadArtifacts = { "aggregatable": true, "dynamic": false }, + "results.properties.magnetic.spin_spin_coupling.source": { + "name": "source", + "description": "Identifier for the source of the data: 'experiment' or 'simulation'.", + "type": { + "type_kind": "Enum", + "type_data": [ + "experiment", + "simulation" + ] + }, + "aggregatable": true, + "dynamic": false, + "suggestion": true + }, + "results.properties.magnetic.magnetic_susceptibility.source": { + "name": "source", + "description": "Identifier for the source of the data: 'experiment' or 'simulation'.", + "type": { + "type_kind": "Enum", + "type_data": [ + "experiment", + "simulation" + ] + }, + "aggregatable": true, + "dynamic": false, + "suggestion": true + }, "results.properties.optoelectronic.solar_cell.efficiency": { "name": "efficiency", "description": "Power conversion effciency of a solar cell in percentage %.", @@ -5492,6 +5521,36 @@ window.nomadArtifacts = { "nested": false, "repeats": true }, + "results.properties.electronic.electric_field_gradient": { + "name": "electric_field_gradient", + "description": "\n Base class for the electric field gradient information. This section is relevant\n for NMR and describes the potential generated my the nuclei in the system.\n ", + "nested": false, + "repeats": true + }, + "results.properties.magnetic": { + "name": "magnetic", + "description": "\n Magnetic properties.\n ", + "nested": false, + "repeats": false + }, + "results.properties.magnetic.magnetic_shielding": { + "name": "magnetic_shielding", + "description": "\n Base class for the atomic magnetic shielding information.\n ", + "nested": false, + "repeats": true + }, + "results.properties.magnetic.spin_spin_coupling": { + "name": "spin_spin_coupling", + "description": "\n Base class for the spin-spin coupling information.\n ", + "nested": false, + "repeats": true + }, + "results.properties.magnetic.magnetic_susceptibility": { + "name": "magnetic_susceptibility", + "description": "\n Base class for the magnetic susceptibility information.\n ", + "nested": false, + "repeats": true + }, "results.properties.optoelectronic": { "name": "optoelectronic", "description": "\n Optoelectronic properties.\n ", @@ -17843,6 +17902,25 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", + "name": "label", + "description": "Label to identify the method applied in the simulation. Allowed values are:\n\n| Label | Name | Reference |\n\n| ----- | ---- | ----------- |\n\n| `'DFT'` | Density Functional Theory | https://en.wikipedia.org/wiki/Density_functional_theory |\n\n| `'TB'` | Tight-Binding models | https://en.wikipedia.org/wiki/Tight_binding |\n\n| `'GW'` | GW approximation | https://en.wikipedia.org/wiki/GW_approximation |\n\n| `'DMFT'` | Dynamical Mean-Field Theory | https://en.wikipedia.org/wiki/GW_approximation |\n\n| `'BSE'` | Bethe-Salpeter Equation | https://en.wikipedia.org/wiki/Bethe-Salpeter_equation |\n\n| `'kMC'` | Kinetic Monte Carlo |https://en.wikipedia.org/wiki/Kinetic_Monte_Carlo |\n\n| `'NMR'` | Nuclear Magnetic Resonance | https://en.wikipedia.org/wiki/Nuclear_magnetic_resonance |", + "type": { + "type_kind": "Enum", + "type_data": [ + "DFT", + "TB", + "GW", + "DMFT", + "BSE", + "kMC", + "NMR" + ] + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", "name": "stress_tensor_method", "description": "Specifies the method used to calculate stress_tensor for, e.g., molecular dynamics\nand geometry optimization.\n\nThe allowed values are:\n\n* numeric\n\n* analytic", "type": { @@ -17853,7 +17931,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, + "m_parent_index": 2, "m_parent_sub_section": "quantities", "name": "starting_method_ref", "description": "Links the current section method to a section method containing the starting\nparameters.", @@ -17868,7 +17946,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, + "m_parent_index": 3, "m_parent_sub_section": "quantities", "name": "core_method_ref", "description": "Links the current section method to a section method containing the core settings.", @@ -17883,7 +17961,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, + "m_parent_index": 4, "m_parent_sub_section": "quantities", "name": "n_references", "description": "Number of references to the current method.", @@ -17895,7 +17973,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, + "m_parent_index": 5, "m_parent_sub_section": "quantities", "name": "methods_ref", "description": "Links the section method to other method sections. For instance, one calculation\nis a perturbation performed using a self-consistent field (SCF) calculation as\nstarting point, or a simulated system is partitioned in regions with different but\nconnected Hamiltonians (e.g., QM/MM, or a region treated via Kohn-Sham DFT\nembedded into a region treated via orbital-free DFT).", @@ -22091,6 +22169,217 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 34, "m_parent_sub_section": "section_definitions", + "name": "MagneticShielding", + "description": "Section containing the information of magnetic shielding tensors. This is the nuclear response of a material to shield the effects of an applied external field. It is:\n\n B_induced = - magnetic_shielding * B_external\n\nThe isotropic part can be calculated as 1 / 3 * Tr(magnetic_shielding).\n\nSee, e.g, https://pubs.acs.org/doi/10.1021/cr300108a.", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "value", + "description": "Value of the magnetic shielding tensor per atom. The first index runs for all the\natoms in the unit cell, while 3x3 refers to each axis direction. This quantity\nrelates with the induced magnetic field in the presence of an external magnetic as:\n\n B_induced = - magnetic_shielding * B_external", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_atoms", + 3, + 3 + ], + "unit": "dimensionless" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "isotropic_value", + "description": "Value of the isotropic part of the magnetic shielding tensor per atom. The first\nindex runs for all the atoms in the unit cell. This quantity relates with magnetic\nshielding tensor as:\n\n isotropic_value = 1 / 3 * Tr(value)\n\nThis part is relevant for solution state NMR or for powdered solids under magnetic\nangle spinning conditions.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_atoms" + ], + "unit": "dimensionless" + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 35, + "m_parent_sub_section": "section_definitions", + "name": "ElectricFieldGradient", + "description": "Section containing the information of electric field gradient tensors. These tensors are relevant for nuclear magnetic responses and address the interaction between the\nquadrupole moment of the nucleus and the electric field gradient (EFG) at the nucleus\nposition generated by the surrounding charges.\n\nThe eigenvalues of these tensors can be used to compute the quadrupolar coupling constant\nand the asymmetry parameter.\n\nSee, e.g, https://pubs.acs.org/doi/10.1021/cr300108a.", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "contribution", + "description": "Type of contribution to the electric field gradient (EFG). The total EFG is\ncomposed of `local` and `non_local` contributions.", + "type": { + "type_kind": "Enum", + "type_data": [ + "total", + "local", + "non_local" + ] + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "value", + "description": "Value of the electric field gradient (EFG) for each `contribution` per unit area.\nThe first index runs for all the atoms in the unit cell, while 3x3 refers to each\naxis direction.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_atoms", + 3, + 3 + ], + "unit": "volt / meter ** 2" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "quadrupolar_coupling_constant", + "description": "Quadrupolar coupling constant for each atom in the unit cell. It is computed from\nthe eigenvalues of the EFG tensor as:\n\n quadrupolar_coupling_constant = efg_zz * e * Z / h\n\nwhere efg_zz is the largest eigenvalue of the EFG tensor, Z is the atomic number.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_atoms" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "name": "asymmetry_parameter", + "description": "Asymmetry parameter for each atom in the unit cell. It is computed from the\neigenvalues of the EFG tensor as:\n\n asymmetry_parameter = (efg_xx - efg_yy) / efg_zz\n\nwhere efg_xx, efg_yy and efg_zz are the eigenvalues of the EFG tensor ordered\nsuch that |efg_zz| > |efg_yy| > |efg_xx|.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_atoms" + ] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 36, + "m_parent_sub_section": "section_definitions", + "name": "SpinSpinCoupling", + "description": "Section containing the information of spin-spin couplings. These are the indirect interactions between 2 nuclear spins that arises from hyperfine interactions between\nthe nuclei and local electrons.\n\nSynonyms:\n - IndirectSpinSpinCoupling", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "contribution", + "description": "Type of contribution to the indirect spin-spin coupling. The total indirect spin-spin\ncoupling is composed of:\n\n `total` = `direct_dipolar` + J_coupling\n\nWhere the J_coupling is:\n J_coupling = `fermi_contact`\n + `spin_dipolar`\n + `orbital_diamagnetic`\n + `orbital_paramagnetic`\n\nSee https://pubs.acs.org/doi/full/10.1021/cr300108a.", + "type": { + "type_kind": "Enum", + "type_data": [ + "total", + "direct_dipolar", + "fermi_contact", + "orbital_diamagnetic", + "orbital_paramagnetic", + "spin_dipolar" + ] + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "value", + "description": "Value of the indirect spin-spin couplings for each contribution. The first and second\nindices run for all the combinations of pairs of atoms in the unit cell, while\n3x3 refers to each axis direction.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_atoms", + "n_atoms", + 3, + 3 + ], + "unit": "joule" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "reduced_value", + "description": "Reduced value of the indirect spin-spin couplings for each contribution. The first and second\nindices run for all the combinations of pairs of atoms in the unit cell, while\n3x3 refers to each axis direction. It relates with the normal value as:\n\n reduced_value = value / (gyromagnetic_ratio_i * gyromagnetic_ratio_j * 2 * np.pi * hbar)\n\nwhere i, j runs for each atom in the unit cell.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_atoms", + "n_atoms", + 3, + 3 + ], + "unit": "kelvin ** 2 / joule" + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 37, + "m_parent_sub_section": "section_definitions", + "name": "MagneticSusceptibility", + "description": "Section containing the information of magnetic susceptibility tensor. Degree of magnetization of a material in the presence of a magnetic field.", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "scale_dimension", + "description": "Identifier of the scale dimension of the magnetic susceptibility tensor.", + "type": { + "type_kind": "Enum", + "type_data": [ + "microscopic", + "macroscopic" + ] + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "value", + "description": "Value of the magnetic susceptibility. The 3x3 refers to each axis direction.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + 3, + 3 + ] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 38, + "m_parent_sub_section": "section_definitions", "name": "BaseCalculation", "description": "Contains computed properties of a configuration as defined by the corresponding section system and with the simulation method defined by section method. The\nreferences to the system and method sections are given by system_ref and method_ref,\nrespectively.\n\nProperties derived from a group of configurations are not included in this section but\ncan be accessed in section workflow.", "base_sections": [ @@ -22138,7 +22427,7 @@ window.nomadArtifacts = { ], "type": { "type_kind": "reference", - "type_data": "/packages/8/section_definitions/36" + "type_data": "/packages/8/section_definitions/40" }, "shape": [] }, @@ -22165,7 +22454,7 @@ window.nomadArtifacts = { ], "type": { "type_kind": "reference", - "type_data": "/packages/8/section_definitions/36" + "type_data": "/packages/8/section_definitions/40" }, "shape": [ "n_references" @@ -22531,27 +22820,59 @@ window.nomadArtifacts = { "name": "radius_of_gyration", "sub_section": "/packages/8/section_definitions/33", "repeats": true + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 19, + "m_parent_sub_section": "sub_sections", + "name": "magnetic_shielding", + "sub_section": "/packages/8/section_definitions/34", + "repeats": true + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 20, + "m_parent_sub_section": "sub_sections", + "name": "electric_field_gradient", + "sub_section": "/packages/8/section_definitions/35", + "repeats": true + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 21, + "m_parent_sub_section": "sub_sections", + "name": "spin_spin_coupling", + "sub_section": "/packages/8/section_definitions/36", + "repeats": true + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 22, + "m_parent_sub_section": "sub_sections", + "name": "magnetic_susceptibility", + "sub_section": "/packages/8/section_definitions/37", + "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 35, + "m_parent_index": 39, "m_parent_sub_section": "section_definitions", "name": "ScfIteration", "description": "Every scf_iteration section represents a self-consistent field (SCF) iteration, and gives detailed information on the SCF procedure of the specified quantities.", "base_sections": [ - "/packages/8/section_definitions/34" + "/packages/8/section_definitions/38" ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 36, + "m_parent_index": 40, "m_parent_sub_section": "section_definitions", "name": "Calculation", "description": "Every calculation section contains the values computed during a *single configuration calculation*, i.e. a calculation performed on a given\nconfiguration of the system (as defined in section_system) and a given computational\nmethod (e.g., exchange-correlation method, basis sets, as defined in section_method).\n\nThe link between the current section calculation and the related\nsystem and method sections is established by the values stored in system_ref and\nmethod_ref, respectively.\n\nThe reason why information on the system configuration and computational method is\nstored separately is that several *single configuration calculations* can be performed\non the same system configuration, viz. several system configurations can be evaluated\nwith the same computational method. This storage strategy avoids redundancies.", "base_sections": [ - "/packages/8/section_definitions/34" + "/packages/8/section_definitions/38" ], "quantities": [ { @@ -22576,7 +22897,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "scf_iteration", - "sub_section": "/packages/8/section_definitions/35", + "sub_section": "/packages/8/section_definitions/39", "repeats": true } ] @@ -22984,7 +23305,7 @@ window.nomadArtifacts = { "m_parent_index": 5, "m_parent_sub_section": "sub_sections", "name": "calculation", - "sub_section": "/packages/8/section_definitions/36", + "sub_section": "/packages/8/section_definitions/40", "repeats": true } ] @@ -23020,6 +23341,35 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 0, "m_parent_sub_section": "section_definitions", + "name": "SourceInformation", + "description": "\n Base class used to easy identification of a property obtained from an experimental\n setup or from performing a computational simulation.\n ", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.properties.magnetic.magnetic_susceptibility.source", + "results.properties.magnetic.magnetic_susceptibility.source__suggestion" + ] + }, + "name": "source", + "description": "Identifier for the source of the data: 'experiment' or 'simulation'.", + "type": { + "type_kind": "Enum", + "type_data": [ + "experiment", + "simulation" + ] + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 1, + "m_parent_sub_section": "section_definitions", "name": "ElementalComposition", "description": "\n Section containing information about the concentration of an element,\n given by its atomic and mass fraction within the system or material.\n ", "more": { @@ -23210,7 +23560,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 1, + "m_parent_index": 2, "m_parent_sub_section": "section_definitions", "name": "LatticeParameters", "description": "\n Lattice parameters of a cell.\n ", @@ -23321,7 +23671,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 2, + "m_parent_index": 3, "m_parent_sub_section": "section_definitions", "name": "WyckoffSet", "description": "\n Section for storing Wyckoff set information. Only available for\n conventional cells that have undergone symmetry analysis.\n ", @@ -23399,7 +23749,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 3, + "m_parent_index": 4, "m_parent_sub_section": "section_definitions", "name": "Structure", "description": "\n Describes an atomistic structure.\n ", @@ -23560,21 +23910,21 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "lattice_parameters", - "sub_section": "/packages/10/section_definitions/1" + "sub_section": "/packages/10/section_definitions/2" }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "wyckoff_sets", - "sub_section": "/packages/10/section_definitions/2", + "sub_section": "/packages/10/section_definitions/3", "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 4, + "m_parent_index": 5, "m_parent_sub_section": "section_definitions", "name": "Structures", "description": "\n Contains full atomistic representations of the material in different\n forms.\n ", @@ -23585,7 +23935,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "structure_original", "description": "Contains a selected representative structure from the the original\ndata.", - "sub_section": "/packages/10/section_definitions/3", + "sub_section": "/packages/10/section_definitions/4", "repeats": false }, { @@ -23594,7 +23944,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "structure_conventional", "description": "Contains the conventional structure that is derived from\nstructure_original. This conventional stucture has been idealized and\nthe conventions employed by spglib are used.", - "sub_section": "/packages/10/section_definitions/3", + "sub_section": "/packages/10/section_definitions/4", "repeats": false }, { @@ -23603,14 +23953,14 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "structure_primitive", "description": "Contains the primitive structure that is derived from\nstructure_original. This primitive stucture has been idealized and the\nconventions employed by spglib are used.", - "sub_section": "/packages/10/section_definitions/3", + "sub_section": "/packages/10/section_definitions/4", "repeats": false } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 5, + "m_parent_index": 6, "m_parent_sub_section": "section_definitions", "name": "Symmetry", "description": "\n Section containing information about the symmetry of the material. All\n of these properties are derived by running a symmetry analysis on a\n representative geometry from the original data. This original geometry\n is stored in results.properties together with the primitive and\n conventional structures.\n ", @@ -23852,7 +24202,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 6, + "m_parent_index": 7, "m_parent_sub_section": "section_definitions", "name": "Cell", "description": "\n Properties of a unit cell.\n ", @@ -24014,7 +24364,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 7, + "m_parent_index": 8, "m_parent_sub_section": "section_definitions", "name": "SymmetryNew", "description": "\n Section containing information about the symmetry properties of a\n conventional cell related to a system.\n ", @@ -24309,14 +24659,14 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "wyckoff_sets", - "sub_section": "/packages/10/section_definitions/2", + "sub_section": "/packages/10/section_definitions/3", "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 8, + "m_parent_index": 9, "m_parent_sub_section": "section_definitions", "name": "CoreHole", "base_sections": [ @@ -24479,7 +24829,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 9, + "m_parent_index": 10, "m_parent_sub_section": "section_definitions", "name": "Relation", "description": "Contains information about the relation between two different systems.", @@ -24511,7 +24861,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 10, + "m_parent_index": 11, "m_parent_sub_section": "section_definitions", "name": "Coordination", "description": "Coordination number of an element, which represents the number of atoms directly bonded to the element.", @@ -24662,7 +25012,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 11, + "m_parent_index": 12, "m_parent_sub_section": "section_definitions", "name": "System", "description": "\n Describes a a structural part that has been identified within the entry.\n May be related to other systems.\n ", @@ -25490,7 +25840,7 @@ window.nomadArtifacts = { ] }, "name": "elemental_composition", - "sub_section": "/packages/10/section_definitions/0", + "sub_section": "/packages/10/section_definitions/1", "repeats": true }, { @@ -25498,7 +25848,7 @@ window.nomadArtifacts = { "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "system_relation", - "sub_section": "/packages/10/section_definitions/9", + "sub_section": "/packages/10/section_definitions/10", "repeats": false }, { @@ -25506,7 +25856,7 @@ window.nomadArtifacts = { "m_parent_index": 3, "m_parent_sub_section": "sub_sections", "name": "cell", - "sub_section": "/packages/10/section_definitions/6", + "sub_section": "/packages/10/section_definitions/7", "repeats": false }, { @@ -25514,7 +25864,7 @@ window.nomadArtifacts = { "m_parent_index": 4, "m_parent_sub_section": "sub_sections", "name": "symmetry", - "sub_section": "/packages/10/section_definitions/7", + "sub_section": "/packages/10/section_definitions/8", "repeats": false }, { @@ -25522,7 +25872,7 @@ window.nomadArtifacts = { "m_parent_index": 5, "m_parent_sub_section": "sub_sections", "name": "metal_coordination", - "sub_section": "/packages/10/section_definitions/10", + "sub_section": "/packages/10/section_definitions/11", "repeats": true }, { @@ -25533,13 +25883,13 @@ window.nomadArtifacts = { "more": { "nested": false }, - "sub_section": "/packages/10/section_definitions/8" + "sub_section": "/packages/10/section_definitions/9" } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 12, + "m_parent_index": 13, "m_parent_sub_section": "section_definitions", "name": "Material", "description": "\n Section containing information on the material composition and structure.\n ", @@ -25980,7 +26330,7 @@ window.nomadArtifacts = { ] }, "name": "elemental_composition", - "sub_section": "/packages/10/section_definitions/0", + "sub_section": "/packages/10/section_definitions/1", "repeats": true }, { @@ -25988,7 +26338,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "symmetry", - "sub_section": "/packages/10/section_definitions/5", + "sub_section": "/packages/10/section_definitions/6", "repeats": false }, { @@ -26001,14 +26351,14 @@ window.nomadArtifacts = { ] }, "name": "topology", - "sub_section": "/packages/10/section_definitions/11", + "sub_section": "/packages/10/section_definitions/12", "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 13, + "m_parent_index": 14, "m_parent_sub_section": "section_definitions", "name": "HubbardKanamoriModel", "description": "Setup of the Hubbard model used in DFT+U", @@ -26107,7 +26457,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 14, + "m_parent_index": 15, "m_parent_sub_section": "section_definitions", "name": "DFT", "description": "\n Methodology for a DFT calculation.\n ", @@ -26370,14 +26720,14 @@ window.nomadArtifacts = { ] }, "name": "hubbard_kanamori_model", - "sub_section": "/packages/10/section_definitions/13", + "sub_section": "/packages/10/section_definitions/14", "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 15, + "m_parent_index": 16, "m_parent_sub_section": "section_definitions", "name": "TB", "description": "\n Methodology for a Tight-Binding calculation.\n ", @@ -26430,7 +26780,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 16, + "m_parent_index": 17, "m_parent_sub_section": "section_definitions", "name": "ExcitedStateMethodology", "description": "\n Methodology for a Excited-State calculation.\n ", @@ -26528,12 +26878,12 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 17, + "m_parent_index": 18, "m_parent_sub_section": "section_definitions", "name": "GW", "description": "\n Methodology for a GW calculation.\n ", "base_sections": [ - "/packages/10/section_definitions/16" + "/packages/10/section_definitions/17" ], "quantities": [ { @@ -26567,12 +26917,12 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 18, + "m_parent_index": 19, "m_parent_sub_section": "section_definitions", "name": "BSE", "description": "\n Methodology for a BSE calculation.\n ", "base_sections": [ - "/packages/10/section_definitions/16" + "/packages/10/section_definitions/17" ], "quantities": [ { @@ -26652,7 +27002,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 19, + "m_parent_index": 20, "m_parent_sub_section": "section_definitions", "name": "DMFT", "description": "\n Methodology for a DMFT calculation.\n ", @@ -26789,7 +27139,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 20, + "m_parent_index": 21, "m_parent_sub_section": "section_definitions", "name": "QuantumCircuit", "quantities": [ @@ -26830,7 +27180,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 21, + "m_parent_index": 22, "m_parent_sub_section": "section_definitions", "name": "QuantumCMS", "quantities": [ @@ -26904,13 +27254,13 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "quantum_circuit", - "sub_section": "/packages/10/section_definitions/20" + "sub_section": "/packages/10/section_definitions/21" } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 22, + "m_parent_index": 23, "m_parent_sub_section": "section_definitions", "name": "Precision", "description": "\n Contains parameters for controlling or evaluating the convergence of the electronic structure.\n ", @@ -27021,7 +27371,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 23, + "m_parent_index": 24, "m_parent_sub_section": "section_definitions", "name": "Simulation", "description": "\n Contains method details for a simulation entry.\n ", @@ -27087,7 +27437,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "dft", - "sub_section": "/packages/10/section_definitions/14", + "sub_section": "/packages/10/section_definitions/15", "repeats": false }, { @@ -27095,7 +27445,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "tb", - "sub_section": "/packages/10/section_definitions/15", + "sub_section": "/packages/10/section_definitions/16", "repeats": false }, { @@ -27103,7 +27453,7 @@ window.nomadArtifacts = { "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "gw", - "sub_section": "/packages/10/section_definitions/17", + "sub_section": "/packages/10/section_definitions/18", "repeats": false }, { @@ -27111,7 +27461,7 @@ window.nomadArtifacts = { "m_parent_index": 3, "m_parent_sub_section": "sub_sections", "name": "bse", - "sub_section": "/packages/10/section_definitions/18", + "sub_section": "/packages/10/section_definitions/19", "repeats": false }, { @@ -27119,7 +27469,7 @@ window.nomadArtifacts = { "m_parent_index": 4, "m_parent_sub_section": "sub_sections", "name": "dmft", - "sub_section": "/packages/10/section_definitions/19", + "sub_section": "/packages/10/section_definitions/20", "repeats": false }, { @@ -27127,7 +27477,7 @@ window.nomadArtifacts = { "m_parent_index": 5, "m_parent_sub_section": "sub_sections", "name": "quantum_cms", - "sub_section": "/packages/10/section_definitions/21", + "sub_section": "/packages/10/section_definitions/22", "repeats": false }, { @@ -27135,14 +27485,14 @@ window.nomadArtifacts = { "m_parent_index": 6, "m_parent_sub_section": "sub_sections", "name": "precision", - "sub_section": "/packages/10/section_definitions/22", + "sub_section": "/packages/10/section_definitions/23", "repeats": false } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 24, + "m_parent_index": 25, "m_parent_sub_section": "section_definitions", "name": "XRDMethod", "description": "\n Methodology for an X-Ray Diffraction measurement.\n ", @@ -27176,7 +27526,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 25, + "m_parent_index": 26, "m_parent_sub_section": "section_definitions", "name": "MeasurementMethod", "description": "\n Contains method details for a measurement entry.\n ", @@ -27186,14 +27536,14 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "xrd", - "sub_section": "/packages/10/section_definitions/24", + "sub_section": "/packages/10/section_definitions/25", "repeats": false } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 26, + "m_parent_index": 27, "m_parent_sub_section": "section_definitions", "name": "Method", "description": "\n Contains a summary of the methodology that has been used in this entry.\n This methodology applies to all of the reported properties and\n determines the result of a single energy evalution. The individual\n properties may be further methodological details affect e.g. the\n sampling.\n ", @@ -27261,6 +27611,7 @@ window.nomadArtifacts = { "EELS", "XPS", "XRD", + "NMR", "unavailable" ] } @@ -27288,7 +27639,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "simulation", - "sub_section": "/packages/10/section_definitions/23", + "sub_section": "/packages/10/section_definitions/24", "repeats": false }, { @@ -27296,14 +27647,14 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "measurement", - "sub_section": "/packages/10/section_definitions/25", + "sub_section": "/packages/10/section_definitions/26", "repeats": false } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 27, + "m_parent_index": 28, "m_parent_sub_section": "section_definitions", "name": "MolecularDynamics", "description": "\n Methodology for molecular dynamics.\n ", @@ -27352,7 +27703,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 28, + "m_parent_index": 29, "m_parent_sub_section": "section_definitions", "name": "MDProvenance", "description": "\n Contains provenance information for properties derived from molecular\n dynamics simulations.\n ", @@ -27365,14 +27716,14 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "molecular_dynamics", - "sub_section": "/packages/10/section_definitions/27", + "sub_section": "/packages/10/section_definitions/28", "repeats": false } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 29, + "m_parent_index": 30, "m_parent_sub_section": "section_definitions", "name": "MDPropertySection", "description": "\n Base class for referring to molecular dynamics properties.\n ", @@ -27385,14 +27736,14 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "provenance", - "sub_section": "/packages/10/section_definitions/28", + "sub_section": "/packages/10/section_definitions/29", "repeats": false } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 30, + "m_parent_index": 31, "m_parent_sub_section": "section_definitions", "name": "DOS", "description": "\n Base class for density of states information.\n\n OLD VERSION: it will eventually be deprecated, please, don't use it!\n ", @@ -27426,12 +27777,12 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 31, + "m_parent_index": 32, "m_parent_sub_section": "section_definitions", "name": "DOSElectronic", "description": "\n Contains the total electronic density of states.\n\n OLD VERSION: it will eventually be deprecated.\n ", "base_sections": [ - "/packages/10/section_definitions/30" + "/packages/10/section_definitions/31" ], "quantities": [ { @@ -27493,7 +27844,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 32, + "m_parent_index": 33, "m_parent_sub_section": "section_definitions", "name": "DOSNew", "description": "\n Section containign the density of states data.\n\n It includes the total DOS and the projected DOS values. We differentiate `species_projected` as the\n projected DOS for same atomic species, `atom_projected` as the projected DOS for different\n atoms in the cell, and `orbital_projected` as the projected DOS for the orbitals of each\n atom.\n ", @@ -27619,17 +27970,17 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 33, + "m_parent_index": 34, "m_parent_sub_section": "section_definitions", "name": "DOSPhonon", "description": "\n Contains the phonon density of states.\n ", "base_sections": [ - "/packages/10/section_definitions/30" + "/packages/10/section_definitions/31" ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 34, + "m_parent_index": 35, "m_parent_sub_section": "section_definitions", "name": "DOSElectronicNew", "description": "\n Contains the electronic Density of States (DOS). This section can be repeated to refer to\n different methodologies (e.g., label = 'DFT', 'GW', 'TB', etc.), and it can be spin-polarized\n or not. The sub-section data points to each (if present) spin channels.\n ", @@ -27684,14 +28035,14 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "data", - "sub_section": "/packages/10/section_definitions/32", + "sub_section": "/packages/10/section_definitions/33", "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 35, + "m_parent_index": 36, "m_parent_sub_section": "section_definitions", "name": "BandStructure", "description": "\n Base class for band structure information.\n ", @@ -27748,22 +28099,22 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 36, + "m_parent_index": 37, "m_parent_sub_section": "section_definitions", "name": "BandStructurePhonon", "description": "\n This section stores information on a vibrational band structure\n evaluation along one-dimensional pathways in the reciprocal space.\n ", "base_sections": [ - "/packages/10/section_definitions/35" + "/packages/10/section_definitions/36" ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 37, + "m_parent_index": 38, "m_parent_sub_section": "section_definitions", "name": "BandStructureElectronic", "description": "\n This section stores information on a electonic band structure\n evaluation along one-dimensional pathways in the reciprocal space.\n ", "base_sections": [ - "/packages/10/section_definitions/35" + "/packages/10/section_definitions/36" ], "quantities": [ { @@ -27814,7 +28165,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 38, + "m_parent_index": 39, "m_parent_sub_section": "section_definitions", "name": "GreensFunctionsElectronic", "description": "\n Base class for Green's functions information.\n ", @@ -27980,7 +28331,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 39, + "m_parent_index": 40, "m_parent_sub_section": "section_definitions", "name": "HeatCapacityConstantVolume", "description": "\n Contains the values of the specific (per mass) and isochoric (constant\n volume) heat capacity at different temperatures.\n ", @@ -28012,7 +28363,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 40, + "m_parent_index": 41, "m_parent_sub_section": "section_definitions", "name": "EnergyFreeHelmholtz", "description": "\n Contains the values of the Helmholtz free energy per atom at constant\n volume and at different temperatures.\n ", @@ -28044,7 +28395,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 41, + "m_parent_index": 42, "m_parent_sub_section": "section_definitions", "name": "VibrationalProperties", "description": "\n Vibrational properties.\n ", @@ -28054,7 +28405,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "band_structure_phonon", - "sub_section": "/packages/10/section_definitions/36", + "sub_section": "/packages/10/section_definitions/37", "repeats": false }, { @@ -28062,7 +28413,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "dos_phonon", - "sub_section": "/packages/10/section_definitions/33", + "sub_section": "/packages/10/section_definitions/34", "repeats": false }, { @@ -28070,7 +28421,7 @@ window.nomadArtifacts = { "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "heat_capacity_constant_volume", - "sub_section": "/packages/10/section_definitions/39", + "sub_section": "/packages/10/section_definitions/40", "repeats": false }, { @@ -28078,14 +28429,14 @@ window.nomadArtifacts = { "m_parent_index": 3, "m_parent_sub_section": "sub_sections", "name": "energy_free_helmholtz", - "sub_section": "/packages/10/section_definitions/40", + "sub_section": "/packages/10/section_definitions/41", "repeats": false } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 42, + "m_parent_index": 43, "m_parent_sub_section": "section_definitions", "name": "EnergyVolumeCurve", "description": "\n Energy volume curve.\n ", @@ -28151,7 +28502,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 43, + "m_parent_index": 44, "m_parent_sub_section": "section_definitions", "name": "BulkModulus", "description": "\n Contains bulk modulus values calculated with different methodologies.\n ", @@ -28207,7 +28558,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 44, + "m_parent_index": 45, "m_parent_sub_section": "section_definitions", "name": "ShearModulus", "description": "\n Contains shear modulus values calculated with different methodologies.\n ", @@ -28254,7 +28605,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 45, + "m_parent_index": 46, "m_parent_sub_section": "section_definitions", "name": "GeometryOptimization", "description": "\n Geometry optimization results and settings.\n ", @@ -28267,7 +28618,7 @@ window.nomadArtifacts = { "description": "List of references to each section_single_configuration_calculation in\nthe optimization trajectory.", "type": { "type_kind": "reference", - "type_data": "/packages/8/section_definitions/36" + "type_data": "/packages/8/section_definitions/40" }, "shape": [ "0..*" @@ -28407,7 +28758,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 46, + "m_parent_index": 47, "m_parent_sub_section": "section_definitions", "name": "MechanicalProperties", "description": "\n Mechanical properties.\n ", @@ -28417,7 +28768,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "energy_volume_curve", - "sub_section": "/packages/10/section_definitions/42", + "sub_section": "/packages/10/section_definitions/43", "repeats": true }, { @@ -28430,7 +28781,7 @@ window.nomadArtifacts = { ] }, "name": "bulk_modulus", - "sub_section": "/packages/10/section_definitions/43", + "sub_section": "/packages/10/section_definitions/44", "repeats": true }, { @@ -28443,14 +28794,48 @@ window.nomadArtifacts = { ] }, "name": "shear_modulus", - "sub_section": "/packages/10/section_definitions/44", + "sub_section": "/packages/10/section_definitions/45", "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 47, + "m_parent_index": 48, + "m_parent_sub_section": "section_definitions", + "name": "ElectricFieldGradient", + "description": "\n Base class for the electric field gradient information. This section is relevant\n for NMR and describes the potential generated my the nuclei in the system.\n ", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "contribution", + "description": "Type of contribution to the electric field gradient (EFG). The total EFG is\ncomposed of `local` and `non_local` contributions.", + "type": { + "type_kind": "Enum", + "type_data": [ + "total", + "local", + "non_local" + ] + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "value", + "type": { + "type_kind": "quantity_reference", + "type_data": "/packages/8/section_definitions/35/quantities/1" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 49, "m_parent_sub_section": "section_definitions", "name": "ElectronicProperties", "description": "\n Electronic properties.\n ", @@ -28473,7 +28858,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "dos_electronic", - "sub_section": "/packages/10/section_definitions/31", + "sub_section": "/packages/10/section_definitions/32", "repeats": true }, { @@ -28481,7 +28866,7 @@ window.nomadArtifacts = { "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "dos_electronic_new", - "sub_section": "/packages/10/section_definitions/34", + "sub_section": "/packages/10/section_definitions/35", "repeats": true }, { @@ -28489,7 +28874,7 @@ window.nomadArtifacts = { "m_parent_index": 3, "m_parent_sub_section": "sub_sections", "name": "band_structure_electronic", - "sub_section": "/packages/10/section_definitions/37", + "sub_section": "/packages/10/section_definitions/38", "repeats": true }, { @@ -28497,14 +28882,160 @@ window.nomadArtifacts = { "m_parent_index": 4, "m_parent_sub_section": "sub_sections", "name": "greens_functions_electronic", - "sub_section": "/packages/10/section_definitions/38", + "sub_section": "/packages/10/section_definitions/39", + "repeats": true + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 5, + "m_parent_sub_section": "sub_sections", + "name": "electric_field_gradient", + "sub_section": "/packages/10/section_definitions/48", "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 48, + "m_parent_index": 50, + "m_parent_sub_section": "section_definitions", + "name": "MagneticShielding", + "description": "\n Base class for the atomic magnetic shielding information.\n ", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "value", + "type": { + "type_kind": "quantity_reference", + "type_data": "/packages/8/section_definitions/34/quantities/0" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 51, + "m_parent_sub_section": "section_definitions", + "name": "SpinSpinCoupling", + "description": "\n Base class for the spin-spin coupling information.\n ", + "base_sections": [ + "/packages/10/section_definitions/0" + ], + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "contribution", + "description": "Type of contribution to the indirect spin-spin coupling. The total indirect spin-spin\ncoupling is composed of:\n\n `total` = `direct_dipolar` + J_coupling\n\nWhere the J_coupling is:\n J_coupling = `fermi_contact`\n + `spin_dipolar`\n + `orbital_diamagnetic`\n + `orbital_paramagnetic`\n\nSee https://pubs.acs.org/doi/full/10.1021/cr300108a.", + "type": { + "type_kind": "Enum", + "type_data": [ + "total", + "direct_dipolar", + "fermi_contact", + "orbital_diamagnetic", + "orbital_paramagnetic", + "spin_dipolar" + ] + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "value", + "type": { + "type_kind": "quantity_reference", + "type_data": "/packages/8/section_definitions/36/quantities/1" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "reduced_value", + "type": { + "type_kind": "quantity_reference", + "type_data": "/packages/8/section_definitions/36/quantities/2" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 52, + "m_parent_sub_section": "section_definitions", + "name": "MagneticSusceptibility", + "description": "\n Base class for the magnetic susceptibility information.\n ", + "base_sections": [ + "/packages/10/section_definitions/0" + ], + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "scale_dimension", + "description": "Identifier of the scale dimension of the magnetic susceptibility tensor.", + "type": { + "type_kind": "Enum", + "type_data": [ + "microscopic", + "macroscopic" + ] + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "value", + "type": { + "type_kind": "quantity_reference", + "type_data": "/packages/8/section_definitions/37/quantities/1" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 53, + "m_parent_sub_section": "section_definitions", + "name": "MagneticProperties", + "description": "\n Magnetic properties.\n ", + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "magnetic_shielding", + "sub_section": "/packages/10/section_definitions/50", + "repeats": true + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "spin_spin_coupling", + "sub_section": "/packages/10/section_definitions/51", + "repeats": true + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 2, + "m_parent_sub_section": "sub_sections", + "name": "magnetic_susceptibility", + "sub_section": "/packages/10/section_definitions/52", + "repeats": true + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 54, "m_parent_sub_section": "section_definitions", "name": "QuantityDynamic", "description": "\n Contains the values for a quantity at different times.\n ", @@ -28550,12 +29081,12 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 49, + "m_parent_index": 55, "m_parent_sub_section": "section_definitions", "name": "VolumeDynamic", "description": "\n Contains volume values evaluated at different times.\n ", "base_sections": [ - "/packages/10/section_definitions/48" + "/packages/10/section_definitions/54" ], "quantities": [ { @@ -28575,12 +29106,12 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 50, + "m_parent_index": 56, "m_parent_sub_section": "section_definitions", "name": "PressureDynamic", "description": "\n Contains pressure values evaluated at different times.\n ", "base_sections": [ - "/packages/10/section_definitions/48" + "/packages/10/section_definitions/54" ], "quantities": [ { @@ -28600,12 +29131,12 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 51, + "m_parent_index": 57, "m_parent_sub_section": "section_definitions", "name": "TemperatureDynamic", "description": "\n Contains temperature values evaluated at different times.\n ", "base_sections": [ - "/packages/10/section_definitions/48" + "/packages/10/section_definitions/54" ], "quantities": [ { @@ -28625,12 +29156,12 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 52, + "m_parent_index": 58, "m_parent_sub_section": "section_definitions", "name": "EnergyDynamic", "description": "\n Contains energy values evaluated at different times.\n ", "base_sections": [ - "/packages/10/section_definitions/48" + "/packages/10/section_definitions/54" ], "quantities": [ { @@ -28650,12 +29181,12 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 53, + "m_parent_index": 59, "m_parent_sub_section": "section_definitions", "name": "Trajectory", "description": "\n Thermodynamic properties reported for an ensemble evolving in time.\n ", "base_sections": [ - "/packages/10/section_definitions/29" + "/packages/10/section_definitions/30" ], "quantities": [ { @@ -28689,7 +29220,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "temperature", - "sub_section": "/packages/10/section_definitions/51", + "sub_section": "/packages/10/section_definitions/57", "repeats": false }, { @@ -28697,7 +29228,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "pressure", - "sub_section": "/packages/10/section_definitions/50", + "sub_section": "/packages/10/section_definitions/56", "repeats": false }, { @@ -28705,7 +29236,7 @@ window.nomadArtifacts = { "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "volume", - "sub_section": "/packages/10/section_definitions/49", + "sub_section": "/packages/10/section_definitions/55", "repeats": false }, { @@ -28713,14 +29244,14 @@ window.nomadArtifacts = { "m_parent_index": 3, "m_parent_sub_section": "sub_sections", "name": "energy_potential", - "sub_section": "/packages/10/section_definitions/52", + "sub_section": "/packages/10/section_definitions/58", "repeats": false } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 54, + "m_parent_index": 60, "m_parent_sub_section": "section_definitions", "name": "ThermodynamicProperties", "description": "\n Thermodynamic properties.\n ", @@ -28735,20 +29266,20 @@ window.nomadArtifacts = { ] }, "name": "trajectory", - "sub_section": "/packages/10/section_definitions/53", + "sub_section": "/packages/10/section_definitions/59", "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 55, + "m_parent_index": 61, "m_parent_sub_section": "section_definitions", "name": "RadiusOfGyration", "description": "\n Contains Radius of Gyration values as a trajectory.\n ", "base_sections": [ - "/packages/10/section_definitions/48", - "/packages/10/section_definitions/29" + "/packages/10/section_definitions/54", + "/packages/10/section_definitions/30" ], "quantities": [ { @@ -28818,12 +29349,12 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 56, + "m_parent_index": 62, "m_parent_sub_section": "section_definitions", "name": "RadialDistributionFunction", "description": "\n Radial distribution function.\n ", "base_sections": [ - "/packages/10/section_definitions/29" + "/packages/10/section_definitions/30" ], "quantities": [ { @@ -28934,7 +29465,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 57, + "m_parent_index": 63, "m_parent_sub_section": "section_definitions", "name": "DiffractionPattern", "description": "\n Diffraction pattern.\n ", @@ -29007,7 +29538,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 58, + "m_parent_index": 64, "m_parent_sub_section": "section_definitions", "name": "StructuralProperties", "description": "\n Structural properties.\n ", @@ -29022,7 +29553,7 @@ window.nomadArtifacts = { ] }, "name": "radial_distribution_function", - "sub_section": "/packages/10/section_definitions/56", + "sub_section": "/packages/10/section_definitions/62", "repeats": true }, { @@ -29035,7 +29566,7 @@ window.nomadArtifacts = { ] }, "name": "radius_of_gyration", - "sub_section": "/packages/10/section_definitions/55", + "sub_section": "/packages/10/section_definitions/61", "repeats": true }, { @@ -29048,19 +29579,19 @@ window.nomadArtifacts = { ] }, "name": "diffraction_pattern", - "sub_section": "/packages/10/section_definitions/57", + "sub_section": "/packages/10/section_definitions/63", "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 59, + "m_parent_index": 65, "m_parent_sub_section": "section_definitions", "name": "MeanSquaredDisplacement", "description": "\n Mean Squared Displacements.\n ", "base_sections": [ - "/packages/10/section_definitions/29" + "/packages/10/section_definitions/30" ], "quantities": [ { @@ -29233,7 +29764,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 60, + "m_parent_index": 66, "m_parent_sub_section": "section_definitions", "name": "DynamicalProperties", "description": "\n Dynamical properties.\n ", @@ -29248,14 +29779,14 @@ window.nomadArtifacts = { ] }, "name": "mean_squared_displacement", - "sub_section": "/packages/10/section_definitions/59", + "sub_section": "/packages/10/section_definitions/65", "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 61, + "m_parent_index": 67, "m_parent_sub_section": "section_definitions", "name": "SolarCell", "description": "\n Properties of solar cells.\n ", @@ -29527,7 +30058,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 62, + "m_parent_index": 68, "m_parent_sub_section": "section_definitions", "name": "OptoelectronicProperties", "description": "\n Optoelectronic properties.\n ", @@ -29537,14 +30068,14 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "solar_cell", - "sub_section": "/packages/10/section_definitions/61", + "sub_section": "/packages/10/section_definitions/67", "repeats": false } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 63, + "m_parent_index": 69, "m_parent_sub_section": "section_definitions", "name": "Reactant", "description": "\n A reactant in a catalytic test reaction. A reactant is identified by having a conversion.\n ", @@ -29624,7 +30155,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 64, + "m_parent_index": 70, "m_parent_sub_section": "section_definitions", "name": "Product", "description": "\n A product of a catalytic test reaction. A product is identified by having a selectivity.\n ", @@ -29705,7 +30236,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 65, + "m_parent_index": 71, "m_parent_sub_section": "section_definitions", "name": "Rate", "quantities": [ @@ -29800,7 +30331,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 66, + "m_parent_index": 72, "m_parent_sub_section": "section_definitions", "name": "Reactivity", "description": "\n Properties of a catalytic test reaction.\n ", @@ -29965,7 +30496,7 @@ window.nomadArtifacts = { ] }, "name": "reactants", - "sub_section": "/packages/10/section_definitions/63", + "sub_section": "/packages/10/section_definitions/69", "repeats": true }, { @@ -29978,7 +30509,7 @@ window.nomadArtifacts = { ] }, "name": "products", - "sub_section": "/packages/10/section_definitions/64", + "sub_section": "/packages/10/section_definitions/70", "repeats": true }, { @@ -29991,14 +30522,14 @@ window.nomadArtifacts = { ] }, "name": "rates", - "sub_section": "/packages/10/section_definitions/65", + "sub_section": "/packages/10/section_definitions/71", "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 67, + "m_parent_index": 73, "m_parent_sub_section": "section_definitions", "name": "CatalystSynthesis", "description": "\n Synthesis of a heterogeneous catalyst.\n ", @@ -30058,7 +30589,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 68, + "m_parent_index": 74, "m_parent_sub_section": "section_definitions", "name": "CatalystCharacterization", "description": "\n Properties of a heterogeneous catalyst.\n ", @@ -30102,7 +30633,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 69, + "m_parent_index": 75, "m_parent_sub_section": "section_definitions", "name": "CatalyticProperties", "description": "\n Properties of Heterogeneous Catalysts.\n ", @@ -30112,7 +30643,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "reactivity", - "sub_section": "/packages/10/section_definitions/66", + "sub_section": "/packages/10/section_definitions/72", "repeats": false }, { @@ -30120,7 +30651,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "catalyst_synthesis", - "sub_section": "/packages/10/section_definitions/67", + "sub_section": "/packages/10/section_definitions/73", "repeats": false }, { @@ -30128,14 +30659,14 @@ window.nomadArtifacts = { "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "catalyst_characterization", - "sub_section": "/packages/10/section_definitions/68", + "sub_section": "/packages/10/section_definitions/74", "repeats": false } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 70, + "m_parent_index": 76, "m_parent_sub_section": "section_definitions", "name": "EELSInstrument", "description": "\n Base class for an EELS instrument.\n ", @@ -30279,7 +30810,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 71, + "m_parent_index": 77, "m_parent_sub_section": "section_definitions", "name": "EELSMethodology", "description": "\n Base class for the EELS methodology.\n ", @@ -30356,7 +30887,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 72, + "m_parent_index": 78, "m_parent_sub_section": "section_definitions", "name": "SpectraProvenance", "description": "\n Contains provenance information (mainly the methodology section) for spectra properties\n derived from an experiment or a calculation.\n ", @@ -30369,7 +30900,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "eels", - "sub_section": "/packages/10/section_definitions/71" + "sub_section": "/packages/10/section_definitions/77" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -30383,7 +30914,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 73, + "m_parent_index": 79, "m_parent_sub_section": "section_definitions", "name": "Spectra", "description": "\n Base class for Spectra calculation information as obtained from an experiment or a computation.\n ", @@ -30492,13 +31023,13 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "provenance", - "sub_section": "/packages/10/section_definitions/72" + "sub_section": "/packages/10/section_definitions/78" } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 74, + "m_parent_index": 80, "m_parent_sub_section": "section_definitions", "name": "SpectroscopicProperties", "description": "\n Spectroscopic properties.\n ", @@ -30513,14 +31044,14 @@ window.nomadArtifacts = { ] }, "name": "spectra", - "sub_section": "/packages/10/section_definitions/73", + "sub_section": "/packages/10/section_definitions/79", "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 75, + "m_parent_index": 81, "m_parent_sub_section": "section_definitions", "name": "Properties", "description": "\n Contains the physical properties that have been calculated or used in\n this entry.\n ", @@ -30569,7 +31100,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "structural", - "sub_section": "/packages/10/section_definitions/58", + "sub_section": "/packages/10/section_definitions/64", "repeats": false }, { @@ -30577,7 +31108,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "dynamical", - "sub_section": "/packages/10/section_definitions/60", + "sub_section": "/packages/10/section_definitions/66", "repeats": false }, { @@ -30585,7 +31116,7 @@ window.nomadArtifacts = { "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "structures", - "sub_section": "/packages/10/section_definitions/4", + "sub_section": "/packages/10/section_definitions/5", "repeats": false }, { @@ -30593,7 +31124,7 @@ window.nomadArtifacts = { "m_parent_index": 3, "m_parent_sub_section": "sub_sections", "name": "vibrational", - "sub_section": "/packages/10/section_definitions/41", + "sub_section": "/packages/10/section_definitions/42", "repeats": false }, { @@ -30601,62 +31132,70 @@ window.nomadArtifacts = { "m_parent_index": 4, "m_parent_sub_section": "sub_sections", "name": "electronic", - "sub_section": "/packages/10/section_definitions/47", + "sub_section": "/packages/10/section_definitions/49", "repeats": false }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 5, "m_parent_sub_section": "sub_sections", - "name": "optoelectronic", - "sub_section": "/packages/10/section_definitions/62", + "name": "magnetic", + "sub_section": "/packages/10/section_definitions/53", "repeats": false }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 6, "m_parent_sub_section": "sub_sections", - "name": "catalytic", - "sub_section": "/packages/10/section_definitions/69", + "name": "optoelectronic", + "sub_section": "/packages/10/section_definitions/68", "repeats": false }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 7, "m_parent_sub_section": "sub_sections", - "name": "mechanical", - "sub_section": "/packages/10/section_definitions/46", + "name": "catalytic", + "sub_section": "/packages/10/section_definitions/75", "repeats": false }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 8, "m_parent_sub_section": "sub_sections", - "name": "thermodynamic", - "sub_section": "/packages/10/section_definitions/54", + "name": "mechanical", + "sub_section": "/packages/10/section_definitions/47", "repeats": false }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 9, "m_parent_sub_section": "sub_sections", - "name": "spectroscopic", - "sub_section": "/packages/10/section_definitions/74", + "name": "thermodynamic", + "sub_section": "/packages/10/section_definitions/60", "repeats": false }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 10, "m_parent_sub_section": "sub_sections", + "name": "spectroscopic", + "sub_section": "/packages/10/section_definitions/80", + "repeats": false + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 11, + "m_parent_sub_section": "sub_sections", "name": "geometry_optimization", - "sub_section": "/packages/10/section_definitions/45", + "sub_section": "/packages/10/section_definitions/46", "repeats": false } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 76, + "m_parent_index": 82, "m_parent_sub_section": "section_definitions", "name": "ELN", "quantities": [ @@ -30798,7 +31337,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 77, + "m_parent_index": 83, "m_parent_sub_section": "section_definitions", "name": "Results", "description": "\n Contains a summary of the entry contents.\n ", @@ -30808,7 +31347,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "material", - "sub_section": "/packages/10/section_definitions/12", + "sub_section": "/packages/10/section_definitions/13", "repeats": false }, { @@ -30816,7 +31355,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "method", - "sub_section": "/packages/10/section_definitions/26", + "sub_section": "/packages/10/section_definitions/27", "repeats": false }, { @@ -30824,7 +31363,7 @@ window.nomadArtifacts = { "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "properties", - "sub_section": "/packages/10/section_definitions/75", + "sub_section": "/packages/10/section_definitions/81", "repeats": false }, { @@ -30832,7 +31371,7 @@ window.nomadArtifacts = { "m_parent_index": 3, "m_parent_sub_section": "sub_sections", "name": "eln", - "sub_section": "/packages/10/section_definitions/76", + "sub_section": "/packages/10/section_definitions/82", "repeats": false } ] @@ -37130,7 +37669,7 @@ window.nomadArtifacts = { "categories": [ "/packages/26/category_definitions/0" ], - "sub_section": "/packages/10/section_definitions/77" + "sub_section": "/packages/10/section_definitions/83" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -92340,123 +92879,35 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 0, "m_parent_sub_section": "section_definitions", - "name": "DMFTResults", + "name": "DFTPlusTBPlusDMFTResults", "description": "Groups DFT, TB and DMFT outputs: band gaps (all), DOS (DFT, TB), band structures (DFT, TB), Greens functions (DMFT). The ResultsNormalizer takes care\nof adding a label 'DFT', 'PROJECTION, or 'DMFT' in the method `get_dmft_workflow_properties`.", "base_sections": [ "/packages/51/section_definitions/1" ], - "quantities": [ + "sub_sections": [ { - "m_def": "nomad.metainfo.metainfo.Quantity", + "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 0, - "m_parent_sub_section": "quantities", - "name": "band_gap_dft", - "description": "DFT band gap.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/19" - }, - "shape": [ - "*" - ] + "m_parent_sub_section": "sub_sections", + "name": "dft_outputs", + "sub_section": "/packages/51/section_definitions/7", + "repeats": false }, { - "m_def": "nomad.metainfo.metainfo.Quantity", + "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 1, - "m_parent_sub_section": "quantities", - "name": "band_gap_tb", - "description": "TB band gap.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/19" - }, - "shape": [ - "*" - ] + "m_parent_sub_section": "sub_sections", + "name": "tb_outputs", + "sub_section": "/packages/51/section_definitions/7", + "repeats": false }, { - "m_def": "nomad.metainfo.metainfo.Quantity", + "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 2, - "m_parent_sub_section": "quantities", - "name": "band_gap_dmft", - "description": "DMFT band gap.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/19" - }, - "shape": [ - "*" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, - "m_parent_sub_section": "quantities", - "name": "band_structure_dft", - "description": "Ref to the DFT band structure.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/14" - }, - "shape": [ - "*" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, - "m_parent_sub_section": "quantities", - "name": "dos_dft", - "description": "Ref to the DFT density of states.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/17" - }, - "shape": [ - "*" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, - "m_parent_sub_section": "quantities", - "name": "band_structure_tb", - "description": "Ref to the TB band structure.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/14" - }, - "shape": [ - "*" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 6, - "m_parent_sub_section": "quantities", - "name": "dos_tb", - "description": "Ref to the TB density of states.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/17" - }, - "shape": [ - "*" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 7, - "m_parent_sub_section": "quantities", - "name": "greens_functions_dmft", - "description": "Ref to the DMFT Greens functions.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/29" - }, - "shape": [ - "*" - ] + "m_parent_sub_section": "sub_sections", + "name": "dmft_outputs", + "sub_section": "/packages/51/section_definitions/7", + "repeats": false } ] }, @@ -92464,38 +92915,16 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 1, "m_parent_sub_section": "section_definitions", - "name": "DMFTMethod", - "description": "Groups DFT, TB and DMFT input methodologies: starting XC functional, electrons representation (basis set), TB method reference, DMFT method reference.", + "name": "DFTPlusTBPlusDMFTMethod", + "description": "Specifies all DFT, TB and DMFT input methodologies: starting XC functional, electrons representation (basis set), TB method reference, DMFT method reference.", "base_sections": [ - "/packages/51/section_definitions/0" + "/packages/51/section_definitions/6" ], "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "starting_point", - "description": "Starting point (XC functional or HF) used.", - "type": { - "type_kind": "reference", - "type_data": "/packages/6/section_definitions/22" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, - "m_parent_sub_section": "quantities", - "name": "electrons_representation", - "description": "Basis set used.", - "type": { - "type_kind": "reference", - "type_data": "/packages/6/section_definitions/18" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, - "m_parent_sub_section": "quantities", "name": "tb_method_ref", "description": "TB methodology reference.", "type": { @@ -92505,7 +92934,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, + "m_parent_index": 1, "m_parent_sub_section": "quantities", "name": "dmft_method_ref", "description": "DMFT methodology reference.", @@ -92520,10 +92949,10 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 2, "m_parent_sub_section": "section_definitions", - "name": "DMFT", + "name": "DFTPlusTBPlusDMFT", "description": "The DMFT workflow is generated in an extra EntryArchive IF both the TB SinglePoint and the DMFT SinglePoint EntryArchives are present in the upload.", "base_sections": [ - "/packages/51/section_definitions/4" + "/packages/51/section_definitions/5" ], "sub_sections": [ { @@ -93411,7 +93840,7 @@ window.nomadArtifacts = { ], "type": { "type_kind": "reference", - "type_data": "/packages/8/section_definitions/36" + "type_data": "/packages/8/section_definitions/40" }, "shape": [] }, @@ -93435,7 +93864,7 @@ window.nomadArtifacts = { "description": "List of references to each calculation section in the simulation.", "type": { "type_kind": "reference", - "type_data": "/packages/8/section_definitions/36" + "type_data": "/packages/8/section_definitions/40" }, "shape": [ "n_calculations" @@ -93488,6 +93917,186 @@ window.nomadArtifacts = { "base_sections": [ "/packages/51/section_definitions/2" ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 5, + "m_parent_sub_section": "section_definitions", + "name": "BeyondDFT", + "description": "Base class used to normalize standard workflows beyond DFT containing two specific SinglePoint tasks (GWWorkflow = DFT + GW, DMFTWorkflow = DFT + DMFT,\nMaxEntWorkflow = DMFT + MaxEnt, and so on) and store the outputs in the self.results\nsection.", + "base_sections": [ + "/packages/51/section_definitions/4" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 6, + "m_parent_sub_section": "section_definitions", + "name": "DFTMethod", + "description": "Base class defining the DFT input methodologies: starting XC functional and electrons representation (basis set).", + "base_sections": [ + "/packages/51/section_definitions/0" + ], + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "starting_point", + "description": "Reference to the starting point (XC functional or HF) used.", + "type": { + "type_kind": "reference", + "type_data": "/packages/6/section_definitions/22" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "electrons_representation", + "description": "Reference to the basis set used.", + "type": { + "type_kind": "reference", + "type_data": "/packages/6/section_definitions/18" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 7, + "m_parent_sub_section": "section_definitions", + "name": "ElectronicStructureOutputs", + "description": "Base class defining the typical output properties of any electronic structure SinglePoint calculation: DFT, TB, DMFT, GW, MaxEnt, XS.", + "base_sections": [ + "/packages/51/section_definitions/1" + ], + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "band_gap", + "description": "Reference to the band gap section.", + "type": { + "type_kind": "reference", + "type_data": "/packages/8/section_definitions/19" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "dos", + "description": "Reference to the density of states section.", + "type": { + "type_kind": "reference", + "type_data": "/packages/8/section_definitions/17" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "band_structure", + "description": "Reference to the band structure section.", + "type": { + "type_kind": "reference", + "type_data": "/packages/8/section_definitions/14" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "name": "greens_functions", + "description": "Ref to the Green functions section.", + "type": { + "type_kind": "reference", + "type_data": "/packages/8/section_definitions/29" + }, + "shape": [ + "*" + ] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 8, + "m_parent_sub_section": "section_definitions", + "name": "MagneticOutputs", + "description": "Base class defining the typical output properties of magnetic SinglePoint calculations.", + "base_sections": [ + "/packages/51/section_definitions/1" + ], + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "magnetic_shielding", + "description": "Reference to the magnetic shielding tensors.", + "type": { + "type_kind": "reference", + "type_data": "/packages/8/section_definitions/34" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "electric_field_gradient", + "description": "Reference to the electric field gradient tensors.", + "type": { + "type_kind": "reference", + "type_data": "/packages/8/section_definitions/35" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "spin_spin_coupling", + "description": "Reference to the spin-spin coupling tensors.", + "type": { + "type_kind": "reference", + "type_data": "/packages/8/section_definitions/36" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "name": "magnetic_susceptibility_nmr", + "description": "Reference to the magnetic susceptibility tensors.", + "type": { + "type_kind": "reference", + "type_data": "/packages/8/section_definitions/37" + }, + "shape": [ + "*" + ] + } + ] } ] }, @@ -93781,95 +94390,27 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 0, "m_parent_sub_section": "section_definitions", - "name": "GWResults", + "name": "DFTPlusGWResults", "description": "Groups DFT and GW outputs: band gaps, DOS, band structures. The ResultsNormalizer takes care of adding a label 'DFT' or 'GW' in the method `get_gw_workflow_properties`.", "base_sections": [ "/packages/51/section_definitions/1" ], - "quantities": [ + "sub_sections": [ { - "m_def": "nomad.metainfo.metainfo.Quantity", + "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 0, - "m_parent_sub_section": "quantities", - "name": "band_gap_dft", - "description": "Reference to the DFT band gap.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/19" - }, - "shape": [ - "*" - ] + "m_parent_sub_section": "sub_sections", + "name": "dft_outputs", + "sub_section": "/packages/51/section_definitions/7", + "repeats": false }, { - "m_def": "nomad.metainfo.metainfo.Quantity", + "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 1, - "m_parent_sub_section": "quantities", - "name": "band_gap_gw", - "description": "Reference to the GW band gap.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/19" - }, - "shape": [ - "*" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, - "m_parent_sub_section": "quantities", - "name": "dos_dft", - "description": "Reference to the DFT density of states.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/17" - }, - "shape": [ - "*" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, - "m_parent_sub_section": "quantities", - "name": "dos_gw", - "description": "Reference to the GW density of states.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/17" - }, - "shape": [ - "*" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, - "m_parent_sub_section": "quantities", - "name": "band_structure_dft", - "description": "Reference to the DFT band structure.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/14" - }, - "shape": [ - "*" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, - "m_parent_sub_section": "quantities", - "name": "band_structure_gw", - "description": "Reference to the GW band structure.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/14" - }, - "shape": [ - "*" - ] + "m_parent_sub_section": "sub_sections", + "name": "gw_outputs", + "sub_section": "/packages/51/section_definitions/7", + "repeats": false } ] }, @@ -93877,38 +94418,16 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 1, "m_parent_sub_section": "section_definitions", - "name": "GWMethod", - "description": "Groups DFT and GW input methodologies: starting XC functional, electrons representation (basis set), GW method reference.", + "name": "DFTPlusGWMethod", + "description": "Specifies both DFT and GW input methodologies: starting XC functional, electrons representation (basis set), GW method reference.", "base_sections": [ - "/packages/51/section_definitions/0" + "/packages/51/section_definitions/6" ], "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "starting_point", - "description": "Reference to the starting point (XC functional or HF) used.", - "type": { - "type_kind": "reference", - "type_data": "/packages/6/section_definitions/22" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, - "m_parent_sub_section": "quantities", - "name": "electrons_representation", - "description": "Reference to the basis set used.", - "type": { - "type_kind": "reference", - "type_data": "/packages/6/section_definitions/18" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, - "m_parent_sub_section": "quantities", "name": "gw_method_ref", "description": "Reference to the GW methodology.", "type": { @@ -93922,10 +94441,10 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 2, "m_parent_sub_section": "section_definitions", - "name": "GW", + "name": "DFTPlusGW", "description": "The GW workflow is generated in an extra EntryArchive IF both the DFT SinglePoint and the GW SinglePoint EntryArchives are present in the upload.", "base_sections": [ - "/packages/51/section_definitions/4" + "/packages/51/section_definitions/5" ], "sub_sections": [ { @@ -93959,67 +94478,27 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 0, "m_parent_sub_section": "section_definitions", - "name": "MaxEntResults", + "name": "DMFTPlusMaxEntResults", "description": "Groups DMFT and MaxEnt outputs: greens functions (DMFT, MaxEnt), band gaps (MaxEnt), DOS (MaxEnt), band structures (MaxEnt). The ResultsNormalizer takes care of adding a\nlabel 'DMFT' or 'MaxEnt' in the method `get_maxent_workflow_properties`.", "base_sections": [ "/packages/51/section_definitions/1" ], - "quantities": [ + "sub_sections": [ { - "m_def": "nomad.metainfo.metainfo.Quantity", + "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 0, - "m_parent_sub_section": "quantities", - "name": "greens_functions_dmft", - "description": "Ref to the DMFT Greens functions.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/29" - }, - "shape": [ - "*" - ] + "m_parent_sub_section": "sub_sections", + "name": "dmft_outputs", + "sub_section": "/packages/51/section_definitions/7", + "repeats": false }, { - "m_def": "nomad.metainfo.metainfo.Quantity", + "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 1, - "m_parent_sub_section": "quantities", - "name": "band_gap_maxent", - "description": "MaxEnt band gap.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/19" - }, - "shape": [ - "*" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, - "m_parent_sub_section": "quantities", - "name": "dos_maxent", - "description": "Ref to the MaxEnt density of states (also called spectral function).", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/17" - }, - "shape": [ - "*" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, - "m_parent_sub_section": "quantities", - "name": "greens_functions_maxent", - "description": "Ref to the MaxEnt Greens functions.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/29" - }, - "shape": [ - "*" - ] + "m_parent_sub_section": "sub_sections", + "name": "maxent_outputs", + "sub_section": "/packages/51/section_definitions/7", + "repeats": false } ] }, @@ -94027,8 +94506,8 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 1, "m_parent_sub_section": "section_definitions", - "name": "MaxEntMethod", - "description": "Groups DMFT and MaxEnt input methodologies: DMFT method references, MaxEnt method reference.", + "name": "DMFTPlusMaxEntMethod", + "description": "Specifies both DMFT and MaxEnt input methodologies: DMFT method references, MaxEnt method reference.", "base_sections": [ "/packages/51/section_definitions/0" ], @@ -94061,10 +94540,10 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 2, "m_parent_sub_section": "section_definitions", - "name": "MaxEnt", + "name": "DMFTPlusMaxEnt", "description": "The MaxEnt (Maximum Entropy) workflow is generated in an extra EntryArchive IF both the DMFT SinglePoint and the MaxEnt SinglePoint EntryArchives are present in the upload.", "base_sections": [ - "/packages/51/section_definitions/4" + "/packages/51/section_definitions/5" ], "sub_sections": [ { @@ -95989,66 +96468,27 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 0, "m_parent_sub_section": "section_definitions", - "name": "TBResults", + "name": "FirstPrinciplesPlusTBResults", + "description": "Groups first principles and TB outputs: band gaps, DOS, band structures. The ResultsNormalizer takes care of adding a label 'FirstPrinciples' or 'TB' in the method\n`get_tb_workflow_properties`.", "base_sections": [ "/packages/51/section_definitions/1" ], - "quantities": [ + "sub_sections": [ { - "m_def": "nomad.metainfo.metainfo.Quantity", + "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 0, - "m_parent_sub_section": "quantities", - "name": "band_gap_first_principles", - "description": "Reference to the First-principles band gap.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/19" - }, - "shape": [ - "*" - ] + "m_parent_sub_section": "sub_sections", + "name": "first_principles_outputs", + "sub_section": "/packages/51/section_definitions/7", + "repeats": false }, { - "m_def": "nomad.metainfo.metainfo.Quantity", + "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 1, - "m_parent_sub_section": "quantities", - "name": "band_gap_tb", - "description": "Reference to the TB band gap.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/19" - }, - "shape": [ - "*" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, - "m_parent_sub_section": "quantities", - "name": "band_structure_first_principles", - "description": "Reference to the first-principles band structure.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/14" - }, - "shape": [ - "*" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, - "m_parent_sub_section": "quantities", - "name": "band_structure_tb", - "description": "Reference to the tight-Binding band structure.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/14" - }, - "shape": [ - "*" - ] + "m_parent_sub_section": "sub_sections", + "name": "tb_outputs", + "sub_section": "/packages/51/section_definitions/7", + "repeats": false } ] }, @@ -96056,7 +96496,8 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 1, "m_parent_sub_section": "section_definitions", - "name": "TBMethod", + "name": "FirstPrinciplesPlusTBMethod", + "description": "Specifies both the first principles and the TB input methodologies.", "base_sections": [ "/packages/51/section_definitions/0" ], @@ -96065,8 +96506,19 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", + "name": "first_principles_method_ref", + "description": "First principles methodology reference.", + "type": { + "type_kind": "reference", + "type_data": "/packages/6/section_definitions/44" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", "name": "tb_method_ref", - "description": "Reference to the tight-Binding methodology.", + "description": "TB methodology reference.", "type": { "type_kind": "reference", "type_data": "/packages/6/section_definitions/30" @@ -96078,7 +96530,8 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 2, "m_parent_sub_section": "section_definitions", - "name": "TB", + "name": "FirstPrinciplesPlusTB", + "description": "The TB (tight-binding) workflow is generated in an extra EntryArchive IF both the first principles SinglePoint and the TB SinglePoint EntryArchives are present in the upload.", "base_sections": [ "/packages/51/section_definitions/4" ], @@ -96560,96 +97013,26 @@ window.nomadArtifacts = { "base_sections": [ "/packages/51/section_definitions/1" ], - "quantities": [ + "sub_sections": [ { - "m_def": "nomad.metainfo.metainfo.Quantity", + "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 0, - "m_parent_sub_section": "quantities", - "name": "band_gap_dft", - "description": "Reference to the DFT band gap.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/19" - }, - "shape": [ - "*" - ] + "m_parent_sub_section": "sub_sections", + "name": "dft_outputs", + "sub_section": "/packages/51/section_definitions/7", + "repeats": false }, { - "m_def": "nomad.metainfo.metainfo.Quantity", + "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 1, - "m_parent_sub_section": "quantities", - "name": "band_gap_gw", - "description": "Reference to the GW band gap.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/19" - }, - "shape": [ - "*" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, - "m_parent_sub_section": "quantities", - "name": "band_structure_dft", - "description": "Reference to the DFT density of states.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/14" - }, - "shape": [ - "*" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, - "m_parent_sub_section": "quantities", - "name": "band_structure_gw", - "description": "Reference to the GW density of states.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/14" - }, - "shape": [ - "*" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, - "m_parent_sub_section": "quantities", - "name": "dos_dft", - "description": "Reference to the DFT band structure.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/17" - }, - "shape": [ - "*" - ] + "m_parent_sub_section": "sub_sections", + "name": "gw_outputs", + "sub_section": "/packages/51/section_definitions/7", + "repeats": false }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, - "m_parent_sub_section": "quantities", - "name": "dos_gw", - "description": "Reference to the GW band structure.", - "type": { - "type_kind": "reference", - "type_data": "/packages/8/section_definitions/17" - }, - "shape": [ - "*" - ] - } - ], - "sub_sections": [ { "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 0, + "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "spectra", "sub_section": "/packages/57/section_definitions/0", @@ -96673,7 +97056,7 @@ window.nomadArtifacts = { "name": "XS", "description": "The XS workflow is generated in an extra EntryArchive IF both the DFT SinglePoint and the PhotonPolarization EntryArchives are present in the upload.", "base_sections": [ - "/packages/51/section_definitions/4" + "/packages/51/section_definitions/5" ], "sub_sections": [ { diff --git a/nomad/config/__init__.py b/nomad/config/__init__.py index 3084f8d068af7a5b1421991b341a3435b8669aa9..99a5666cfe3b603b703e5dc35ce6eb6c456c440a 100644 --- a/nomad/config/__init__.py +++ b/nomad/config/__init__.py @@ -249,6 +249,11 @@ plugins = Plugins( mainfile_name_re=(r'^.*\.(gpw2|gpw)$'), mainfile_mime_re=r'application/(x-tar|octet-stream)', ), + 'parsers/magres': Parser( + python_package='electronicparsers.magres', + mainfile_name_re=(r'^.*\.magres'), + mainfile_contents_re=(r'\$magres-abinitio-v(\d\.)+'), + ), 'parsers/molcas': Parser( python_package='electronicparsers.molcas', mainfile_contents_re=r'M O L C A S', diff --git a/nomad/datamodel/results.py b/nomad/datamodel/results.py index 02b6bc159773c2dbdf599bff75f8aeaf54929405..559fab990facb1a79d791cdeece6f45a14293fdd 100644 --- a/nomad/datamodel/results.py +++ b/nomad/datamodel/results.py @@ -188,6 +188,10 @@ def available_properties(root: MSection) -> List[str]: 'electronic.dos_electronic': 'dos_electronic', 'electronic.dos_electronic_new': 'dos_electronic_new', 'electronic.greens_functions_electronic': 'greens_functions_electronic', + 'electronic.electric_field_gradient': 'electric_field_gradient', + 'magnetic.magnetic_shielding': 'magnetic_shielding', + 'magnetic.spin_spin_coupling': 'spin_spin_coupling', + 'magnetic.magnetic_susceptibility': 'magnetic_susceptibility', 'vibrational.dos_phonon': 'dos_phonon', 'vibrational.band_structure_phonon': 'band_structure_phonon', 'vibrational.energy_free_helmholtz': 'energy_free_helmholtz', @@ -283,6 +287,25 @@ else: ) +class SourceInformation(MSection): + m_def = Section( + description=""" + Base class used to easy identification of a property obtained from an experimental + setup or from performing a computational simulation. + """, + ) + source = Quantity( + type=MEnum('experiment', 'simulation'), + description=""" + Identifier for the source of the data: 'experiment' or 'simulation'. + """, + a_elasticsearch=[ + Elasticsearch(material_entry_type), + Elasticsearch(suggestion='default'), + ], + ) + + class ElementalComposition(MSection): m_def = Section( description=""" @@ -2171,6 +2194,7 @@ class Method(MSection): 'EELS', 'XPS', 'XRD', + 'NMR', config.services.unavailable_value, ), description=""" @@ -2785,6 +2809,18 @@ class MechanicalProperties(MSection): ) +class ElectricFieldGradient(MSection): + m_def = Section( + description=""" + Base class for the electric field gradient information. This section is relevant + for NMR and describes the potential generated my the nuclei in the system. + """, + ) + if runschema: + contribution = runschema.calculation.ElectricFieldGradient.contribution.m_copy() + value = Quantity(type=runschema.calculation.ElectricFieldGradient.value) + + class ElectronicProperties(MSection): m_def = Section( description=""" @@ -2804,6 +2840,61 @@ class ElectronicProperties(MSection): greens_functions_electronic = SubSection( sub_section=GreensFunctionsElectronic.m_def, repeats=True ) + electric_field_gradient = SubSection( + sub_section=ElectricFieldGradient.m_def, + repeats=True, + ) + + +class MagneticShielding(MSection): + m_def = Section( + description=""" + Base class for the atomic magnetic shielding information. + """, + ) + if runschema: + value = Quantity(type=runschema.calculation.MagneticShielding.value) + + +class SpinSpinCoupling(SourceInformation): + m_def = Section( + description=""" + Base class for the spin-spin coupling information. + """, + ) + if runschema: + contribution = runschema.calculation.SpinSpinCoupling.contribution.m_copy() + value = Quantity(type=runschema.calculation.SpinSpinCoupling.value) + reduced_value = Quantity( + type=runschema.calculation.SpinSpinCoupling.reduced_value + ) + + +class MagneticSusceptibility(SourceInformation): + m_def = Section( + description=""" + Base class for the magnetic susceptibility information. + """, + ) + if runschema: + scale_dimension = ( + runschema.calculation.MagneticSusceptibility.scale_dimension.m_copy() + ) + value = Quantity(type=runschema.calculation.MagneticSusceptibility.value) + + +class MagneticProperties(MSection): + m_def = Section( + description=""" + Magnetic properties. + """, + ) + magnetic_shielding = SubSection(sub_section=MagneticShielding.m_def, repeats=True) + spin_spin_coupling = SubSection(sub_section=SpinSpinCoupling.m_def, repeats=True) + magnetic_susceptibility = SubSection( + sub_section=MagneticSusceptibility.m_def, + repeats=True, + ) class QuantityDynamic(MSection): @@ -3694,7 +3785,7 @@ class Spectra(MSection): Elasticsearch(suggestion='default'), ], ) - label = Quantity( + label = Quantity( # TODO fix Spectra to inherit from SourceInformation type=MEnum('computation', 'experiment'), description=""" Identifier for the source of the spectra data, either 'computation' or 'experiment'. @@ -3761,6 +3852,7 @@ class Properties(MSection): structures = SubSection(sub_section=Structures.m_def, repeats=False) vibrational = SubSection(sub_section=VibrationalProperties.m_def, repeats=False) electronic = SubSection(sub_section=ElectronicProperties.m_def, repeats=False) + magnetic = SubSection(sub_section=MagneticProperties.m_def, repeats=False) optoelectronic = SubSection( sub_section=OptoelectronicProperties.m_def, repeats=False ) diff --git a/nomad/normalizing/method.py b/nomad/normalizing/method.py index 4cfde21a26f94c5008d04e83e85c0e632f99914d..814432a91aea5bd1642ac35b9fa5023ec538ed6a 100644 --- a/nomad/normalizing/method.py +++ b/nomad/normalizing/method.py @@ -81,6 +81,8 @@ class MethodNormalizer: # TODO: add normalizer for atom_parameters.label def get_method_name(section_method): method_name = config.services.unavailable_value + if section_method.label: + return section_method.label if section_method.electronic and section_method.electronic.method: method_name = section_method.electronic.method else: @@ -163,13 +165,18 @@ class MethodNormalizer: # TODO: add normalizer for atom_parameters.label # workflow_name if self.entry_archive.workflow2: - method.workflow_name = self.entry_archive.workflow2.m_def.name + workflow_name = ( + self.entry_archive.workflow2.name + if self.entry_archive.workflow2.name + else self.entry_archive.workflow2.m_def.name + ) + method.workflow_name = workflow_name # if the entry is a GW or XS workflow, keep method_name as DFT+XS - if method.workflow_name in ['GW', 'XS']: + if method.workflow_name in ['DFT+GW', 'XS']: gs_task = self.entry_archive.workflow2.tasks[0] # Ground-state task xs_task = self.entry_archive.workflow2.tasks[ -1 - ] # Excited-state (GW, XS) task + ] # Excited-state (GW or XS) task # Trying to resolve the gs_method and the representative method (repr_method) gs_method = None for input in gs_task.task.tasks[-1].inputs: @@ -203,18 +210,18 @@ class MethodNormalizer: # TODO: add normalizer for atom_parameters.label method_name = f'{get_method_name(repr_method)}+GW' elif xs_method.bse: method_name = f'{get_method_name(repr_method)}+BSE' - elif method.workflow_name == 'DMFT': + elif method.workflow_name in ['DFT+TB+DMFT', 'DFT+DMFT', 'TB+DMFT']: repr_method = ( self.entry_archive.workflow2.method.dmft_method_ref ) # DMFT method repr_method = repr_method.m_parent - method_name = 'TB+DMFT' - elif method.workflow_name == 'MaxEnt': + method_name = method.workflow_name + elif method.workflow_name == 'DMFT+MaxEnt': repr_method = ( self.entry_archive.workflow2.method.dmft_method_ref ) # DMFT method repr_method = repr_method.m_parent - method_name = 'DMFT+MaxEnt' + method_name = method.workflow_name # if only one method is specified, use it directly elif n_methods == 1: repr_method = methods[0] @@ -280,12 +287,12 @@ class MethodNormalizer: # TODO: add normalizer for atom_parameters.label except (IndexError, AttributeError): pass - if 'DFT' in self.method_name: + if self.method_name in ['DFT', 'NMR']: functional_long_name = functional_long_name_from_method() settings_basis_set = get_basis_set() # Fill electronic method metainfo - if self.method_name in ['DFT', 'DFT+U']: + if self.method_name in ['DFT', 'DFT+U', 'NMR']: simulation = DFTMethod( self.logger, entry_archive=self.entry_archive, @@ -330,9 +337,11 @@ class MethodNormalizer: # TODO: add normalizer for atom_parameters.label ).simulation() elif self.method_name in [ 'DMFT', + 'DFT+TB+DMFT', + 'DFT+DMFT', 'TB+DMFT', 'DMFT+MaxEnt', - ]: # TODO extend for 'DFT+DMFT', 'DFT+TB+DMFT' + ]: simulation = DMFTMethod( self.logger, repr_method=self.repr_method, @@ -537,7 +546,7 @@ class DFTMethod(ElectronicMethod): def simulation(self) -> Simulation: simulation = Simulation() - self._method.method_name = 'DFT' + self._method.method_name = 'DFT' if self._method_name != 'NMR' else 'NMR' dft = DFT() dft.basis_set_type = self.basis_set_type(self._repr_method) self._method.method_id = self.method_id_dft( diff --git a/nomad/normalizing/results.py b/nomad/normalizing/results.py index b4b2bd7adf4dd252c24702aca98678dc49860aaa..ee0e8272674ad5617332fdf85adbea8f27cef43d 100644 --- a/nomad/normalizing/results.py +++ b/nomad/normalizing/results.py @@ -73,6 +73,11 @@ from nomad.datamodel.results import ( EELSMethodology, SpectraProvenance, Spectra, + MagneticProperties, + MagneticShielding, + MagneticSusceptibility, + ElectricFieldGradient, + SpinSpinCoupling, ) re_label = re.compile('^([a-zA-Z][a-zA-Z]?)[^a-zA-Z]*') @@ -467,6 +472,36 @@ class ResultsNormalizer(Normalizer): gfs_root.append(gfs_results) return gfs_root + def resolve_electric_field_gradient( + self, path: list[str] + ) -> Union[List[ElectricFieldGradient], None]: + """Returns a section containing the references for the Electric Field Gradient. + This section is then stored under `archive.results.properties.electronic`. + + This section is populated only when there is a non empty array of + `electric_field_gradient.value`. + + Args: + path (list[str]): the path to the electric field gradient section to be extracted + from the self.entry_archive. + + Returns: + List[ElectricFieldGradient]: the mapped Electric Field Gradient. + """ + stored_data = traverse_reversed(self.entry_archive, path) + if not stored_data: + return None + mapped_data: List[ElectricFieldGradient] = [] + for data in stored_data: + contribution = data.contribution + value = data.value + if valid_array(value): + results_data = ElectricFieldGradient( + contribution=contribution, value=data + ) + mapped_data.insert(0, results_data) + return mapped_data + def resolve_spectra(self, path: list[str]) -> Union[List[Spectra], None]: """Returns a section containing the references for a Spectra. This section is then stored under `archive.results.properties.spectroscopic`. @@ -502,6 +537,97 @@ class ResultsNormalizer(Normalizer): spectra_root.insert(0, spectra_results) return spectra_root + def resolve_magnetic_shielding( + self, path: list[str] + ) -> Union[List[MagneticShielding], None]: + """Returns a section containing the references for the (atomic) Magnetic Shielding. + This section is then stored under `archive.results.properties.magnetic`. + + This section is populated only when there is a non empty array of + `magnetic_shielding.value`. + + Args: + path (list[str]): the path to the magnetic shielding section to be extracted + from the self.entry_archive. + + Returns: + List[MagneticShielding]: the mapped Magnetic Shielding. + """ + stored_data = traverse_reversed(self.entry_archive, path) + if not stored_data: + return None + mapped_data: List[MagneticShielding] = [] + for data in stored_data: + value = data.value + if valid_array(value): + results_data = MagneticShielding(value=data) + mapped_data.insert(0, results_data) + return mapped_data + + def resolve_spin_spin_coupling( + self, path: list[str] + ) -> Union[List[SpinSpinCoupling], None]: + """Returns a section containing the references for the Spin Spin Coupling. + This section is then stored under `archive.results.properties.magnetic`. + + This section is populated only when there is a non empty array of + `spin_spin_coupling.value`. + + Args: + path (list[str]): the path to the spin-spin coupling section to be extracted + from the self.entry_archive. + + Returns: + List[SpinSpinCoupling]: the mapped Spin Spin Coupling. + """ + stored_data = traverse_reversed(self.entry_archive, path) + if not stored_data: + return None + mapped_data: List[SpinSpinCoupling] = [] + for data in stored_data: + contribution = data.contribution + value = data.value + reduced_value = data.reduced_value + if valid_array(value) or valid_array(reduced_value): + results_data = SpinSpinCoupling( + source='simulation', + contribution=contribution, + value=data if valid_array(value) else None, + reduced_value=data if valid_array(reduced_value) else None, + ) + mapped_data.insert(0, results_data) + return mapped_data + + def resolve_magnetic_susceptibility( + self, path: list[str] + ) -> Union[List[MagneticSusceptibility], None]: + """Returns a section containing the references for the Magnetic Susceptibility. + This section is then stored under `archive.results.properties.magnetic`. + + This section is populated only when there is a non empty array of + `magnetic_susceptibility.value`. + + Args: + path (list[str]): the path to the magnetic susceptibility section to be extracted + from the self.entry_archive. + + Returns: + List[MagneticSusceptibility]: the mapped Magnetic Susceptibility. + """ + stored_data = traverse_reversed(self.entry_archive, path) + if not stored_data: + return None + mapped_data: List[MagneticSusceptibility] = [] + for data in stored_data: + scale_dimension = data.scale_dimension + value = data.value + if valid_array(value): + results_data = MagneticSusceptibility( + source='simulation', scale_dimension=scale_dimension, value=data + ) + mapped_data.insert(0, results_data) + return mapped_data + def _resolve_workflow_gs_properties( self, methods: list[str], properties: list[str] ) -> None: @@ -523,7 +649,7 @@ class ResultsNormalizer(Normalizer): for prop in properties: property_list = self.electronic_properties.get(prop) method_property_resolved = getattr(self, f'resolve_{prop}')( - ['workflow2', 'results', f'{prop}_{method}'] + ['workflow2', 'results', f'{method}_outputs', prop] ) for item in method_property_resolved: item.label = name @@ -557,7 +683,7 @@ class ResultsNormalizer(Normalizer): GreensFunctionsElectronic ] = self.electronic_properties.get('greens_functions') # type: ignore gfs_electronic_dmft = self.resolve_greens_functions( - ['workflow2', 'results', 'greens_functions_dmft'] + ['workflow2', 'results', 'dmft_outputs', 'greens_functions'] ) for item in gfs_electronic_dmft: item.label = 'DMFT' @@ -577,7 +703,12 @@ class ResultsNormalizer(Normalizer): for method in ['dmft', 'maxent']: name = 'MaxEnt' if method == 'maxent' else method.upper() gfs = self.resolve_greens_functions( - ['workflow2', 'results', f'greens_functions_{method}'] + [ + 'workflow2', + 'results', + f'{method}_outputs', + 'greens_functions', + ] ) for item in gfs: item.label = name @@ -980,6 +1111,7 @@ class ResultsNormalizer(Normalizer): List[DOSElectronic], List[DOSElectronicNew], List[GreensFunctionsElectronic], + List[ElectricFieldGradient], ], ] electronic_properties: ElectronicPropertyTypes = { @@ -994,6 +1126,9 @@ class ResultsNormalizer(Normalizer): 'greens_functions': self.resolve_greens_functions( ['run', 'calculation', 'greens_functions'] ), + 'electric_field_gradient': self.resolve_electric_field_gradient( + ['run', 'calculation', 'electric_field_gradient'] + ), } self.electronic_properties = electronic_properties # spectroscopic properties list @@ -1001,16 +1136,16 @@ class ResultsNormalizer(Normalizer): # Resolving GW, XS workflow properties workflow = self.entry_archive.workflow2 if workflow: - workflow_name = workflow.m_def.name - if workflow_name == 'GW': + workflow_name = workflow.name if workflow.name else workflow.m_def.name + if workflow_name == 'DFT+GW': self.get_gw_workflow_properties() - elif workflow_name == 'TB': + elif workflow_name == 'FirstPrinciples+TB': self.get_tb_workflow_properties() - elif workflow_name == 'DMFT': + elif workflow_name in ['DFT+TB+DMFT', 'DFT+DMFT', 'TB+DMFT']: self.get_dmft_workflow_properties() - elif workflow_name == 'MaxEnt': + elif workflow_name == 'DMFT+MaxEnt': self.get_maxent_workflow_properties() - elif workflow_name == 'PhotonPolarization': + elif workflow_name in ['PhotonPolarization', 'BSE']: spectra = self.resolve_spectra( ['workflow2', 'results', 'spectrum_polarization'] ) @@ -1035,6 +1170,26 @@ class ResultsNormalizer(Normalizer): spectroscopic.spectra = spectra properties.spectroscopic = spectroscopic + # Magnetic + magnetic_shielding = self.resolve_magnetic_shielding( + ['run', 'calculation', 'magnetic_shielding'] + ) + spin_spin_coupling = self.resolve_spin_spin_coupling( + ['run', 'calculation', 'spin_spin_coupling'] + ) + magnetic_susceptibility = self.resolve_magnetic_susceptibility( + ['run', 'calculation', 'magnetic_susceptibility'] + ) + if magnetic_shielding or spin_spin_coupling or magnetic_susceptibility: + magnetic = MagneticProperties() + if magnetic_shielding: + magnetic.magnetic_shielding = magnetic_shielding + if spin_spin_coupling: + magnetic.spin_spin_coupling = spin_spin_coupling + if magnetic_susceptibility: + magnetic.magnetic_susceptibility = magnetic_susceptibility + properties.magnetic = magnetic + # Vibrational bs_phonon = self.band_structure_phonon() dos_phonon = self.dos_phonon() diff --git a/tests/normalizing/conftest.py b/tests/normalizing/conftest.py index 3ca7a3ea03f474d1dad1a970eb478feca5233455..8429069aaef9108f769ee23cd0c9d895bc22b8bf 100644 --- a/tests/normalizing/conftest.py +++ b/tests/normalizing/conftest.py @@ -649,382 +649,61 @@ def add_template_greens_functions(template: EntryArchive) -> EntryArchive: return template -def get_template_gw_workflow() -> EntryArchive: - """Returns a basic archive template for a GW workflow entry, composed of two main tasks: - DFT GeometryOptimization and GW SinglePoint.""" - # Defining DFT and GW SinglePoint archives and adding band_structure and dos to them. - archive_dft = get_template_dft() - archive_gw = get_template_excited(type='GW') - archive_dft = add_template_band_structure(archive_dft) - archive_gw = add_template_band_structure(archive_gw) - archive_dft = add_template_dos(archive_dft) - archive_gw = add_template_dos(archive_gw) - # Normalizing SinglePoint archives - run_normalize(archive_dft) - run_normalize(archive_gw) - # Defining DFT and GW tasks for later the GW workflow - task_dft = TaskReference(task=archive_dft.workflow2) - task_dft.name = 'DFT' - task_dft.inputs = [ - Link(name='Input structure', section=archive_dft.run[-1].system[-1]) - ] - task_dft.outputs = [ - Link(name='Output DFT calculation', section=archive_dft.run[-1].calculation[-1]) - ] - task_gw = TaskReference(task=archive_gw.workflow2) - task_gw.name = 'GW' - task_gw.inputs = [ - Link(name='Output DFT calculation', section=archive_dft.run[-1].calculation[-1]) - ] - task_gw.outputs = [ - Link(name='Output GW calculation', section=archive_gw.run[-1].calculation[-1]) - ] - # GW workflow entry (no need of creating Method nor Calculation) - template = EntryArchive() +def add_template_magnetic_shielding( + template: EntryArchive, n_atoms: int = 1 +) -> EntryArchive: if runschema: - run = runschema.run.Run() - template.run.append(run) - run.program = archive_dft.run[-1].program - run.system = archive_dft.run[-1].system - if simulationworkflowschema: - workflow = simulationworkflowschema.GW() - workflow.name = 'GW' - workflow_method = simulationworkflowschema.GWMethod( - gw_method_ref=archive_gw.run[-1].method[-1].gw, - starting_point=archive_dft.run[-1].method[-1].dft.xc_functional, - electrons_representation=archive_dft.run[-1] - .method[-1] - .electrons_representation[-1], - ) - workflow.m_add_sub_section(simulationworkflowschema.GW.method, workflow_method) - workflow.m_add_sub_section( - simulationworkflowschema.GW.inputs, - Link(name='Input structure', section=archive_dft.run[-1].system[-1]), - ) - workflow.m_add_sub_section( - simulationworkflowschema.GW.outputs, - Link( - name='Output GW calculation', section=archive_gw.run[-1].calculation[-1] - ), - ) - workflow.m_add_sub_section(simulationworkflowschema.GW.tasks, task_dft) - workflow.m_add_sub_section(simulationworkflowschema.GW.tasks, task_gw) - template.workflow2 = workflow + scc = template.run[0].calculation[0] + sec_magnetic_shielding = runschema.calculation.MagneticShielding() + scc.magnetic_shielding.append(sec_magnetic_shielding) + + # Populate the section + identity_matrix = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]] + value = [] + for i in range(n_atoms): + val = [ + [(i + 1) * elem for elem in sub_list] for sub_list in identity_matrix + ] + value.append(val) + sec_magnetic_shielding.value = value return template -def get_template_dmft_workflow() -> EntryArchive: - # Defining Projection and DMFT SinglePoint archives and adding band_structure and greens_functions to them. - archive_tb = get_template_tb_wannier() - archive_dmft = get_template_dmft() - archive_tb = add_template_band_structure(archive_tb) - archive_dmft = add_template_greens_functions(archive_dmft) - # Normalizing SinglePoint archives BEFORE defining the DMFT workflow entry - run_normalize(archive_tb) - run_normalize(archive_dmft) - # Defining Projection and DMFT tasks for later the DMFT workflow - task_proj = TaskReference(task=archive_tb.workflow2) - task_proj.name = 'Projection' - task_proj.inputs = [ - Link(name='Input structure', section=archive_tb.run[-1].system[-1]) - ] - task_proj.outputs = [ - Link(name='Output TB calculation', section=archive_tb.run[-1].calculation[-1]) - ] - task_dmft = TaskReference(task=archive_dmft.workflow2) - task_dmft.name = 'DMFT' - task_dmft.inputs = [ - Link(name='Output TB calculation', section=archive_tb.run[-1].calculation[-1]) - ] - task_dmft.outputs = [ - Link( - name='Output DMFT calculation', section=archive_dmft.run[-1].calculation[-1] - ) - ] - # DMFT workflow entry (no need of creating Method nor Calculation) - template = EntryArchive() +def add_template_spin_spin_coupling( + template: EntryArchive, n_atoms: int = 1 +) -> EntryArchive: if runschema: - run = runschema.run.Run() - template.run.append(run) - run.program = archive_dmft.run[-1].program - run.system = archive_tb.run[-1].system - if simulationworkflowschema: - workflow = simulationworkflowschema.DMFT() - workflow.name = 'DMFT' - workflow_method = simulationworkflowschema.DMFTMethod( - tb_method_ref=archive_tb.run[-1].method[-1].tb, - dmft_method_ref=archive_dmft.run[-1].method[-1].dmft, - ) - workflow.m_add_sub_section( - simulationworkflowschema.DMFT.method, workflow_method - ) - workflow.m_add_sub_section( - simulationworkflowschema.DMFT.inputs, - Link(name='Input structure', section=archive_tb.run[-1].system[-1]), - ) - workflow.m_add_sub_section( - simulationworkflowschema.DMFT.outputs, - Link( - name='Output DMFT calculation', - section=archive_dmft.run[-1].calculation[-1], - ), - ) - workflow.m_add_sub_section(simulationworkflowschema.DMFT.tasks, task_proj) - workflow.m_add_sub_section(simulationworkflowschema.DMFT.tasks, task_dmft) - template.workflow2 = workflow - return template - + scc = template.run[0].calculation[0] + sec_iss_coupling = runschema.calculation.SpinSpinCoupling() + scc.spin_spin_coupling.append(sec_iss_coupling) -def get_template_maxent_workflow() -> EntryArchive: - # Defining Projection and DMFT SinglePoint archives and adding band_structure and greens_functions to them. - archive_dmft = get_template_dmft() - archive_maxent = get_template_maxent() - archive_dmft = add_template_greens_functions(archive_dmft) - archive_maxent = add_template_greens_functions(archive_maxent) - # Normalizing SinglePoint archives BEFORE defining the DMFT workflow entry - run_normalize(archive_dmft) - run_normalize(archive_maxent) - # Defining Projection and DMFT tasks for later the DMFT workflow - task_dmft = TaskReference(task=archive_dmft.workflow2) - task_dmft.name = 'DMFT' - task_dmft.inputs = [ - Link(name='Input structure', section=archive_dmft.run[-1].system[-1]) - ] - task_dmft.outputs = [ - Link( - name='Output DMFT calculation', section=archive_dmft.run[-1].calculation[-1] - ) - ] - task_maxent = TaskReference(task=archive_dmft.workflow2) - task_maxent.name = 'MaxEnt Sigma' - task_maxent.inputs = [ - Link( - name='Output DMFT calculation', section=archive_dmft.run[-1].calculation[-1] - ) - ] - task_maxent.outputs = [ - Link( - name='Output MaxEnt Sigma calculation', - section=archive_maxent.run[-1].calculation[-1], - ) - ] - # DMFT workflow entry (no need of creating Method) - template = EntryArchive() - if runschema: - run = runschema.run.Run() - template.run.append(run) - run.program = archive_dmft.run[-1].program - run.system = archive_dmft.run[-1].system - scc = runschema.calculation.Calculation() - run.calculation.append(scc) - scc.system_ref = run.system[-1] - template = add_template_dos(template) - if simulationworkflowschema: - workflow = simulationworkflowschema.MaxEnt() - workflow.name = 'MaxEnt' - workflow_method = simulationworkflowschema.MaxEntMethod( - dmft_method_ref=archive_dmft.run[-1].method[-1].dmft, - maxent_method_ref=archive_maxent.run[-1].method[-1], - ) - workflow.m_add_sub_section( - simulationworkflowschema.MaxEnt.method, workflow_method - ) - workflow.m_add_sub_section( - simulationworkflowschema.MaxEnt.inputs, - Link(name='Input structure', section=archive_dmft.run[-1].system[-1]), - ) - outputs = [ - Link( - name='Output MaxEnt Sigma calculation', - section=archive_dmft.run[-1].calculation[-1], - ), - Link( - name='Output MaxEnt calculation', - section=template.run[-1].calculation[-1], - ), + # Populate the section + sec_iss_coupling.contribution = 'total' + identity_matrix = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]] + value = [ + [ + [ + [(i + 1) * (j + 1) * elem for elem in sub_list] + for sub_list in identity_matrix + ] + for i in range(n_atoms) + ] + for j in range(n_atoms) ] - workflow.outputs = outputs - workflow.m_add_sub_section(simulationworkflowschema.MaxEnt.tasks, task_dmft) - workflow.m_add_sub_section(simulationworkflowschema.MaxEnt.tasks, task_maxent) - template.workflow2 = workflow + sec_iss_coupling.value = value return template -def get_template_bse_workflow() -> EntryArchive: - """Returns a basic archive template for a BSE workflow entry, composed of two tasks: - PhotonPolarization SinglePoint number 1 and PhotonPolarization SinglePoint number 2.""" - # Adding two spectras for both photon polarizations - archive_photon_1 = get_template_excited(type='Photon') - archive_photon_2 = get_template_excited(type='Photon') - n_energies = 11 - if runschema: - spectra_1 = runschema.calculation.Spectra( - type='XAS', - n_energies=n_energies, - excitation_energies=np.linspace(0, 10, n_energies) * ureg.eV, - intensities=np.linspace(100, 200, n_energies), - intensities_units='F/m', - ) - provenance_1 = runschema.calculation.ElectronicStructureProvenance( - label='photon', methodology=archive_photon_1.run[-1].method[-1] - ) - spectra_1.provenance.append(provenance_1) - archive_photon_1.run[-1].calculation[-1].spectra.append(spectra_1) - spectra_2 = runschema.calculation.Spectra( - type='XAS', - n_energies=n_energies, - excitation_energies=np.linspace(0, 10, n_energies) * ureg.eV, - intensities=np.linspace(200, 300, n_energies), - intensities_units='F/m', - ) - provenance_2 = runschema.calculation.ElectronicStructureProvenance( - label='photon', methodology=archive_photon_2.run[-1].method[-1] - ) - spectra_2.provenance.append(provenance_2) - archive_photon_2.run[-1].calculation[-1].spectra.append(spectra_2) - # Normalizing SinglePoint archives BEFORE defining the BSE workflow entry - run_normalize(archive_photon_1) - run_normalize(archive_photon_2) - # Defining Photon1 and Photon2 tasks for later the BSE workflow - task_photon_1 = TaskReference(task=archive_photon_1.workflow2) - task_photon_1.name = 'Photon 1' - task_photon_1.inputs = [ - Link(name='Input structure', section=archive_photon_1.run[-1].system[-1]) - ] - task_photon_1.outputs = [ - Link( - name='Output polarization 1', - section=archive_photon_1.run[-1].calculation[-1], - ) - ] - task_photon_2 = TaskReference(task=archive_photon_2.workflow2) - task_photon_2.name = 'Photon 2' - task_photon_2.inputs = [ - Link(name='Input structure', section=archive_photon_1.run[-1].system[-1]) - ] - task_photon_2.outputs = [ - Link( - name='Output polarization 2', - section=archive_photon_2.run[-1].calculation[-1], - ) - ] - # BSE workflow entry (no need of creating Calculation). We need to define BSE method. - template = EntryArchive() +def add_template_magnetic_susceptibility(template: EntryArchive) -> EntryArchive: if runschema: - run = runschema.run.Run() - template.run.append(run) - run.program = archive_photon_1.run[-1].program - run.system = archive_photon_1.run[-1].system - method = runschema.method.Method() - run.method.append(method) - method.bse = runschema.method.BSE(type='Singlet', solver='Lanczos-Haydock') - if simulationworkflowschema: - workflow = simulationworkflowschema.PhotonPolarization() - workflow.name = 'BSE' - workflow_method = simulationworkflowschema.PhotonPolarizationMethod( - bse_method_ref=template.run[-1].method[-1].bse - ) - workflow.m_add_sub_section( - simulationworkflowschema.PhotonPolarization.method, workflow_method - ) - spectras = [spectra_1, spectra_2] - workflow_results = simulationworkflowschema.PhotonPolarizationResults( - n_polarizations=2, spectrum_polarization=spectras - ) - workflow.m_add_sub_section( - simulationworkflowschema.PhotonPolarization.results, workflow_results - ) - workflow.m_add_sub_section( - simulationworkflowschema.PhotonPolarization.inputs, - Link(name='Input structure', section=archive_photon_1.run[-1].system[-1]), - ) - workflow.m_add_sub_section( - simulationworkflowschema.PhotonPolarization.inputs, - Link(name='Input BSE methodology', section=template.run[-1].method[-1]), - ) - workflow.m_add_sub_section( - simulationworkflowschema.PhotonPolarization.outputs, - Link( - name='Output polarization 1', - section=archive_photon_1.run[-1].calculation[-1], - ), - ) - workflow.m_add_sub_section( - simulationworkflowschema.PhotonPolarization.outputs, - Link( - name='Output polarization 2', - section=archive_photon_2.run[-1].calculation[-1], - ), - ) - workflow.m_add_sub_section( - simulationworkflowschema.PhotonPolarization.tasks, task_photon_1 - ) - workflow.m_add_sub_section( - simulationworkflowschema.PhotonPolarization.tasks, task_photon_2 - ) - template.workflow2 = workflow - return template - + scc = template.run[0].calculation[0] + sec_magn_susceptibility = runschema.calculation.MagneticSusceptibility() + scc.magnetic_susceptibility.append(sec_magn_susceptibility) -def get_template_xs_workflow() -> EntryArchive: - """Returns a basic archive template for a XS workflow entry, composed of two main tasks: - DFT GeometryOptimization and BSE workflow. The BSE workflow archive contains one - PhotonPolarization SinglePoint task.""" - # Defining DFT and GW SinglePoint archives and adding band_structure and dos to them. - archive_dft = get_template_dft() - archive_dft = add_template_band_structure(archive_dft) - archive_dft = add_template_dos(archive_dft) - archive_bse = get_template_bse_workflow() - # Normalizing SinglePoint archives BEFORE defining the XS workflow entry - run_normalize(archive_dft) - run_normalize(archive_bse) - # Defining DFT and BSE tasks for later the BS workflow - task_dft = TaskReference(task=archive_dft.workflow2) - task_dft.name = 'DFT' - task_dft.inputs = [ - Link(name='Input structure', section=archive_dft.run[-1].system[-1]) - ] - task_dft.outputs = [ - Link(name='Output DFT calculation', section=archive_dft.run[-1].calculation[-1]) - ] - task_bse = TaskReference(task=archive_bse.workflow2) - task_bse.name = 'BSE 1' - task_bse.inputs = [ - Link(name='Output DFT calculation', section=archive_dft.run[-1].calculation[-1]) - ] - task_bse.outputs = [ - Link(name='Polarization 1', section=archive_bse.workflow2.outputs[0].section), - Link(name='Polarization 2', section=archive_bse.workflow2.outputs[1].section), - ] - # XS (BSE) workflow entry (no need of creating Method nor Calculation) - template = EntryArchive() - if runschema: - run = runschema.run.Run() - template.run.append(run) - run.program = archive_dft.run[-1].program - run.system = archive_dft.run[-1].system - if simulationworkflowschema: - workflow = simulationworkflowschema.XS() - workflow.name = 'XS' - workflow.m_add_sub_section( - simulationworkflowschema.XS.inputs, - Link(name='Input structure', section=archive_dft.run[-1].system[-1]), - ) - workflow.m_add_sub_section( - simulationworkflowschema.XS.outputs, - Link( - name='Polarization 1', section=archive_bse.workflow2.outputs[0].section - ), - ) - workflow.m_add_sub_section( - simulationworkflowschema.XS.outputs, - Link( - name='Polarization 2', section=archive_bse.workflow2.outputs[1].section - ), - ) - workflow.m_add_sub_section(simulationworkflowschema.XS.tasks, task_dft) - workflow.m_add_sub_section(simulationworkflowschema.XS.tasks, task_bse) - template.workflow2 = workflow + # Populate the section + sec_magn_susceptibility.scale_dimension = 'macroscopic' + value = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]] + sec_magn_susceptibility.value = value return template @@ -1504,41 +1183,6 @@ def single_point() -> EntryArchive: return run_normalize(template) -@pytest.fixture(scope='session') -def gw_workflow() -> EntryArchive: - """GW workflow (DFT+GW) EntryArchive.""" - template = get_template_gw_workflow() - return run_normalize(template) - - -@pytest.fixture(scope='session') -def dmft_workflow() -> EntryArchive: - """DMFT workflow (Projection+DMFT) EntryArchive.""" - template = get_template_dmft_workflow() - return run_normalize(template) - - -@pytest.fixture(scope='session') -def maxent_workflow() -> EntryArchive: - """MaxEnt workflow (DMFT+MaxEnt Sigma) EntryArchive.""" - template = get_template_maxent_workflow() - return run_normalize(template) - - -@pytest.fixture(scope='session') -def bse_workflow() -> EntryArchive: - """BSE workflow (Photon1+Photon2) EntryArchive""" - template = get_template_bse_workflow() - return run_normalize(template) - - -@pytest.fixture(scope='session') -def xs_workflow() -> EntryArchive: - """XS workflow (DFT+BSEworkflow) EntryArchive.""" - template = get_template_xs_workflow() - return run_normalize(template) - - @pytest.fixture(scope='session') def geometry_optimization() -> EntryArchive: template = get_template_dft() diff --git a/tests/normalizing/test_properties.py b/tests/normalizing/test_properties.py index afc08b9f0ab1af7c219a43a8f137cb77d31a419c..80a3b4a80d9a7827dd88cc93e25479e6afad2180 100644 --- a/tests/normalizing/test_properties.py +++ b/tests/normalizing/test_properties.py @@ -27,6 +27,9 @@ from .conftest import ( get_template_dos, add_template_band_structure, get_template_band_structure, + add_template_magnetic_shielding, + add_template_spin_spin_coupling, + add_template_magnetic_susceptibility, run_normalize, ) from nomad.datamodel.metainfo import simulationworkflowschema, SCHEMA_IMPORT_ERROR @@ -301,6 +304,45 @@ def test_band_structure_electronic(): assert bs.segment[0].kpoints.shape == (100, 3) +def test_magnetic_properties(): + archive = get_template_dft() + archive = add_template_magnetic_shielding(archive, n_atoms=2) + archive = add_template_spin_spin_coupling(archive, n_atoms=2) + archive = add_template_magnetic_susceptibility(archive) + archive = run_normalize(archive) + assert archive.results.properties.magnetic + magnetic_properties = archive.results.properties.magnetic + # Magnetic shielding testing + assert magnetic_properties.magnetic_shielding + magnetic_shielding = magnetic_properties.magnetic_shielding + assert len(magnetic_shielding) == 1 + assert magnetic_shielding[0].value.shape == (2, 3, 3) + assert ( + magnetic_shielding[0].value[0].magnitude + == [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]] + ).all() + assert magnetic_shielding[0].value[1].magnitude == pytest.approx( + 2.0 * magnetic_shielding[0].value[0].magnitude + ) + # Spin spin coupling + assert magnetic_properties.spin_spin_coupling + spin_spin_coupling = magnetic_properties.spin_spin_coupling + assert len(spin_spin_coupling) == 1 + assert spin_spin_coupling[0].source == 'simulation' + assert spin_spin_coupling[0].contribution == 'total' + assert spin_spin_coupling[0].value.shape == (2, 2, 3, 3) + # Magnetic susceptibility + assert magnetic_properties.magnetic_susceptibility + magnetic_susceptibility = magnetic_properties.magnetic_susceptibility + assert len(magnetic_susceptibility) == 1 + assert magnetic_susceptibility[0].source == 'simulation' + assert magnetic_susceptibility[0].scale_dimension == 'macroscopic' + assert ( + magnetic_susceptibility[0].value + == [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]] + ).all() + + @pytest.mark.skipif(simulationworkflowschema is None, reason=SCHEMA_IMPORT_ERROR) def test_dos_phonon(): # DOS with all correct metainfo diff --git a/tests/test_config.py b/tests/test_config.py index fd76efa903ab1b2154ef08284646b70c6a2e9980..867e4e9032552cf71fdb0b28f27970874f9de1d4 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -200,7 +200,7 @@ def test_parser_plugins(): for plugin in config.plugins.options.values() if isinstance(plugin, Parser) ] - assert len(parsers) == 70 + assert len(parsers) == 71 def test_plugin_polymorphism():