diff --git a/cpmdparser/metainfo/__init__.py b/cpmdparser/metainfo/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..2cc188cf55522b4b4bb73d52209bc905fde7a208 --- /dev/null +++ b/cpmdparser/metainfo/__init__.py @@ -0,0 +1,15 @@ +import sys +from nomad.metainfo import Environment +from nomad.metainfo.legacy import LegacyMetainfoEnvironment +import cpmdparser.metainfo.cpmd +import cpmdparser.metainfo.cpmd_general +import nomad.datamodel.metainfo.common +import nomad.datamodel.metainfo.public +import nomad.datamodel.metainfo.general + +m_env = LegacyMetainfoEnvironment() +m_env.m_add_sub_section(Environment.packages, sys.modules['cpmdparser.metainfo.cpmd'].m_package) # type: ignore +m_env.m_add_sub_section(Environment.packages, sys.modules['cpmdparser.metainfo.cpmd_general'].m_package) # type: ignore +m_env.m_add_sub_section(Environment.packages, sys.modules['nomad.datamodel.metainfo.common'].m_package) # type: ignore +m_env.m_add_sub_section(Environment.packages, sys.modules['nomad.datamodel.metainfo.public'].m_package) # type: ignore +m_env.m_add_sub_section(Environment.packages, sys.modules['nomad.datamodel.metainfo.general'].m_package) # type: ignore diff --git a/cpmdparser/metainfo/cpmd.py b/cpmdparser/metainfo/cpmd.py new file mode 100644 index 0000000000000000000000000000000000000000..e6b6df821185cfdfc998bf4fcfb2edb152f6e2a0 --- /dev/null +++ b/cpmdparser/metainfo/cpmd.py @@ -0,0 +1,10917 @@ +import numpy as np # pylint: disable=unused-import +import typing # pylint: disable=unused-import +from nomad.metainfo import ( # pylint: disable=unused-import + MSection, MCategory, Category, Package, Quantity, Section, SubSection, SectionProxy, + Reference +) +from nomad.metainfo.legacy import LegacyDefinition + +from nomad.datamodel.metainfo import public + +m_package = Package( + name='cpmd_nomadmetainfo_json', + description='None', + a_legacy=LegacyDefinition(name='cpmd.nomadmetainfo.json')) + + +class x_cpmd_section_input_ATOMS_ATOMIC_CHARGES(MSection): + ''' + Changes the default charge (0) of the atoms for the initial guess to the values read + from the next line. One value per atomic species has to be given. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_ATOMS.ATOMIC_CHARGES')) + + x_cpmd_input_ATOMS_ATOMIC_CHARGES_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ATOMIC_CHARGES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_ATOMS.ATOMIC_CHARGES_options')) + + x_cpmd_input_ATOMS_ATOMIC_CHARGES_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ATOMIC_CHARGES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_ATOMS.ATOMIC_CHARGES_parameters')) + + +class x_cpmd_section_input_ATOMS_CHANGE_BONDS(MSection): + ''' + The buildup of the empirical Hessian can be affected. You can either add or delete + bonds. The number of changed bonds is read from the next line. This line is followed + by the description of the bonds. The format is {\\sl \\{ ATOM1 \\ \\ ATOM2 \\ \\ FLAG\\} }. + \\hfill {\\sl ATOM1} and {\\sl ATOM2} are the numbers of the atoms involved in the bond. + A {\\sl FLAG} of $-1$ causes a bond to be deleted and a {\\sl FLAG} of $1$ a bond to be + added. \\hfill Example: {\\tt \\begin{tabular}{ccc} \\multicolumn{3}{l}{\\bf CHANGE BONDS} + 2 & & 1 & 2 & +1 6 & 8 & -1 \\end{tabular} } + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_ATOMS.CHANGE_BONDS')) + + x_cpmd_input_ATOMS_CHANGE_BONDS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CHANGE_BONDS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_ATOMS.CHANGE_BONDS_options')) + + x_cpmd_input_ATOMS_CHANGE_BONDS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CHANGE_BONDS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_ATOMS.CHANGE_BONDS_parameters')) + + +class x_cpmd_section_input_ATOMS_CONFINEMENT_POTENTIAL(MSection): + ''' + The use of this label activates a spherical gaussian confinement potential in the + calculation of the form factor of pseudopotentials. In the next line(s) two parameters + for each atomic species must be supplied: the amplitude $\\alpha$ and the cut off + radius $r_c$. The gaussian spherical amplitude is computed as $A=\\pi ^{3/2}r_c^3\\cdot + \\alpha$ and the gaussian confinement potential reads \\begin{equation*} V({\\bf G}) = + \\sum_{\\bf G} A \\cdot |{\\bf G}|\\cdot e^{-G^2r_c^2/4} \\label{pconf} \\end{equation*} + being {\\bf G} the G-vectors, although in practice the loop runs only on the G-shells + $G=|{\\bf G}|$. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_ATOMS.CONFINEMENT_POTENTIAL')) + + x_cpmd_input_ATOMS_CONFINEMENT_POTENTIAL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CONFINEMENT_POTENTIAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_ATOMS.CONFINEMENT_POTENTIAL_options')) + + x_cpmd_input_ATOMS_CONFINEMENT_POTENTIAL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CONFINEMENT_POTENTIAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_ATOMS.CONFINEMENT_POTENTIAL_parameters')) + + +class x_cpmd_section_input_ATOMS_DUMMY_ATOMS(MSection): + ''' + The definition of dummy atoms follows this keyword. Three different kinds of dummy + atoms are implemented. Type 1 is fixed in space, type 2 lies at the arithmetic mean, + type 3 at the center of mass of the coordinates of real atoms. % For types 2, 3 and 4 + you can also have a % negative weight (NOTE: works only for restraints). The + first line contains the total number of dummy atoms. The following lines start with + the type label {\\bf TYPE1, TYPE2, TYPE3, TYPE4}. For type 1 dummy atoms the label is + followed by the Cartesian coordinates. For type 2 and type 3 dummy atoms the first + number specifies the total number of atoms involved in the definition of the dummy + atom. Then the number of these atoms has to be specified on the same line. A negative + number of atoms stands for all atoms. For type 4, the dummy atom is defined as a + weigthed average of coordinates of real atoms with user-supplied weights. This feature + is useful e.~g. in constrained dynamics, because allows to modify positions and + weights of dummy atoms according to some relevant quantity such as forces on selected + atoms. % A negative atom index means that a negative weight is assigned % to this atom + (works only with restraints) Example: {\\tt \\begin{tabular}{llll} + \\multicolumn{4}{l}{\\bf DUMMY ATOMS } 3 & & & {\\bf TYPE1} & + 0.0 & 0.0 & 0.0 {\\bf TYPE2} & 2 & 1 & 4 {\\bf TYPE3} & -1 + \\end{tabular} } Note: Indices of dummy atoms always start with total-number-of-atoms + plus 1. In the case of a Gromos-QM/MM interface simulations with dummy hydrogen atoms + for capping, it is total-number-of-atoms plus number-of-dummy-hydrogens plus 1 + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_ATOMS.DUMMY_ATOMS')) + + x_cpmd_input_ATOMS_DUMMY_ATOMS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DUMMY_ATOMS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_ATOMS.DUMMY_ATOMS_options')) + + x_cpmd_input_ATOMS_DUMMY_ATOMS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DUMMY_ATOMS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_ATOMS.DUMMY_ATOMS_parameters')) + + +class x_cpmd_section_input_ATOMS_GENERATE_COORDINATES(MSection): + ''' + The number of generator atoms for each species are read from the next line. These + atoms are used together with the point group information to generate all other atomic + positions. The input still has to have entries for all atoms but their coordinates are + overwritten. Also the total number of atoms per species has to be correct. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_ATOMS.GENERATE_COORDINATES')) + + x_cpmd_input_ATOMS_GENERATE_COORDINATES_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword GENERATE_COORDINATES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_ATOMS.GENERATE_COORDINATES_options')) + + x_cpmd_input_ATOMS_GENERATE_COORDINATES_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword GENERATE_COORDINATES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_ATOMS.GENERATE_COORDINATES_parameters')) + + +class x_cpmd_section_input_ATOMS_ISOTOPE(MSection): + ''' + Changes the default masses of the atoms. + + This keyword has to be followed by {\\sl NSP} lines (number of atom types). In each + line the new mass (in a.m.u.) of the respective species has to be specified (in order + of their definition). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_ATOMS.ISOTOPE')) + + x_cpmd_input_ATOMS_ISOTOPE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ISOTOPE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_ATOMS.ISOTOPE_options')) + + x_cpmd_input_ATOMS_ISOTOPE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ISOTOPE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_ATOMS.ISOTOPE_parameters')) + + +class x_cpmd_section_input_ATOMS_MOVIE_TYPE(MSection): + ''' + Assign special movie atom types to the species. The types are read from the next line. + Values from 0 to 5 were allowed in the original MOVIE format. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_ATOMS.MOVIE_TYPE')) + + x_cpmd_input_ATOMS_MOVIE_TYPE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword MOVIE_TYPE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_ATOMS.MOVIE_TYPE_options')) + + x_cpmd_input_ATOMS_MOVIE_TYPE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword MOVIE_TYPE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_ATOMS.MOVIE_TYPE_parameters')) + + +class x_cpmd_section_input_ATOMS(MSection): + ''' + Atoms and pseudopotentials and related parameters (\\textbf{required}). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_ATOMS')) + + x_cpmd_input_ATOMS_default_keyword = Quantity( + type=str, + shape=[], + description=''' + The parameters that are present in the section ATOMS even without a keyword. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_ATOMS_default_keyword')) + + x_cpmd_section_input_ATOMS_ATOMIC_CHARGES = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_ATOMS_ATOMIC_CHARGES'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_ATOMS.ATOMIC_CHARGES')) + + x_cpmd_section_input_ATOMS_CHANGE_BONDS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_ATOMS_CHANGE_BONDS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_ATOMS.CHANGE_BONDS')) + + x_cpmd_section_input_ATOMS_CONFINEMENT_POTENTIAL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_ATOMS_CONFINEMENT_POTENTIAL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_ATOMS.CONFINEMENT_POTENTIAL')) + + x_cpmd_section_input_ATOMS_DUMMY_ATOMS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_ATOMS_DUMMY_ATOMS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_ATOMS.DUMMY_ATOMS')) + + x_cpmd_section_input_ATOMS_GENERATE_COORDINATES = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_ATOMS_GENERATE_COORDINATES'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_ATOMS.GENERATE_COORDINATES')) + + x_cpmd_section_input_ATOMS_ISOTOPE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_ATOMS_ISOTOPE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_ATOMS.ISOTOPE')) + + x_cpmd_section_input_ATOMS_MOVIE_TYPE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_ATOMS_MOVIE_TYPE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_ATOMS.MOVIE_TYPE')) + + +class x_cpmd_section_input_BASIS(MSection): + ''' + Atomic basis sets for properties or initial guess + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_BASIS')) + + x_cpmd_input_BASIS_default_keyword = Quantity( + type=str, + shape=[], + description=''' + The parameters that are present in the section BASIS even without a keyword. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_BASIS_default_keyword')) + + +class x_cpmd_section_input_CLASSIC_FREEZE_QUANTUM(MSection): + ''' + Freeze the quantum atoms and performs a classical MD on the others (in QMMM mode only + !). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CLASSIC.FREEZE_QUANTUM')) + + x_cpmd_input_CLASSIC_FREEZE_QUANTUM_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword FREEZE_QUANTUM. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CLASSIC.FREEZE_QUANTUM_options')) + + x_cpmd_input_CLASSIC_FREEZE_QUANTUM_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword FREEZE_QUANTUM. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CLASSIC.FREEZE_QUANTUM_parameters')) + + +class x_cpmd_section_input_CLASSIC_FULL_TRAJECTORY(MSection): + ''' + Not documented + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CLASSIC.FULL_TRAJECTORY')) + + x_cpmd_input_CLASSIC_FULL_TRAJECTORY_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword FULL_TRAJECTORY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CLASSIC.FULL_TRAJECTORY_options')) + + x_cpmd_input_CLASSIC_FULL_TRAJECTORY_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword FULL_TRAJECTORY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CLASSIC.FULL_TRAJECTORY_parameters')) + + +class x_cpmd_section_input_CLASSIC_PRINT_COORDINATES(MSection): + ''' + Not documented + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CLASSIC.PRINT_COORDINATES')) + + x_cpmd_input_CLASSIC_PRINT_COORDINATES_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword PRINT_COORDINATES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CLASSIC.PRINT_COORDINATES_options')) + + x_cpmd_input_CLASSIC_PRINT_COORDINATES_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword PRINT_COORDINATES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CLASSIC.PRINT_COORDINATES_parameters')) + + +class x_cpmd_section_input_CLASSIC_PRINT_FF(MSection): + ''' + Not documented + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CLASSIC.PRINT_FF')) + + x_cpmd_input_CLASSIC_PRINT_FF_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword PRINT_FF. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CLASSIC.PRINT_FF_options')) + + x_cpmd_input_CLASSIC_PRINT_FF_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword PRINT_FF. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CLASSIC.PRINT_FF_parameters')) + + +class x_cpmd_section_input_CLASSIC(MSection): + ''' + Simple classical code interface + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CLASSIC')) + + x_cpmd_input_CLASSIC_default_keyword = Quantity( + type=str, + shape=[], + description=''' + The parameters that are present in the section CLASSIC even without a keyword. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CLASSIC_default_keyword')) + + x_cpmd_section_input_CLASSIC_FREEZE_QUANTUM = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CLASSIC_FREEZE_QUANTUM'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CLASSIC.FREEZE_QUANTUM')) + + x_cpmd_section_input_CLASSIC_FULL_TRAJECTORY = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CLASSIC_FULL_TRAJECTORY'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CLASSIC.FULL_TRAJECTORY')) + + x_cpmd_section_input_CLASSIC_PRINT_COORDINATES = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CLASSIC_PRINT_COORDINATES'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CLASSIC.PRINT_COORDINATES')) + + x_cpmd_section_input_CLASSIC_PRINT_FF = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CLASSIC_PRINT_FF'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CLASSIC.PRINT_FF')) + + +class x_cpmd_section_input_CPMD_ALEXANDER_MIXING(MSection): + ''' + Mixing used during optimization of geometry or molecular dynamics. Parameter read in + the next line. + + \\textbf{Default} value is \\defaultvalue{0.9} + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ALEXANDER_MIXING')) + + x_cpmd_input_CPMD_ALEXANDER_MIXING_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ALEXANDER_MIXING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ALEXANDER_MIXING_options')) + + x_cpmd_input_CPMD_ALEXANDER_MIXING_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ALEXANDER_MIXING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ALEXANDER_MIXING_parameters')) + + +class x_cpmd_section_input_CPMD_ALLTOALL(MSection): + ''' + Perform the matrix transpose (AllToAll communication) in the 3D FFT using + single/double precision numbers. Default is to use double precision numbers. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ALLTOALL')) + + x_cpmd_input_CPMD_ALLTOALL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ALLTOALL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ALLTOALL_options')) + + x_cpmd_input_CPMD_ALLTOALL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ALLTOALL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ALLTOALL_parameters')) + + +class x_cpmd_section_input_CPMD_ANDERSON_MIXING(MSection): + ''' + Anderson mixing for the electronic density during self-consistent iterations. In the + next line the parameter (between 0 and 1) for the Anderson mixing is read. + + \\textbf{Default} is \\defaultvalue{0.2}. + + With the additional option $N=n$ a mixing parameter can be specified for different + threshold densities. $n$ different thresholds can be set. The program reads $n$ lines, + each with a threshold density and an Anderson mixing parameter. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ANDERSON_MIXING')) + + x_cpmd_input_CPMD_ANDERSON_MIXING_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ANDERSON_MIXING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ANDERSON_MIXING_options')) + + x_cpmd_input_CPMD_ANDERSON_MIXING_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ANDERSON_MIXING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ANDERSON_MIXING_parameters')) + + +class x_cpmd_section_input_CPMD_ANNEALING(MSection): + ''' + Scale the ionic, electronic, or cell velocities every time step. The scaling factor is + read from the next line. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ANNEALING')) + + x_cpmd_input_CPMD_ANNEALING_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ANNEALING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ANNEALING_options')) + + x_cpmd_input_CPMD_ANNEALING_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ANNEALING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ANNEALING_parameters')) + + +class x_cpmd_section_input_CPMD_BENCHMARK(MSection): + ''' + This keyword is used to control some special features related to benchmarks. If you + want to know more, have a look in the source code. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.BENCHMARK')) + + x_cpmd_input_CPMD_BENCHMARK_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword BENCHMARK. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.BENCHMARK_options')) + + x_cpmd_input_CPMD_BENCHMARK_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword BENCHMARK. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.BENCHMARK_parameters')) + + +class x_cpmd_section_input_CPMD_BERENDSEN(MSection): + ''' + Use a simple Berendsen-type thermostat\\cite{Berendsen84} to control the respective + temperature of ions, electrons, or cell. The target temperature and time constant + $\\tau$ (in a.u.) are read from the next line. These thermostats are a gentler + alternative to the \\refkeyword{TEMPCONTROL} mechanism to thermalize a system. For + production runs, please use the corresponding \\refkeyword{NOSE} or + \\refkeyword{LANGEVIN} thermostats, as the Berendsen scheme does not represent any + defined statistical mechanical ensemble. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.BERENDSEN')) + + x_cpmd_input_CPMD_BERENDSEN_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword BERENDSEN. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.BERENDSEN_options')) + + x_cpmd_input_CPMD_BERENDSEN_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword BERENDSEN. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.BERENDSEN_parameters')) + + +class x_cpmd_section_input_CPMD_BFGS(MSection): + ''' + Use a quasi-Newton method for optimization of the ionic positions. The approximated + Hessian is updated using the Broyden-Fletcher-Goldfarb-Shano + procedure~\\cite{Fletcher80}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.BFGS')) + + x_cpmd_input_CPMD_BFGS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword BFGS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.BFGS_options')) + + x_cpmd_input_CPMD_BFGS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword BFGS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.BFGS_parameters')) + + +class x_cpmd_section_input_CPMD_BLOCKSIZE_STATES(MSection): + ''' + Parameter read in from next line. {\\sl NSTBLK} Defines the minimal number of states + used per processor in the distributed linear algebra calculations. {\\bf Default} is to + equally distribute states over all processors. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.BLOCKSIZE_STATES')) + + x_cpmd_input_CPMD_BLOCKSIZE_STATES_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword BLOCKSIZE_STATES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.BLOCKSIZE_STATES_options')) + + x_cpmd_input_CPMD_BLOCKSIZE_STATES_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword BLOCKSIZE_STATES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.BLOCKSIZE_STATES_parameters')) + + +class x_cpmd_section_input_CPMD_BOGOLIUBOV_CORRECTION(MSection): + ''' + Computes the Bogoliubov correction for the energy of the Trotter approximation or not. + + {\\bf Default} is {\\bf no Bogoliubov correction}. + + The keyword has to appear after \\refkeyword{FREE ENERGY FUNCTIONAL}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.BOGOLIUBOV_CORRECTION')) + + x_cpmd_input_CPMD_BOGOLIUBOV_CORRECTION_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword BOGOLIUBOV_CORRECTION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.BOGOLIUBOV_CORRECTION_options')) + + x_cpmd_input_CPMD_BOGOLIUBOV_CORRECTION_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword BOGOLIUBOV_CORRECTION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.BOGOLIUBOV_CORRECTION_parameters')) + + +class x_cpmd_section_input_CPMD_BOX_WALLS(MSection): + ''' + The thickness parameter for soft, reflecting QM-box walls is read from the next line. + This keyword allows to reverse the momentum of the particles (${\\bf p}_I \\rightarrow + -{\\bf p}_I$) when they reach the walls of the simulation supercell in the case in + which no periodic boundary conditions are applied. Specifically, in the unidimensional + surface-like case, molecules departing from the surface are reflected back along the + direction orthogonal to the surface, whereas in the bidimensional polymer-like case, + they are reflected back in the two dimensons orthogonal to the "polymer" axis. + Warning: This procedure, although keeping your particles inside the cell, affect the + momentum conservation. This feature is {\\bf disabled by default} + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.BOX_WALLS')) + + x_cpmd_input_CPMD_BOX_WALLS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword BOX_WALLS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.BOX_WALLS_options')) + + x_cpmd_input_CPMD_BOX_WALLS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword BOX_WALLS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.BOX_WALLS_parameters')) + + +class x_cpmd_section_input_CPMD_BROYDEN_MIXING(MSection): + ''' + Parameters read in from next line. {\\sl BROYMIX, ECUTBROY, W02BROY, NFRBROY, IBRESET, + KERMIX} These mean: \\hfill\\smallskip {\\sl BROYMIX}: \\hfill\\begin{minipage}[t]{10cm} + Initial mixing, e.g. $0.1$; \\textbf{default} value is \\defaultvalue{0.5} + \\end{minipage} {\\sl ECUTBROY:} \\hfill\\begin{minipage}[t]{10cm} Cutoff for Broyden + mixing. \\defaultvalue{DUAL*ECUT} is the best choice and the \\textbf{default} + \\end{minipage} {\\sl W02BROY:} \\hfill\\begin{minipage}[t]{10cm} $w_0^2$ parameter of + Johnson~\\cite{Johnson88}. \\textbf{Default} \\defaultvalue{0.01} \\end{minipage} {\\sl + NFRBROY:} \\hfill\\begin{minipage}[t]{10cm} Number of Anderson mixing steps done before + Broyden mixing. \\textbf{Default} is \\defaultvalue{0} \\end{minipage} {\\sl IBRESET:} + \\hfill\\begin{minipage}[t]{10cm} Number of Broyden vectors. $5$ is usually a good value + and the default. \\end{minipage} {\\sl KERMIX:} \\hfill\\begin{minipage}[t]{10cm} Kerker + mixing according to the original deinition of Ref.~\\cite{Kerker}. By default the + mixing parameter is set to 0. \\end{minipage} You can also specify some parameters + with the following syntax: \\textbf{[BROYMIX=}\\textsl{BROYMIX}\\textbf{]} + \\textbf{[ECUTBROY=}\\textsl{ECUTBROY}\\textbf{]} + \\textbf{[W02BROY=}\\textsl{W02BROY}\\textbf{]} + \\textbf{[NFRBROY=}\\textsl{NFRBROY}\\textbf{]} + \\textbf{[IBRESET=}\\textsl{IBRESET}\\textbf{]} + \\textbf{[KERMIX=}\\textsl{KERMIX}\\textbf{]} Finally, you can use the keyword {\\bf + DEFAULT} to use the default values. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.BROYDEN_MIXING')) + + x_cpmd_input_CPMD_BROYDEN_MIXING_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword BROYDEN_MIXING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.BROYDEN_MIXING_options')) + + x_cpmd_input_CPMD_BROYDEN_MIXING_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword BROYDEN_MIXING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.BROYDEN_MIXING_parameters')) + + +class x_cpmd_section_input_CPMD_CAYLEY(MSection): + ''' + Used to propagate the Kohn-Sham orbitals in \\refkeyword{MOLECULAR DYNAMICS} EH and + \\refkeyword{PROPAGATION SPECTRA}. At present is the only propagation scheme availabe. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.CAYLEY')) + + x_cpmd_input_CPMD_CAYLEY_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CAYLEY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.CAYLEY_options')) + + x_cpmd_input_CPMD_CAYLEY_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CAYLEY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.CAYLEY_parameters')) + + +class x_cpmd_section_input_CPMD_CDFT(MSection): + ''' + The main switch for constrained DFT. Parameters $N_\\text{c}$, $V_\\text{init}$, and + MAXSTEP are read from the next line. {\\bf NEWTON}, {\\bf DEKKER} (\\defaultvalue{off}) + are switches to enable either the Newton or the Dekker optimisation scheme for the + constraint. If neither of those are set a simple gradient scheme is used. {\\bf SPIN} + (\\defaultvalue{off}) if activated the constraint will act on the spin density instead + of the charge density. This may help against excessive spin contamination. {\\bf ALL} + (\\defaultvalue{off}) activates dual spin and charge constraint, all inputs for + $N_\\text{c}$ and $V_\\text{init}$ have to be given twice (first for charge then for + spin) {\\bf PCGFI} (\\defaultvalue{off}) instructs CPMD to do PCG for the first V + optimisation cycle regardles of the choice of optimiser. {\\bf RESWF} + (\\defaultvalue{off}) if activated this switch re-initialises the wavefunction after + each $V$ optimisation step. This is useful if the wavefunction convergence between the + optimisation steps is slow. Usage in conjunction with \\refkeyword{INITIALIZE + WAVEFUNCTION} RANDOM may help. {\\bf NOCCOR} (\\defaultvalue{off}) if activated this + switch turns off cutoff correction for the forces. {\\bf HDA} (\\defaultvalue{off}) if + activated this switch turns on the calculation of the transition matrix element + between the constrained states given by $N_\\text{c}$ and $\\hat{N}_\\text{c}$ which is + then read from the second line. For this keyword to take effect the + \\refkeyword{OPTIMIZE WAVEFUNCTION} option has to be activated. Sub-options of {\\bf + HDA} {\\bf AUTO} (\\defaultvalue{off}) if activated this switch lets CPMD choose the + constraint values for the transition matrix calculation. $N_\\text{c}$ is chosen from + the initial charge distribution and $\\hat{N}_\\text{c}=-N_\\text{c}$. It might be a good + idea to use \\refkeyword{INITIALIZE WAVEFUNCTION} ATOMS and \\refkeyword{ATOMIC CHARGES} + (\\&ATOM section) so that CPMD initialises the wavefunction with the desired pseudo + wavefunction. {\\bf PHIOUT} (\\defaultvalue{off}) if activated this switch tells CPMD to + write out the overlap matrices $\\Phi_\\text{AA},\\Phi_\\text{BB},\\Phi_\\text{AB},$ and + $\\Phi_\\text{BA}$ to the file PHI\\_MAT. {\\bf PROJECT} (\\defaultvalue{off}) if activated + this switch lets CPMD read in two reference states from RESTART.REF1 and RESTART.REF2 + after the actual HDA calculation in order to project the two constrained states on + them and thus calculate the diabatic transition matrix element in an orthogonalised + ``dressed'' basis. If CDFT is activated the program writes the current $V$ value to + CDFT\\_RESTART everytime the RESTART file is written. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.CDFT')) + + x_cpmd_input_CPMD_CDFT_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CDFT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.CDFT_options')) + + x_cpmd_input_CPMD_CDFT_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CDFT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.CDFT_parameters')) + + +class x_cpmd_section_input_CPMD_CENTER_MOLECULE(MSection): + ''' + The center of mass is moved/not moved to the center of the computational box in a + calculation with the cluster option. This is only done when the coordinates are read + from the input file. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.CENTER_MOLECULE')) + + x_cpmd_input_CPMD_CENTER_MOLECULE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CENTER_MOLECULE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.CENTER_MOLECULE_options')) + + x_cpmd_input_CPMD_CENTER_MOLECULE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CENTER_MOLECULE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.CENTER_MOLECULE_parameters')) + + +class x_cpmd_section_input_CPMD_CHECK_MEMORY(MSection): + ''' + Check sanity of all dynamically allocated arrays whenever a change in the allocation + is done. By default memory is checked only at break points. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.CHECK_MEMORY')) + + x_cpmd_input_CPMD_CHECK_MEMORY_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CHECK_MEMORY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.CHECK_MEMORY_options')) + + x_cpmd_input_CPMD_CHECK_MEMORY_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CHECK_MEMORY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.CHECK_MEMORY_parameters')) + + +class x_cpmd_section_input_CPMD_CLASSTRESS(MSection): + ''' + Not documented. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.CLASSTRESS')) + + x_cpmd_input_CPMD_CLASSTRESS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CLASSTRESS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.CLASSTRESS_options')) + + x_cpmd_input_CPMD_CLASSTRESS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CLASSTRESS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.CLASSTRESS_parameters')) + + +class x_cpmd_section_input_CPMD_CMASS(MSection): + ''' + The fictitious mass of the cell in atomic units is read from the next line. + \\textbf{Default} value is \\defaultvalue{200} + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.CMASS')) + + x_cpmd_input_CPMD_CMASS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CMASS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.CMASS_options')) + + x_cpmd_input_CPMD_CMASS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CMASS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.CMASS_parameters')) + + +class x_cpmd_section_input_CPMD_COMBINE_SYSTEMS(MSection): + ''' + Read in two wavefunctions from RESTART.R1 and RESTART.R2 and combine them into + RESTART.1 which can then be used in an FODFT calculations. The option NONORTH disables + orthogonalisation of the combined WF's. Parameters NTOT1, NTOT2, NSUP1, NSUP2 are read + from the next line. NTOT1/NTOT2 total number of electrons in state 1/2 (mandatory). + NSUP1/NSUP2 number of alpha electrons in state 1/2 (only LSD). If the option REFLECT + is given a fifth parameter (CM\\_DIR) is read and the WF given in RESTART.R2 will be + either mirrored through the centre of the box (CM\\_DIR=0), mirrored through the + central yz-plane of the box (CM\\_DIR=1) or if CM\\_DIR=4 mirrored through the central + yz-plane and translated in x direction by CM\\_DR (sixth parameter to be read). If the + option SAB is set, write out the overlap matrix element between orbitals K and L. + Parameters K and L are read from the next line. After combining the wavefunctions CPMD + will exit. For this option to work the RESTART option and \\refkeyword{OPTIMIZE + WAVEFUNCTION} have to be activated. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.COMBINE_SYSTEMS')) + + x_cpmd_input_CPMD_COMBINE_SYSTEMS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword COMBINE_SYSTEMS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.COMBINE_SYSTEMS_options')) + + x_cpmd_input_CPMD_COMBINE_SYSTEMS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword COMBINE_SYSTEMS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.COMBINE_SYSTEMS_parameters')) + + +class x_cpmd_section_input_CPMD_COMPRESS(MSection): + ''' + Write the wavefunctions with nn bytes precision to the restart file. Possible choices + are \\texttt{WRITE32}, \\texttt{WRITE16}, \\texttt{WRITE8} and \\texttt{WRITEAO}. + \\texttt{WRITE32} corresponds to the compress option in older versions. + \\texttt{WRITEAO} stores the wavefunction as a projection on atomic basis sets. The + atomic basis set can be specified in the section \\&BASIS \\ldots \\&END. If this input + section is missing a default basis from Slater type orbitals is constructed. See + section~\\ref{input:basis} for more details. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.COMPRESS')) + + x_cpmd_input_CPMD_COMPRESS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword COMPRESS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.COMPRESS_options')) + + x_cpmd_input_CPMD_COMPRESS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword COMPRESS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.COMPRESS_parameters')) + + +class x_cpmd_section_input_CPMD_CONJUGATE_GRADIENTS(MSection): + ''' + For the electrons, the keyword is equivalent to \\refkeyword{PCG}. The + \\texttt{NOPRECONDITIONING} parameter only applies for electrons. For the ions the + conjugate gradients scheme is used to relax the atomic positions. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.CONJUGATE_GRADIENTS')) + + x_cpmd_input_CPMD_CONJUGATE_GRADIENTS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CONJUGATE_GRADIENTS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.CONJUGATE_GRADIENTS_options')) + + x_cpmd_input_CPMD_CONJUGATE_GRADIENTS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CONJUGATE_GRADIENTS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.CONJUGATE_GRADIENTS_parameters')) + + +class x_cpmd_section_input_CPMD_CONVERGENCE(MSection): + ''' + The adaptive convergence criteria for the wavefunction during a geometry optimization + are specified. For more informations, see~\\cite{LSCAL}. The ratio {\\sl TOLAD} between + the smallest maximum component of the nuclear gradient reached so far and the maximum + allowed component of the electronic {\\bf gradient} is specified with {\\bf CONVERGENCE + ADAPT}. This criterion is switched off once the value {\\sl TOLOG} given with {\\bf + CONVERGENCE ORBITALS} is reached. By default, the adaptive gradient criterion is not + active. A reasonable value for the parameter {\\sl TOLAD} is 0.02. + + If the parameter {\\sl TOLENE} is given with {\\bf CONVERGENCE ENERGY}, in addition to + the gradient criterion for the wavefunction, the energy change between two + wavefunction optimization cycles must be smaller than the energy change of the last + accepted geometry change multiplied by {\\sl TOLENE} for the wavefunction to be + considered converged. By default, the adaptive energy criterion is not active. It is + particularly useful for {\\bf transition state search} with P-RFO, where the trust + radius is based on the quality of energy prediction. A reasonable value for {\\sl + TOLENE} is 0.05. + + To save CPU time, the gradient on the ions is only calculated if the wavefunction is + almost converged. The parameter {\\sl TOLFOR} given with {\\bf CONVERGENCE CALFOR} is + the ratio between the convergence criteria for the wavefunction and the criteria + whether the gradient on the ions is to be calculated. \\textbf{Default} value for {\\sl + TOLFOR} is \\defaultvalue{3.0}. + + If the wavefunction is very slowly converging during a geometry optimization, a small + nuclear displacement can help. The parameter {\\sl NSTCNV} is given with {\\bf + CONVERGENCE RELAX}. Every {\\sl NSTCNV} wavefunction optimization cycles, the + convergence criteria for the wavefunction are relaxed by a factor of two. A geometry + optimization step resets the criteria to the unrelaxed values. By default, the + criteria for wavefunction convergence are never relaxed. + + When starting a geometry optimization from an unconverged wavefunction, the nuclear + gradient and therefore the adaptive tolerance of the electronic gradient is not known. + To avoid the {\\bf full convergence} criterion to be applied at the beginning, a + convergence criterion for the wavefunction of the initial geometry can be supplied + with {\\bf CONVERGENCE INITIAL}. By default, the initial convergence criterion is equal + to the full convergence criterion. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.CONVERGENCE')) + + x_cpmd_input_CPMD_CONVERGENCE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CONVERGENCE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.CONVERGENCE_options')) + + x_cpmd_input_CPMD_CONVERGENCE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CONVERGENCE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.CONVERGENCE_parameters')) + + +class x_cpmd_section_input_CPMD_CZONES(MSection): + ''' + Activates convergence zones for the wavefunction during the \\refkeyword{CDFT} + constraint minimisation. If SET is set the parameters CZONE1, CZONE2, and CZONE3 are + read from the next line and CZLIMIT1 and CZLIMIT2 from the line after. CZONE1 + \\defaultvalue{$10^{-3}$},CZONE2 \\defaultvalue{$10^{-4}$},CZONE3 + \\defaultvalue{$10^{-5}$} $\\in \\mathbb{R}_+$ are the orbital convergences in zones 1-3, + respectively. CZLIMIT1 \\defaultvalue{0.3}, CZLIMIT2 \\defaultvalue{0.1} $\\in + \\mathbb{R}_+$ define the boundaries between zone 1-2 and 2-3, respectively. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.CZONES')) + + x_cpmd_input_CPMD_CZONES_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CZONES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.CZONES_options')) + + x_cpmd_input_CPMD_CZONES_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CZONES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.CZONES_parameters')) + + +class x_cpmd_section_input_CPMD_DAMPING(MSection): + ''' + Add a damping factor $f_{damp}(x) = - \\gamma \\cdot v(x)$ to the ionic, electronic, or + cell forces in every time step. The scaling factor $\\gamma$ is read from the next + line. Useful values depend on the employed masses are generally in the range $5.0 \\to + 50.0$. Damping can be used as a more efficient alternative to \\refkeyword{ANNEALING} + for wavefunction, geometry or cell optimization (and particularly combinations + thereof) of systems where the faster methods (e.g. \\refkeyword{ODIIS}, + \\refkeyword{PCG}, \\refkeyword{LBFGS}, \\refkeyword{GDIIS}) fail to converge or may + converge to the wrong state. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DAMPING')) + + x_cpmd_input_CPMD_DAMPING_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DAMPING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DAMPING_options')) + + x_cpmd_input_CPMD_DAMPING_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DAMPING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DAMPING_parameters')) + + +class x_cpmd_section_input_CPMD_DAVIDSON_DIAGONALIZATION(MSection): + ''' + Use Davidson diagonalization scheme.\\cite{davidson75} + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DAVIDSON_DIAGONALIZATION')) + + x_cpmd_input_CPMD_DAVIDSON_DIAGONALIZATION_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DAVIDSON_DIAGONALIZATION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DAVIDSON_DIAGONALIZATION_options')) + + x_cpmd_input_CPMD_DAVIDSON_DIAGONALIZATION_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DAVIDSON_DIAGONALIZATION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DAVIDSON_DIAGONALIZATION_parameters')) + + +class x_cpmd_section_input_CPMD_DAVIDSON_PARAMETER(MSection): + ''' + This keyword controls the Davidson diagonalization routine used to determine the Kohn- + Sham energies. + + The maximum number of additional vectors to construct the Davidson matrix, the + convergence criterion and the maximum number of steps are read from the next line. + + \\textbf{Defaults} are \\defaultvalue{10$^{-5}$} and the same number as states to be + optimized. If the system has 20 occupied states and you ask for 5 unoccupied states, + the default number of additional vectors is 25. By using less than 25 some memory can + be saved but convergence might be somewhat slower. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DAVIDSON_PARAMETER')) + + x_cpmd_input_CPMD_DAVIDSON_PARAMETER_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DAVIDSON_PARAMETER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DAVIDSON_PARAMETER_options')) + + x_cpmd_input_CPMD_DAVIDSON_PARAMETER_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DAVIDSON_PARAMETER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DAVIDSON_PARAMETER_parameters')) + + +class x_cpmd_section_input_CPMD_DEBUG_CODE(MSection): + ''' + Very verbose output concerning subroutine calls for debugging purpose. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DEBUG_CODE')) + + x_cpmd_input_CPMD_DEBUG_CODE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DEBUG_CODE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DEBUG_CODE_options')) + + x_cpmd_input_CPMD_DEBUG_CODE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DEBUG_CODE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DEBUG_CODE_parameters')) + + +class x_cpmd_section_input_CPMD_DEBUG_FILEOPEN(MSection): + ''' + Very verbose output concerning opening files for debugging purpose. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DEBUG_FILEOPEN')) + + x_cpmd_input_CPMD_DEBUG_FILEOPEN_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DEBUG_FILEOPEN. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DEBUG_FILEOPEN_options')) + + x_cpmd_input_CPMD_DEBUG_FILEOPEN_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DEBUG_FILEOPEN. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DEBUG_FILEOPEN_parameters')) + + +class x_cpmd_section_input_CPMD_DEBUG_FORCES(MSection): + ''' + Very verbose output concerning the calculation of each contribution to the forces for + debugging purpose. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DEBUG_FORCES')) + + x_cpmd_input_CPMD_DEBUG_FORCES_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DEBUG_FORCES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DEBUG_FORCES_options')) + + x_cpmd_input_CPMD_DEBUG_FORCES_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DEBUG_FORCES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DEBUG_FORCES_parameters')) + + +class x_cpmd_section_input_CPMD_DEBUG_MEMORY(MSection): + ''' + Very verbose output concerning memory for debugging purpose. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DEBUG_MEMORY')) + + x_cpmd_input_CPMD_DEBUG_MEMORY_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DEBUG_MEMORY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DEBUG_MEMORY_options')) + + x_cpmd_input_CPMD_DEBUG_MEMORY_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DEBUG_MEMORY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DEBUG_MEMORY_parameters')) + + +class x_cpmd_section_input_CPMD_DEBUG_NOACC(MSection): + ''' + Do not read/write accumulator information from/to the \\refkeyword{RESTART} file. This + avoids putting timing information to the restart and makes restart files identical for + otherwise identical runs. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DEBUG_NOACC')) + + x_cpmd_input_CPMD_DEBUG_NOACC_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DEBUG_NOACC. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DEBUG_NOACC_options')) + + x_cpmd_input_CPMD_DEBUG_NOACC_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DEBUG_NOACC. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DEBUG_NOACC_parameters')) + + +class x_cpmd_section_input_CPMD_DIIS_MIXING(MSection): + ''' + Use the direct inversion iterative scheme to mix density. + + Read in the next line the number of previous densities (NRDIIS) for the mixing + (however not useful). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DIIS_MIXING')) + + x_cpmd_input_CPMD_DIIS_MIXING_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DIIS_MIXING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DIIS_MIXING_options')) + + x_cpmd_input_CPMD_DIIS_MIXING_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DIIS_MIXING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DIIS_MIXING_parameters')) + + +class x_cpmd_section_input_CPMD_DIPOLE_DYNAMICS(MSection): + ''' + Calculate the dipole moment~\\cite{vdb_berry,resta} every {\\sl NSTEP} iteration in MD. + + {\\sl NSTEP} is read from the next line if the keyword SAMPLE is present. + + {\\bf Default} is {\\bf every} time step. + + The keyword {\\bf Wannier} allows the calculation of optimally localized Wannier + functions\\cite{Marzari97,PSil99,berghold}. The procedure used is equivalent (for + single k-point) to Boys localization. The produced output is IONS+CENTERS.xyz, + IONS+CENTERS, DIPOLE, WANNIER\\_CENTER and WANNIER\\_DOS. The localization procedure is + controlled by the following keywords. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DIPOLE_DYNAMICS')) + + x_cpmd_input_CPMD_DIPOLE_DYNAMICS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DIPOLE_DYNAMICS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DIPOLE_DYNAMICS_options')) + + x_cpmd_input_CPMD_DIPOLE_DYNAMICS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DIPOLE_DYNAMICS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DIPOLE_DYNAMICS_parameters')) + + +class x_cpmd_section_input_CPMD_DISTRIBUTE_FNL(MSection): + ''' + The array \\texttt{FNL} is distributed in parallel runs. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DISTRIBUTE_FNL')) + + x_cpmd_input_CPMD_DISTRIBUTE_FNL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DISTRIBUTE_FNL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DISTRIBUTE_FNL_options')) + + x_cpmd_input_CPMD_DISTRIBUTE_FNL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DISTRIBUTE_FNL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DISTRIBUTE_FNL_parameters')) + + +class x_cpmd_section_input_CPMD_DISTRIBUTED_LINALG(MSection): + ''' + Perform linear algebra calculations using distributed memory algorithms. Setting this + option ON will also enable (distributed) initialization from atomic wavefunctions + using a parallel Lanczos algorithm \\cite{distrib.lanczos.07}. Note that distributed + initialization is not available with {\\bf KPOINTS} calculations. In this case, + initialization from atomic wavefunctions will involve replicated calculations. When + setting {\\bf LINALG ON} the keyword \\refkeyword{BLOCKSIZE STATES} becomes relevant + (see entry). The number of \\refkeyword{BLOCKSIZE STATES} must be an {\\bf exact + divisor} of the number of \\refkeyword{STATES}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DISTRIBUTED_LINALG')) + + x_cpmd_input_CPMD_DISTRIBUTED_LINALG_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DISTRIBUTED_LINALG. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DISTRIBUTED_LINALG_options')) + + x_cpmd_input_CPMD_DISTRIBUTED_LINALG_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DISTRIBUTED_LINALG. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.DISTRIBUTED_LINALG_parameters')) + + +class x_cpmd_section_input_CPMD_ELECTRONIC_SPECTRA(MSection): + ''' + Perform a TDDFT calculation~\\cite{tddft_all,tddft_pw} to determine the electronic + spectra. See below under \\referto{sec:ElectronicSpectra}{Electronic Spectra} and under + the other keywords for the input sections \\referto{inputkw:linres}{\\&LINRES} and + \\referto{inputkw:tddft}{\\&TDDFT} for further options. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ELECTRONIC_SPECTRA')) + + x_cpmd_input_CPMD_ELECTRONIC_SPECTRA_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ELECTRONIC_SPECTRA. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ELECTRONIC_SPECTRA_options')) + + x_cpmd_input_CPMD_ELECTRONIC_SPECTRA_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ELECTRONIC_SPECTRA. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ELECTRONIC_SPECTRA_parameters')) + + +class x_cpmd_section_input_CPMD_ELECTROSTATIC_POTENTIAL(MSection): + ''' + Store the electrostatic potential on file. The resulting file is written in platform + specific binary format. You can use the cpmd2cube tool to convert it into a Gaussian + cube file for visualization. Note that this flag automatically activates the + \\refkeyword{RHOOUT} flag as well. With the optional keyword {\\bf SAMPLE} the file + will be written every {\\em nrhoout} steps during an MD trajectory. The corresponding + time step number will be appended to the filename. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ELECTROSTATIC_POTENTIAL')) + + x_cpmd_input_CPMD_ELECTROSTATIC_POTENTIAL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ELECTROSTATIC_POTENTIAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ELECTROSTATIC_POTENTIAL_options')) + + x_cpmd_input_CPMD_ELECTROSTATIC_POTENTIAL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ELECTROSTATIC_POTENTIAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ELECTROSTATIC_POTENTIAL_parameters')) + + +class x_cpmd_section_input_CPMD_ELF(MSection): + ''' + Store the total valence density and the valence electron localization function + ELF~\\cite{Becke90,silsav,marx-savin-97,homeofelf} on files. The default smoothing + parameters for ELF can be changed optionally when specifying in addition the PARAMETER + keyword. Then the two parameters ``elfcut'' and ``elfeps'' are read from the next + line. The particular form of ELF that is implemented is defined in the header of the + subroutine elf.F. Note 1: it is a {\\em very} good idea to increase the planewave + cutoff and then specify ``elfcut''~$=0.0$ and ``elfeps''~$=0.0$ if you want to obtain + a smooth ELF for a given nuclear configuration. In the case of a spin--polarized (i.e. + spin unrestricted) DFT calculation (see keyword \\refkeyword{LSD}) in addition the spin + --polarized average of ELF as well as the separate $\\alpha$-- and $\\beta$--orbital + parts are written to the files LSD\\_ELF, ELF\\_ALPHA and ELF\\_BETA, respectively; see + Ref.~\\cite{Kohut96} for definitions and further infos. Note 2: ELF does not make much + sense when using Vanderbilt's ultra-soft pseudopotentials! + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ELF')) + + x_cpmd_input_CPMD_ELF_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ELF. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ELF_options')) + + x_cpmd_input_CPMD_ELF_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ELF. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ELF_parameters')) + + +class x_cpmd_section_input_CPMD_EMASS(MSection): + ''' + The fictitious electron mass in atomic units is read from the next line. {\\bf + Default} is {\\bf 400 a.u.}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.EMASS')) + + x_cpmd_input_CPMD_EMASS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword EMASS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.EMASS_options')) + + x_cpmd_input_CPMD_EMASS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword EMASS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.EMASS_parameters')) + + +class x_cpmd_section_input_CPMD_ENERGYBANDS(MSection): + ''' + Write the band energies (eigenvalues) for k points in the file ENERGYBANDS. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ENERGYBANDS')) + + x_cpmd_input_CPMD_ENERGYBANDS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ENERGYBANDS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ENERGYBANDS_options')) + + x_cpmd_input_CPMD_ENERGYBANDS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ENERGYBANDS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ENERGYBANDS_parameters')) + + +class x_cpmd_section_input_CPMD_EXTERNAL_POTENTIAL(MSection): + ''' + Read an external potential from file. With ADD specified, its effects is added to the + forces acting on the ions. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.EXTERNAL_POTENTIAL')) + + x_cpmd_input_CPMD_EXTERNAL_POTENTIAL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword EXTERNAL_POTENTIAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.EXTERNAL_POTENTIAL_options')) + + x_cpmd_input_CPMD_EXTERNAL_POTENTIAL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword EXTERNAL_POTENTIAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.EXTERNAL_POTENTIAL_parameters')) + + +class x_cpmd_section_input_CPMD_EXTRAPOLATE_CONSTRAINT(MSection): + ''' + In a CDFT MD run extrapolate the next value for $V$ using a Lagrange polynomial. The + order $k$ of the polynomial is read from the next line. { \\bf Default} is + \\defaultvalue{k=5}, but it pays off to use the orderfinder.py python script on the + ENERGIES file of a former run to estimate the optimal extrapolation order + $k_\\text{opt}$. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.EXTRAPOLATE_CONSTRAINT')) + + x_cpmd_input_CPMD_EXTRAPOLATE_CONSTRAINT_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword EXTRAPOLATE_CONSTRAINT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.EXTRAPOLATE_CONSTRAINT_options')) + + x_cpmd_input_CPMD_EXTRAPOLATE_CONSTRAINT_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword EXTRAPOLATE_CONSTRAINT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.EXTRAPOLATE_CONSTRAINT_parameters')) + + +class x_cpmd_section_input_CPMD_EXTRAPOLATE_WFN(MSection): + ''' + Read the number of wavefunctions to retain from the next line. These wavefunctions + are used to extrapolate the initial guess wavefunction in Born-Oppenheimer MD. This + can help to speed up BO-MD runs significantly by reducing the number of wavefunction + optimization steps needed through two effects: the initial guess wavefunction is much + improved and also you do not need to converge as tightly to conserve energy. BO-MD + without needs CONVERGENCE ORBITALS to be set to 1.0e-7 or smaller to maintain good + energy conservation. With the additional keyword {\\bf STORE} the wavefunction history + is also written to restart files. See \\refkeyword{RESTART} for how to read it back. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.EXTRAPOLATE_WFN')) + + x_cpmd_input_CPMD_EXTRAPOLATE_WFN_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword EXTRAPOLATE_WFN. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.EXTRAPOLATE_WFN_options')) + + x_cpmd_input_CPMD_EXTRAPOLATE_WFN_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword EXTRAPOLATE_WFN. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.EXTRAPOLATE_WFN_parameters')) + + +class x_cpmd_section_input_CPMD_FFTW_WISDOM(MSection): + ''' + Controls the use of the ``wisdom'' facility when using FFTW or compatible libraries. + When enabled, CPMD will switch to using the ``measure'' mode, which enables searching + for additional runtime optimizations of the FFT. The resulting parameters will be + written to a file called {\\sl FFTW\\_WISDOM} and re-read on subsequent runs. The + parameters in the file are machine specific and when moving a job to a different + machine, the file should be deleted. The use of fftw wisdom incurs additional + overhead and thus may lead to slower execution. It is recommended to stick with the + default settings unless you know what you are doing. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.FFTW_WISDOM')) + + x_cpmd_input_CPMD_FFTW_WISDOM_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword FFTW_WISDOM. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.FFTW_WISDOM_options')) + + x_cpmd_input_CPMD_FFTW_WISDOM_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword FFTW_WISDOM. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.FFTW_WISDOM_parameters')) + + +class x_cpmd_section_input_CPMD_FILE_FUSION(MSection): + ''' + Reads in two separate \\refkeyword{RESTART} files for ground state and + \\refkeyword{ROKS} excited state and writes them into a single restart file. Required + to start \\refkeyword{SURFACE HOPPING} calculations. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.FILE_FUSION')) + + x_cpmd_input_CPMD_FILE_FUSION_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword FILE_FUSION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.FILE_FUSION_options')) + + x_cpmd_input_CPMD_FILE_FUSION_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword FILE_FUSION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.FILE_FUSION_parameters')) + + +class x_cpmd_section_input_CPMD_FILEPATH(MSection): + ''' + The path to the files written by CPMD (RESTART.x, MOVIE, ENERGIES, DENSITY.x etc.) is + read from the next line. This overwrites the value given in the environment variable + {\\bf CPMD\\_FILEPATH}. {\\bf Default} is the {\\bf current directory}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.FILEPATH')) + + x_cpmd_input_CPMD_FILEPATH_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword FILEPATH. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.FILEPATH_options')) + + x_cpmd_input_CPMD_FILEPATH_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword FILEPATH. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.FILEPATH_parameters')) + + +class x_cpmd_section_input_CPMD_FINITE_DIFFERENCES(MSection): + ''' + The step length in a finite difference run for vibrational frequencies ({VIBRATIONAL + ANALYSIS} keywords) is read from the next line. With the keywords {\\bf COORD=}{\\sl + coord\\_fdiff(1..3)} and {\\bf RADIUS=}{\\sl radius} put in the same line as the step + length, you can specify a sphere in order to calculate the finite differences only for + the atoms inside it. The sphere is centered on the position {\\sl coord\\_fdiff(1..3)} + with a radius {\\sl radius} (useful for a point defect). \\textbf{NOTE:} The the step + length for the finite difference is \\textbf{always} in Bohr (default is 1.0d-2 a.u.). + The (optional) coordinates of the center and the radius are read in either Angstrom or + Bohr, depending on whether the \\refkeyword{ANGSTROM} keyword is specified or not. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.FINITE_DIFFERENCES')) + + x_cpmd_input_CPMD_FINITE_DIFFERENCES_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword FINITE_DIFFERENCES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.FINITE_DIFFERENCES_options')) + + x_cpmd_input_CPMD_FINITE_DIFFERENCES_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword FINITE_DIFFERENCES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.FINITE_DIFFERENCES_parameters')) + + +class x_cpmd_section_input_CPMD_FIXRHO_UPWFN(MSection): + ''' + Wavefunctions optimization with the method of direct inversion of the iterative + subspace (DIIS), performed without updating the charge density at each step. When the + orbital energy gradients are below the given tolerance or when the maximum number of + iterations is reached, the KS energies and the occupation numbers are calculated, the + density is updated, and a new wavefunction optimization is started. The variations of + the density coefficients are used as convergence criterium. The default electron + temperature is 1000 K and 4 unoccupied states are added. Implemented also for + k-points. Only one sub-option is allowed per line and the respective parameter is read + from the next line. The parameters mean: \\hfill\\smallskip{\\sl VECT}: + \\hfill\\begin{minipage}[t]{10cm} The number of DIIS vectors is read from the next line. + (ODIIS with 4 vectors is the default). \\end{minipage}\\hfill {\\sl LOOP:} + \\hfill\\begin{minipage}[t]{10cm} the minimum and maximum number of DIIS iterations per + each wfn optimization is read from the following line. Default values are 4 and 20. + \\end{minipage}\\hfill {\\sl WFTOL:} \\hfill\\begin{minipage}[t]{10cm} The convergence + tolerance for the wfn optimization during the ODIIS is read from the following line. + The default value is $10^{-7}$. The program adjusts this criterion automatically, + depending on the convergence status of the density. As the density improves (when the + density updates become smaller), also the wavefunction convergence criterion is set to + its final value. \\end{minipage}\\hfill + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.FIXRHO_UPWFN')) + + x_cpmd_input_CPMD_FIXRHO_UPWFN_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword FIXRHO_UPWFN. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.FIXRHO_UPWFN_options')) + + x_cpmd_input_CPMD_FIXRHO_UPWFN_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword FIXRHO_UPWFN. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.FIXRHO_UPWFN_parameters')) + + +class x_cpmd_section_input_CPMD_FORCEMATCH(MSection): + ''' + Activates the QM/MM force matching procedure. This keywords requires the presence of a + \\&QMMM ... \\&END section with a correspoding \\refkeyword{FORCEMATCH ... END + FORCEMATCH} block. See sections~\\ref{sec:qmmm} and~\\ref{sec:forcematch-desc} for more + details. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.FORCEMATCH')) + + x_cpmd_input_CPMD_FORCEMATCH_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword FORCEMATCH. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.FORCEMATCH_options')) + + x_cpmd_input_CPMD_FORCEMATCH_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword FORCEMATCH. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.FORCEMATCH_parameters')) + + +class x_cpmd_section_input_CPMD_FREE_ENERGY_FUNCTIONAL(MSection): + ''' + Calculates the electronic free energy using free energy density + functional~\\cite{Alavi94,PSil,mbaops} from DFT at finite temperature. This option + needs additional keywords (free energy keywords). By {\\bf default} we use {\\bf Lanczos + diagonalization} with {\\bf Trotter factorization} and {\\bf Bogoliubov correction}. If + the number of states is not specified, use $N_{electrons}/2+4$. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.FREE_ENERGY_FUNCTIONAL')) + + x_cpmd_input_CPMD_FREE_ENERGY_FUNCTIONAL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword FREE_ENERGY_FUNCTIONAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.FREE_ENERGY_FUNCTIONAL_options')) + + x_cpmd_input_CPMD_FREE_ENERGY_FUNCTIONAL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword FREE_ENERGY_FUNCTIONAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.FREE_ENERGY_FUNCTIONAL_parameters')) + + +class x_cpmd_section_input_CPMD_GDIIS(MSection): + ''' + Use the method of direct inversion in the iterative subspace combined with a quasi- + Newton method (using BFGS) for optimization of the ionic + positions~\\cite{Csaszar84}.%\\cite{Fischer} The number of DIIS vectors is read from the + next line. GDIIS with {\\bf 5 vectors} is the {\\bf default} method in optimization + runs. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.GDIIS')) + + x_cpmd_input_CPMD_GDIIS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword GDIIS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.GDIIS_options')) + + x_cpmd_input_CPMD_GDIIS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword GDIIS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.GDIIS_parameters')) + + +class x_cpmd_section_input_CPMD_GSHELL(MSection): + ''' + Write a file {\\bf GSHELL} with the information on the plane waves for further use in + S(q) calculations. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.GSHELL')) + + x_cpmd_input_CPMD_GSHELL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword GSHELL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.GSHELL_options')) + + x_cpmd_input_CPMD_GSHELL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword GSHELL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.GSHELL_parameters')) + + +class x_cpmd_section_input_CPMD_HAMILTONIAN_CUTOFF(MSection): + ''' + The lower cutoff for the diagonal approximation to the Kohn-Sham + matrix~\\cite{Tuckerman94} is read from the next line. {\\bf Default} is {\\bf 0.5} + atomic units. For variable cell dynamics only the kinetic energy as calculated for the + reference cell is used. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.HAMILTONIAN_CUTOFF')) + + x_cpmd_input_CPMD_HAMILTONIAN_CUTOFF_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword HAMILTONIAN_CUTOFF. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.HAMILTONIAN_CUTOFF_options')) + + x_cpmd_input_CPMD_HAMILTONIAN_CUTOFF_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword HAMILTONIAN_CUTOFF. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.HAMILTONIAN_CUTOFF_parameters')) + + +class x_cpmd_section_input_CPMD_HARMONIC_REFERENCE_SYSTEM(MSection): + ''' + Switches harmonic reference system integration~\\cite{Tuckerman94} on/off. The number + of shells included in the analytic integration is controlled with the keyword + \\refkeyword{HAMILTONIAN CUTOFF}. By {\\bf default} this option is switched {\\bf off}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.HARMONIC_REFERENCE_SYSTEM')) + + x_cpmd_input_CPMD_HARMONIC_REFERENCE_SYSTEM_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword HARMONIC_REFERENCE_SYSTEM. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.HARMONIC_REFERENCE_SYSTEM_options')) + + x_cpmd_input_CPMD_HARMONIC_REFERENCE_SYSTEM_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword HARMONIC_REFERENCE_SYSTEM. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.HARMONIC_REFERENCE_SYSTEM_parameters')) + + +class x_cpmd_section_input_CPMD_HESSCORE(MSection): + ''' + Calculates the partial Hessian after relaxation of the enviroment, equivalent to {\\sl + NSMAXP=0} ({\\bf PRFO NSMAXP}). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.HESSCORE')) + + x_cpmd_input_CPMD_HESSCORE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword HESSCORE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.HESSCORE_options')) + + x_cpmd_input_CPMD_HESSCORE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword HESSCORE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.HESSCORE_parameters')) + + +class x_cpmd_section_input_CPMD_HESSIAN(MSection): + ''' + The initial approximate {\\bf Hessian} for a {\\bf geometry optimization} is constructed + using empirical rules with the DISCO~\\cite{Fischer92} or Schlegel's~\\cite{Schlegel84} + parametrization or simply a unit matrix is used. If the option {\\bf PARTIAL} is used + the initial approximate Hessian for a geometry optimization is constructed from a + block matrix formed of the parametrized Hessian and the partial Hessian (of the + reaction core). If the reaction core spans the entire system, its Hessian is simply + copied. The keywords \\refkeyword{RESTART} PHESS are required. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.HESSIAN')) + + x_cpmd_input_CPMD_HESSIAN_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword HESSIAN. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.HESSIAN_options')) + + x_cpmd_input_CPMD_HESSIAN_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword HESSIAN. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.HESSIAN_parameters')) + + +class x_cpmd_section_input_CPMD_INITIALIZE_WAVEFUNCTION(MSection): + ''' + The initial guess for wavefunction optimization are either random functions or + functions derived from the atomic pseudo-wavefunctions. For INITIALIZE WAVEFUNCTION + ATOMS PRIMITIVE, CPMD will use the occupation information given in the \\&BASIS section + in order to construct a minimum spin multiplicity (i.e. doublet or singlet) initial + wavefunction from the pseudo atomic orbitals. This option may be helpful to avoid + excessive spin contamination in CDFT calculations (together with an already good + initial guess for $V$) as it allows a strict initial localisation of excess spins on + any atom species. + + {\\bf Default} is to use the {\\bf atomic pseudo-wavefunctions}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.INITIALIZE_WAVEFUNCTION')) + + x_cpmd_input_CPMD_INITIALIZE_WAVEFUNCTION_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword INITIALIZE_WAVEFUNCTION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.INITIALIZE_WAVEFUNCTION_options')) + + x_cpmd_input_CPMD_INITIALIZE_WAVEFUNCTION_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword INITIALIZE_WAVEFUNCTION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.INITIALIZE_WAVEFUNCTION_parameters')) + + +class x_cpmd_section_input_CPMD_INTERFACE(MSection): + ''' + Use CPMD together with a classical molecular dynamics code. CPMD and the classical MD + code are run simultaneously and communicate via a file based protocol. See the file + egointer.F for more details. This needs a specially adapted version of the respective + classical MD code. So far, there is an interface\\cite{egoqmmm,gmxqmmm} to the MD + programs ego\\cite{ego1,ego2} and Gromacs\\cite{gmx3}. When using the suboption + PCGFIRST the code will use \\refkeyword{PCG}~MINIMIZE on the very first wavefunction + optimization and then switch back to DIIS. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.INTERFACE')) + + x_cpmd_input_CPMD_INTERFACE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword INTERFACE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.INTERFACE_options')) + + x_cpmd_input_CPMD_INTERFACE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword INTERFACE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.INTERFACE_parameters')) + + +class x_cpmd_section_input_CPMD_INTFILE(MSection): + ''' + This keyword means {\\it Interface File} and allows to select a special file name in + the reading and writing stages. The file name (max 40 characters) must be supplied in + the next line. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.INTFILE')) + + x_cpmd_input_CPMD_INTFILE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword INTFILE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.INTFILE_options')) + + x_cpmd_input_CPMD_INTFILE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword INTFILE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.INTFILE_parameters')) + + +class x_cpmd_section_input_CPMD_ISOLATED_MOLECULE(MSection): + ''' + Calculate the ionic temperature assuming that the system consists of an isolated + molecule or cluster. + + Note: + + This keyword affects exclusively the determination of the number of dynamical degrees + of freedom. + + This keyword does \\textbf{not} activate the 'cluster option' \\refkeyword{SYMMETRY} 0, + but it is activated if SYMMETRY 0 is used \\textbf{unless} the keyword + \\refkeyword{QMMM} is set as well. + + It allows studying an isolated molecule or cluster within periodic boundary + conditions. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ISOLATED_MOLECULE')) + + x_cpmd_input_CPMD_ISOLATED_MOLECULE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ISOLATED_MOLECULE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ISOLATED_MOLECULE_options')) + + x_cpmd_input_CPMD_ISOLATED_MOLECULE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ISOLATED_MOLECULE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ISOLATED_MOLECULE_parameters')) + + +class x_cpmd_section_input_CPMD_KSHAM(MSection): + ''' + Write out the Kohn-Sham Hamiltonian Matrix in the orbital basis given in the RESTART + file to KS\\_HAM. For this option to work the \\refkeyword{RESTART} option and + \\refkeyword{OPTIMIZE WAVEFUNCTION} have to be activated. This option is useful for + fragment orbital DFT (FODFT) calculations. Orbitals for the output of the FO-DFT + matrix element can be given with the option {\\bf STATE}, then indics of the two + orbitals are read from the next line. {\\bf ROUT} controls printing of involved + orbitals.\\\\ {\\bf MATRIX} instructs CPMD to read a transformation matrix from the file + LOWDIN\\_A to transform the KS-Hamiltonian to the non-orthogonal orbital basis + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.KSHAM')) + + x_cpmd_input_CPMD_KSHAM_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword KSHAM. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.KSHAM_options')) + + x_cpmd_input_CPMD_KSHAM_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword KSHAM. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.KSHAM_parameters')) + + +class x_cpmd_section_input_CPMD_LANCZOS_DIAGONALIZATION(MSection): + ''' + Use {\\bf Lanczos diagonalization} scheme. \\textbf{Default} with \\textbf{free energy + functional}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.LANCZOS_DIAGONALIZATION')) + + x_cpmd_input_CPMD_LANCZOS_DIAGONALIZATION_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword LANCZOS_DIAGONALIZATION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.LANCZOS_DIAGONALIZATION_options')) + + x_cpmd_input_CPMD_LANCZOS_DIAGONALIZATION_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword LANCZOS_DIAGONALIZATION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.LANCZOS_DIAGONALIZATION_parameters')) + + +class x_cpmd_section_input_CPMD_LANCZOS_PARAMETER(MSection): + ''' + Give four parameters for Lanczos diagonalization in the next line: \\begin{itemize} + \\item Maximal number of Lanczos iterations (50 is enough), \\item Maximal number for + the Krylov sub-space (8 best value), \\item Blocking dimension ( $\\leq NSTATE$, best in + range 20-100) If you put a negative or zero number, this parameter is fixed by the + program in function of the number of states ($(n+1)/(int(n/100+1))$). \\item Tolerance + for the accuracy of wavefunctions ($10^{-8}$ otherwise $10^{-12}$ with Trotter + approximation) \\end{itemize} If n is specified, read $n-1$ lines after the first one, + containing a threshold density and a tolerance. See the hints section + \\ref{hints:lanczos} for more information. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.LANCZOS_PARAMETER')) + + x_cpmd_input_CPMD_LANCZOS_PARAMETER_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword LANCZOS_PARAMETER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.LANCZOS_PARAMETER_options')) + + x_cpmd_input_CPMD_LANCZOS_PARAMETER_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword LANCZOS_PARAMETER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.LANCZOS_PARAMETER_parameters')) + + +class x_cpmd_section_input_CPMD_LANGEVIN(MSection): + ''' + Use a (generalized) Langevin equation to thermostat the simulation\\cite{Ceriotti10}. + By default, the component of the noise parallel to the center of mass velocity is + removed at each step of the thermostat. Removal can be disabled by the option {\\sl + MOVECM}. \\\\\\smallskip {\\sl CUSTOM:} \\hfill\\begin{minipage}[t]{10cm} The {\\bf number of + additional momenta} of the generalized Langevin equation {\\sl NS} is read from the + next line. The drift matrix (dimension $(NS+1)\\times(NS+1)$) is read from the file + \\texttt{GLE-A}, which must be in the same directory in which the program is run. + Optionally, the static covariance for the GLE dynamics can be provided in the file + \\texttt{GLE-C}, so as to generate {\\bf non-canonical sampling}. A library of GLE + parameters can be downloaded from + \\htref{http://gle4md.berlios.de/}{http://gle4md.berlios.de/} \\end{minipage} + \\smallskip\\\\ A few {\\bf presets} are provided, and are activated by the keywords: {\\sl + WHITE:} \\hfill\\begin{minipage}[t]{10cm} A simple {\\bf white-noise} Langevin dynamics + is used. The optimally-sampled frequency {\\sl W0} (in cm$^{-1}$) is read from the next + line. Note that use of {\\sl LANGEVIN WHITE} in conjunction with {\\sl MOLECULAR + DYNAMICS CPMD} will most likely cause a large drift of the electronic temperature. + \\end{minipage} {\\sl OPTIMAL:} \\hfill\\begin{minipage}[t]{10cm} An {\\bf optimal- + sampling} generalized Langevin dynamics is used. The frequencies in the range from + $10^{-4}${\\sl W0} up to {\\sl W0} will be sampled efficiently. Note that use of {\\sl + LANGEVIN OPTIMAL} in conjunction with {\\sl MOLECULAR DYNAMICS CPMD} will cause a large + drift of the electronic temperature. This option is suggested for use in Born- + Oppenheimer MD. \\end{minipage} {\\sl CPMD:} \\hfill\\begin{minipage}[t]{10cm} A + generalized Langevin dynamics is used which is designed to work in conjunction with + Car-Parrinello MD. The highest ionic frequency {\\sl W0} (in cm$^{-1}$) is read from + the next line. Ionic frequencies down to $10^{-4}${\\sl W0} will be sampled + efficiently, but not as much as for the {\\sl OPTIMAL} keyword. \\end{minipage} {\\sl + SMART:} \\hfill\\begin{minipage}[t]{10cm} A generalized Langevin dynamics that aims to + be as efficient as possible on the slowest time scale accessible to a typical ab + initio simulation. In practice, vibrations with a time scale which is about 10000 time + steps will be sampled optimally, and faster modes will be sampled as efficiently as + possible without disturbing slower modes. The highest ionic frequency {\\sl W0} (in + cm$^{-1}$) is read from the next line. Will be about 50\\%{} more efficient than {\\sl + OPTIMAL} for slow modes, but less efficient for fast vibrations. Use only with Born- + Oppenheimer dynamics. \\end{minipage} + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.LANGEVIN')) + + x_cpmd_input_CPMD_LANGEVIN_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword LANGEVIN. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.LANGEVIN_options')) + + x_cpmd_input_CPMD_LANGEVIN_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword LANGEVIN. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.LANGEVIN_parameters')) + + +class x_cpmd_section_input_CPMD_LBFGS(MSection): + ''' + Use the limited-memory BFGS method (L-BFGS) for linear scaling {\\bf optimization} of + the {\\bf ionic positions}. For more informations, see~\\cite{LSCAL}. The information + about the Hessian for the quasi-Newton method employed is derived from the history of + the optimization~\\cite{LSCAL,Liu89}. Only one sub-option is allowed per line and the + respective parameter is read from the next line. The parameters mean: \\hfill\\smallskip + {\\sl NREM}: \\hfill\\begin{minipage}[t]{10cm} {\\bf Number} of {\\bf ionic gradients} and + {\\bf displacements remembered} to approximate the Hessian. The default is either 40 or + the number of ionic degrees of freedom, whichever is smaller. Values greater the + number of degrees of freedom are not advisable. \\end{minipage} {\\sl NTRUST:} + \\hfill\\begin{minipage}[t]{10cm} {\\sl NTRUST=1} switches from a trust radius algorithm + to a {\\bf line search} algorithm. The default value of 0 ({\\bf trust radius}) is + recommended. \\end{minipage} {\\sl NRESTT:} \\hfill\\begin{minipage}[t]{10cm} {\\sl + NRESTT$>$0} demands a {\\bf periodic reset} of the optimizer every {\\sl NRESTT} steps. + Default is 0 (no periodic reset). This option makes only sense if the ionic gradient + is not accurate. \\end{minipage} {\\sl TRUSTR:} \\hfill\\begin{minipage}[t]{10cm} Maximum + and initial {\\bf trust radius}. Default is 0.5 atomic units. \\end{minipage} It can be + useful to combine these keywords with the keywords \\refkeyword{PRFO}, + \\refkeyword{CONVERGENCE} ADAPT, \\refkeyword{RESTART} LSSTAT, \\refkeyword{PRINT} LSCAL + ON and others. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.LBFGS')) + + x_cpmd_input_CPMD_LBFGS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword LBFGS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.LBFGS_options')) + + x_cpmd_input_CPMD_LBFGS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword LBFGS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.LBFGS_parameters')) + + +class x_cpmd_section_input_CPMD_LINEAR_RESPONSE(MSection): + ''' + A perturbation theory calculation is done, according to the (required) further input + in the \\&RESP section. In the latter, one of the possible perturbation types (PHONONS, + LANCZOS, RAMAN, FUKUI, KPERT, NMR, EPR, see section \\ref{sec:resp-section}) can be + chosen, accompanied by further options. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.LINEAR_RESPONSE')) + + x_cpmd_input_CPMD_LINEAR_RESPONSE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword LINEAR_RESPONSE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.LINEAR_RESPONSE_options')) + + x_cpmd_input_CPMD_LINEAR_RESPONSE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword LINEAR_RESPONSE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.LINEAR_RESPONSE_parameters')) + + +class x_cpmd_section_input_CPMD_LOCAL_SPIN_DENSITY(MSection): + ''' + Use the local spin density approximation. {\\bf Warning:} Not all functionals are + implemented for this option. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.LOCAL_SPIN_DENSITY')) + + x_cpmd_input_CPMD_LOCAL_SPIN_DENSITY_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword LOCAL_SPIN_DENSITY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.LOCAL_SPIN_DENSITY_options')) + + x_cpmd_input_CPMD_LOCAL_SPIN_DENSITY_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword LOCAL_SPIN_DENSITY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.LOCAL_SPIN_DENSITY_parameters')) + + +class x_cpmd_section_input_CPMD_LSD(MSection): + ''' + Use the local spin density approximation. {\\bf Warning:} Not all functionals are + implemented for this option. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.LSD')) + + x_cpmd_input_CPMD_LSD_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword LSD. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.LSD_options')) + + x_cpmd_input_CPMD_LSD_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword LSD. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.LSD_parameters')) + + +class x_cpmd_section_input_CPMD_MAXITER(MSection): + ''' + The maximum number of iteration steps for the self-consistency of wavefunctions. + Recommended use instead of \\refkeyword{MAXSTEP} for pure wavefunction optimisation. + The value is read from the next line. {\\bf Default} is {\\bf 10000} steps. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.MAXITER')) + + x_cpmd_input_CPMD_MAXITER_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword MAXITER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.MAXITER_options')) + + x_cpmd_input_CPMD_MAXITER_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword MAXITER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.MAXITER_parameters')) + + +class x_cpmd_section_input_CPMD_MAXRUNTIME(MSection): + ''' + The maximum RUN TIME (ELAPSED TIME) in seconds to be used is read from the next line. + The calculation will stop after the given amount of time. {\\bf Default} is no limit. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.MAXRUNTIME')) + + x_cpmd_input_CPMD_MAXRUNTIME_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword MAXRUNTIME. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.MAXRUNTIME_options')) + + x_cpmd_input_CPMD_MAXRUNTIME_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword MAXRUNTIME. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.MAXRUNTIME_parameters')) + + +class x_cpmd_section_input_CPMD_MAXSTEP(MSection): + ''' + The maximum number of steps for geometry optimization or molecular dynamics to be + performed. In the case of pure wavefunction optimisation, this keyword may be used + instead of \\refkeyword{MAXITER}. The value is read from the next line. {\\bf Default} + is {\\bf 10000} steps. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.MAXSTEP')) + + x_cpmd_input_CPMD_MAXSTEP_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword MAXSTEP. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.MAXSTEP_options')) + + x_cpmd_input_CPMD_MAXSTEP_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword MAXSTEP. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.MAXSTEP_parameters')) + + +class x_cpmd_section_input_CPMD_MEMORY(MSection): + ''' + Using {\\bf BIG}, the structure factors for the density cutoff are only calculated once + and stored for reuse. This option allows for considerable time savings in connection + with Vanderbilt pseudopotentials. {\\bf Default} is ({\\bf SMALL}) to {\\bf recalculate} + them whenever needed. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.MEMORY')) + + x_cpmd_input_CPMD_MEMORY_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword MEMORY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.MEMORY_options')) + + x_cpmd_input_CPMD_MEMORY_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword MEMORY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.MEMORY_parameters')) + + +class x_cpmd_section_input_CPMD_MIRROR(MSection): + ''' + Write the input file to the output. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.MIRROR')) + + x_cpmd_input_CPMD_MIRROR_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword MIRROR. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.MIRROR_options')) + + x_cpmd_input_CPMD_MIRROR_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword MIRROR. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.MIRROR_parameters')) + + +class x_cpmd_section_input_CPMD_MIXDIIS(MSection): + ''' + Not documented + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.MIXDIIS')) + + x_cpmd_input_CPMD_MIXDIIS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword MIXDIIS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.MIXDIIS_options')) + + x_cpmd_input_CPMD_MIXDIIS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword MIXDIIS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.MIXDIIS_parameters')) + + +class x_cpmd_section_input_CPMD_MIXSD(MSection): + ''' + Not documented + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.MIXSD')) + + x_cpmd_input_CPMD_MIXSD_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword MIXSD. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.MIXSD_options')) + + x_cpmd_input_CPMD_MIXSD_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword MIXSD. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.MIXSD_parameters')) + + +class x_cpmd_section_input_CPMD_MODIFIED_GOEDECKER(MSection): + ''' + To be used in combination with \\refkeyword{LOW SPIN EXCITATION}~\\textbf{ROKS}. + Calculation of the off-diagonal Kohn-Sham matrix elements $F_{AB}$ and $F_{BA}$ (with + A, B: ROKS-SOMOs) is performed according to a modified Goedecker-Umrigar scheme ( + $F_{AB} := (1-\\lambda _{AB})F_{AB} + \\lambda _{AB} F_{BA}$ and $F_{BA} := (1-\\lambda + _{BA})F_{BA} + \\lambda _{BA} F_{AB}$ ). Default values are $\\lambda _{AB}=-0.5$ and + $\\lambda _{BA}=0.5$. see Ref.~\\cite{GrimmJCP2003}. With the optional keyword + \\textbf{PARAMETERS}: $\\lambda _{AB}$ and $\\lambda _{BA}$ are read from the next line. + Can be used to avoid unphysical rotation of the SOMOs. Always check the orbitals! See + also \\ref{hints:roks}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.MODIFIED_GOEDECKER')) + + x_cpmd_input_CPMD_MODIFIED_GOEDECKER_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword MODIFIED_GOEDECKER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.MODIFIED_GOEDECKER_options')) + + x_cpmd_input_CPMD_MODIFIED_GOEDECKER_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword MODIFIED_GOEDECKER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.MODIFIED_GOEDECKER_parameters')) + + +class x_cpmd_section_input_CPMD_MOLECULAR_DYNAMICS(MSection): + ''' + Perform a molecular dynamics (MD) run. {\\bf CP} stands for a Car-Parrinello type MD. + With the option {\\bf BO} a Born-Oppenheimer MD is performed where the wavefunction is + reconverged after each MD-step. {\\bf EH} specifies Ehrenfest type dynamics according + to which the Kohn-Sham orbitals are propagated in time (real electronic dynamics + coupled to the nuclear dynamics). In this case the time step has to be decreased + accordingly due to the small mass of the electrons (typical values between 0.01 and + 0.1 au). If you use EH dynamics and additional input section {\\&PTDDFT} need to be + specified. You need to start the dynamics with well converged KS orbitals from the + RESTART file (before starting the EH dynamics do an optimization of the wavefunction + with a convergence of {1.D-8} or {1.D-9}, if possibe. An additional file called + "wavefunctions" is produced, which containes the complex KS orbitals needed for the + restart of the EH dynamics (see restart options in {\\&PTDDFT}). Typical (minimal) + input \\&CPMD and \\&PTDDFT sections to be used with EH dynmiacs \\&CPMD MOLECULAR + DYNAMICS EH RESTART WAVEFUNCTION COORDINATES LATEST CAYLEY RUNGE-KUTTA TIMESTEP + 0.01 MAXSTEP 10000 \\&END \\&PTDDFT ACCURACY 1.0D-8 RESTART 2 \\&END The + keywords CAYLEY and RUNGE-KUTTA specifies the algorithms used for the propagation of + the KS orbitals (are the default and recommended options). {\\bf CLASSICAL } means that + a MD that includes classical atoms is performed. If {\\bf FILE} is set, then the + trajectory is reread from a file instead of being calculated. This is useful for + performing analysis on a previous trajectory. Can be used in conjonction with the + standard MD options like DIPOLE DYNAMICS and WANNIER; some other features like LINEAR + RESPONSE are also enabled. The trajectory is read from a file named TRAJSAVED (usually + a copy of a previous TRAJECTORY file), or TRAJSAVED.xyz if {\\bf XYZ} is set. {\\bf + NSKIP} and {\\bf NSAMPLE} control the selection of frames read: the frame read at step + ISTEP is NSKIP+ISTEP*NSAMPLE. {\\bf Default} is {\\bf CP}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.MOLECULAR_DYNAMICS')) + + x_cpmd_input_CPMD_MOLECULAR_DYNAMICS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword MOLECULAR_DYNAMICS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.MOLECULAR_DYNAMICS_options')) + + x_cpmd_input_CPMD_MOLECULAR_DYNAMICS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword MOLECULAR_DYNAMICS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.MOLECULAR_DYNAMICS_parameters')) + + +class x_cpmd_section_input_CPMD_MOVERHO(MSection): + ''' + Mixing used during optimization of geometry or molecular dynamics. Use atomic or + pseudowavefunctions to project wavefunctions in order to calculate the new ones with + movement of atoms. Read in the next line the parameter (typically 0.2). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.MOVERHO')) + + x_cpmd_input_CPMD_MOVERHO_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword MOVERHO. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.MOVERHO_options')) + + x_cpmd_input_CPMD_MOVERHO_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword MOVERHO. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.MOVERHO_parameters')) + + +class x_cpmd_section_input_CPMD_MOVIE(MSection): + ''' + Write the atomic coordinates without applying periodic boundary conditions in MOVIE + format every {\\sl IMOVIE} time steps on file {\\em MOVIE}. {\\sl IMOVIE} is read from + the next line. {\\bf Default} is {\\bf not} to write a movie file. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.MOVIE')) + + x_cpmd_input_CPMD_MOVIE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword MOVIE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.MOVIE_options')) + + x_cpmd_input_CPMD_MOVIE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword MOVIE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.MOVIE_parameters')) + + +class x_cpmd_section_input_CPMD_NOGEOCHECK(MSection): + ''' + Default is to check all atomic distances and stop the program if the smallest + disctance is below 0.5 Bohr. This keyword requests not to perform the check. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.NOGEOCHECK')) + + x_cpmd_input_CPMD_NOGEOCHECK_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword NOGEOCHECK. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.NOGEOCHECK_options')) + + x_cpmd_input_CPMD_NOGEOCHECK_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword NOGEOCHECK. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.NOGEOCHECK_parameters')) + + +class x_cpmd_section_input_CPMD_NONORTHOGONAL_ORBITALS(MSection): + ''' + Use the norm constraint method~\\cite{HutterIP} for molecular dynamics or + non\\-orthogonal orbitals in an optimization run. On the next line the limit of the off + diagonal elements of the overlap matrix is defined. {\\bf Warning:} Adding or deleting + this option during a MD run needs special care. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.NONORTHOGONAL_ORBITALS')) + + x_cpmd_input_CPMD_NONORTHOGONAL_ORBITALS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword NONORTHOGONAL_ORBITALS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.NONORTHOGONAL_ORBITALS_options')) + + x_cpmd_input_CPMD_NONORTHOGONAL_ORBITALS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword NONORTHOGONAL_ORBITALS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.NONORTHOGONAL_ORBITALS_parameters')) + + +class x_cpmd_section_input_CPMD_NOSE_PARAMETERS(MSection): + ''' + The {\\bf parameters} controlling the {\\bf Nos\\'e thermostats}~\\cite{Nose84,Hoover85} + are read in the following order from the next line: The {\\bf length} of the + Nos\\'e-Hoover chain for the {\\bf ions}, the {\\bf length} of the Nos\\'e-Hoover chain + for the {\\bf electrons}, the {\\bf length} of the Nos\\'e-Hoover chain for the {\\bf cell + parameters}. (The respective {\\bf default} values are {\\bf 4}.) The {\\bf + multiplication factor} (NEDOF0, a real number) for the number of {\\bf electronic} + degrees of freedom. The used degrees of freedom (NEDOF) are defined as + $NEDOF=NEDOF0*X$ If NEDOF0 is a negative number X is the true number of DOFs, if it's + a positive number, X is the number of electronic states ({\\bf default} for NEDOF0 is + {\\bf 6}). The order of the {\\bf Suzuki/Yoshida integrator} ({\\bf default} is {\\bf 7}, + choices are 3, 5, 7, 9, 15, 25, 125 and 625), and the {\\bf decomposition ratio} of the + time step ({\\bf default} is {\\bf 1}). If this keyword is omitted, the defaults are + used. {\\bf If the keyword is used \\underline{all} parameters have to be specified.} + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.NOSE_PARAMETERS')) + + x_cpmd_input_CPMD_NOSE_PARAMETERS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword NOSE_PARAMETERS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.NOSE_PARAMETERS_options')) + + x_cpmd_input_CPMD_NOSE_PARAMETERS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword NOSE_PARAMETERS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.NOSE_PARAMETERS_parameters')) + + +class x_cpmd_section_input_CPMD_NOSE(MSection): + ''' + {\\bf Nos\\'e-Hoover chains}~\\cite{Nose84,Hoover85} for the {\\bf ions}, {\\bf electrons}, + or {\\bf cell parameters} are used. The {\\bf target temperature} in Kelvin and the {\\bf + thermostat frequency} in $cm^{-1}$, respectively the {\\bf fictitious kinetic energy} + in atomic units and the {\\bf thermostat frequency} in $cm^{-1}$ are read from the next + line. Two files NOSE\\_ENERGY and NOSE\\_TRAJEC are written at each step containing the + Nos\\'e-Hoover kinetic, potential and total energies along the dynamics (NOSE\\_ENERGY) + and the Nos\\'e-Hoover variables and their velocities (NOSE\\_TRAJEC); these are useful + in a wealth of post-processing calculations such as, e.~g. heat transfer + problems\\cite{heat1,heat2}. For the ionic case the additional keyword {\\bf ULTRA} + selects a thermostat for each species, the keyword {\\bf MASSIVE} selects a thermostat + for each degree of freedom, and the keyword {\\bf CAFES} can be used to give different + temperatures to different groups of atoms\\cite{cafes02}. The syntax in the {\\bf CAFES} + case is:\\\\[2ex] \\texttt{NOSE IONS CAFES} ~~~~\\textsl{ncafesgrp} + ~~\\textsl{cpnumber\\_a\\_1}~~\\textsl{cpnumber\\_a\\_2}~~Temperature Frequency \\dots + ~~\\textsl{cpnumber\\_n\\_1}~~\\textsl{cpnumber\\_n\\_2}~~Temperature Frequency\\\\[2ex] There + are \\textsl{ncafesgrp} groups, specified by giving their first CPMD atom number + (\\textsl{cpnumber\\_X\\_1}) and last CPMD atom number (\\textsl{cpnumber\\_X\\_2}). In the + case of hybrid QM/MM simulations, you have to consult the QMMM\\_ORDER file to find + those numbers. The temperature and frequency can be different for each group. All + atoms of the system have to be in a CAFES group. A new file, \\texttt{CAFES} is created + containing the temperature of each group (cols. 2 \\dots \\textsl{ncafesgrp+1}) and the + energy of the Nose-Hoover chains of that group (last columns). Using CAFES with + different temperatures only makes sense if the different groups are decoupled from + each other by increasing the masses of the involved atoms. The mass can be specified + in the topology / or with the \\refkeyword{ISOTOPE} keyword. However, you can only + change the mass of a complete CPMD species at a time. Hence, the topology and/or the + input should be such that atoms of different CAFES group are in different species. + {\\bf NOTE:} CAFES is currently not restartable.\\\\[2ex] The keyword {\\bf LOCAL} + collects groups of atoms to seperate thermostats, each having its own Nos\\'e-Hoover + chain. Specify the local thermostats as follows:\\\\[1ex] \\begin{tabular}{lll} + \\multicolumn{3}{l}{\\tt NOSE IONS LOCAL} \\multicolumn{3}{l}{$n_l$ \\em (number of local + thermostats)} \\em temperature 1 & \\em frequency 1& \\vdots \\em temperature $n_l$ & \\em + frequency $n_l$ &\\\\[1ex] \\multicolumn{3}{l}{$n_r$ \\em (number of atom ranges)} \\em + thermostat number & \\em start atom & \\em end atom \\vdots &\\em ($n_r$ entries)& + \\end{tabular} The parser for the atom ranges uses either the CPMD ordering or the + GROMOS ordering in case of classical or QM/MM runs. Multiple ranges may be specified + for the same thermostat. Atoms belonging to the same CPMD constraint or the same + solvent molecule in QM/MM runs must belong to the same local thermostat. If {\\bf T0} + option is present, the initial temperature for the Nos{\\'e}-Hoover chains are read + soon after the thermostat frequencies in the same line (also for the LOCAL + thermostat). By default it is same as the target temperature of the thermostat. Note: + This is not implemented for the CAFES thermostat. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.NOSE')) + + x_cpmd_input_CPMD_NOSE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword NOSE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.NOSE_options')) + + x_cpmd_input_CPMD_NOSE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword NOSE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.NOSE_parameters')) + + +class x_cpmd_section_input_CPMD_ODIIS(MSection): + ''' + Use the method of {\\bf direct inversion} in the iterative subspace for {\\bf + optimization} of the {\\bf wavefunction}~\\cite{Hutter94a}. The number of DIIS vectors + is read from the next line. (ODIIS with {\\bf 10 vectors} is the {\\bf default} method + in optimization runs.) The preconditioning is controlled by the keyword + \\refkeyword{HAMILTONIAN CUTOFF}. Optionally preconditioning can be disabled. By + default, the number of wavefunction optimization cycles until DIIS is {\\bf reset} on + poor progress, is the number of DIIS vectors. With {\\bf ODIIS NO\\_RESET}, this number + can be changed, or DIIS resets can be {\\bf disabled} altogether with a value of -1. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ODIIS')) + + x_cpmd_input_CPMD_ODIIS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ODIIS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ODIIS_options')) + + x_cpmd_input_CPMD_ODIIS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ODIIS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ODIIS_parameters')) + + +class x_cpmd_section_input_CPMD_OPTIMIZE_GEOMETRY(MSection): + ''' + This option causes the program to optimize the geometry of the system through a + sequence of wavefunction optimizations and position updates. The additional keyword + XYZ requests writing the ``trajectory'' of the geometry additionally in xmol/xyz- + format in a file {\\em GEO\\_OPT.xyz}. If the keyword SAMPLE is given, {\\em NGXYZ} is + read from the next line, and then only every {\\em NGXTZ} step is written to the + xmol/xyz file. The {\\bf default} is to write every step ({\\em NGXYZ} = $1$). By + default the a BFGS/DIIS algorithm is used (see \\refkeyword{GDIIS}) to updated the + ionic positions. Other options are: \\refkeyword{LBFGS}, \\refkeyword{PRFO}, and + \\refkeLMAXyword{STEEPEST DESCENT} IONS. See \\refkeyword{OPTIMIZE WAVEFUNCTION} for + details on the corresponding options for wavefunction optimizations. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.OPTIMIZE_GEOMETRY')) + + x_cpmd_input_CPMD_OPTIMIZE_GEOMETRY_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword OPTIMIZE_GEOMETRY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.OPTIMIZE_GEOMETRY_options')) + + x_cpmd_input_CPMD_OPTIMIZE_GEOMETRY_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword OPTIMIZE_GEOMETRY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.OPTIMIZE_GEOMETRY_parameters')) + + +class x_cpmd_section_input_CPMD_OPTIMIZE_WAVEFUNCTION(MSection): + ''' + Request a single point energy calculation through a wavefunction optimization. The + resulting total energy is printed (for more output options see, e.g.,: + \\refkeyword{PRINT}, \\refkeyword{RHOOUT}, \\refkeyword{ELF}) and a \\refkeyword{RESTART} + file is written. This restart file is a prerequisite for many other subsequent + calculation types in CPMD, e.g. \\refkeyword{MOLECULAR DYNAMICS} CP or + \\refkeyword{PROPERTIES}. By default a DIIS optimizer is used (see \\refkeyword{ODIIS}), + but other options are: \\refkeyword{PCG} (optionally with MINIMIZE), + \\refkeyword{LANCZOS DIAGONALIZATION}, \\refkeyword{DAVIDSON DIAGONALIZATION}, and + \\refkeyword{STEEPEST DESCENT} ELECTRONS. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.OPTIMIZE_WAVEFUNCTION')) + + x_cpmd_input_CPMD_OPTIMIZE_WAVEFUNCTION_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword OPTIMIZE_WAVEFUNCTION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.OPTIMIZE_WAVEFUNCTION_options')) + + x_cpmd_input_CPMD_OPTIMIZE_WAVEFUNCTION_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword OPTIMIZE_WAVEFUNCTION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.OPTIMIZE_WAVEFUNCTION_parameters')) + + +class x_cpmd_section_input_CPMD_ORBITAL_HARDNESS(MSection): + ''' + Perform an orbital hardness calculation. See section \\&Hardness for further input + options. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ORBITAL_HARDNESS')) + + x_cpmd_input_CPMD_ORBITAL_HARDNESS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ORBITAL_HARDNESS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ORBITAL_HARDNESS_options')) + + x_cpmd_input_CPMD_ORBITAL_HARDNESS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ORBITAL_HARDNESS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ORBITAL_HARDNESS_parameters')) + + +class x_cpmd_section_input_CPMD_ORTHOGONALIZATION(MSection): + ''' + Orthogonalization in optimization runs is done either by a L\\"owdin (symmetric) or + Gram-Schmidt procedure. {\\bf Default} is Gram-Schmidt except for parallel runs where + L\\"owdin orthogonalization is used with the conjugate-gradient scheme. With the + additional keyword {\\bf MATRIX} the L\\"owdin transformation matrix is written to a + file named LOWDIN\\_A. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ORTHOGONALIZATION')) + + x_cpmd_input_CPMD_ORTHOGONALIZATION_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ORTHOGONALIZATION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ORTHOGONALIZATION_options')) + + x_cpmd_input_CPMD_ORTHOGONALIZATION_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ORTHOGONALIZATION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ORTHOGONALIZATION_parameters')) + + +class x_cpmd_section_input_CPMD_PATH_INTEGRAL(MSection): + ''' + Perform a {\\bf path integral molecular dynamics} calculation~\\cite{Marx94,Marx96}. + This keyword requires further input in the section \\&PIMD ... \\&END. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.PATH_INTEGRAL')) + + x_cpmd_input_CPMD_PATH_INTEGRAL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword PATH_INTEGRAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.PATH_INTEGRAL_options')) + + x_cpmd_input_CPMD_PATH_INTEGRAL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword PATH_INTEGRAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.PATH_INTEGRAL_parameters')) + + +class x_cpmd_section_input_CPMD_PATH_MINIMIZATION(MSection): + ''' + Perform a {\\bf mean free energy path} search~\\cite{Eijnden06}. This keyword requires + further input in the section \\&PATH ... \\&END. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.PATH_MINIMIZATION')) + + x_cpmd_input_CPMD_PATH_MINIMIZATION_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword PATH_MINIMIZATION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.PATH_MINIMIZATION_options')) + + x_cpmd_input_CPMD_PATH_MINIMIZATION_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword PATH_MINIMIZATION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.PATH_MINIMIZATION_parameters')) + + +class x_cpmd_section_input_CPMD_PATH_SAMPLING(MSection): + ''' + Use CPMD together with a reaction path sampling~\\cite{tps} program. This needs special + software. Note: this keyword has {\\em nothing} to do with path integral MD as + activated by the keyword PATH INTEGRAL and as specified in the section \\&PIMD ... + \\&END. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.PATH_SAMPLING')) + + x_cpmd_input_CPMD_PATH_SAMPLING_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword PATH_SAMPLING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.PATH_SAMPLING_options')) + + x_cpmd_input_CPMD_PATH_SAMPLING_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword PATH_SAMPLING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.PATH_SAMPLING_parameters')) + + +class x_cpmd_section_input_CPMD_PCG(MSection): + ''' + Use the method of {\\bf preconditioned conjugate gradients} for {\\bf optimization} of + the {\\bf wavefunction}. The fixed step length is controlled by the keywords + \\refkeyword{TIMESTEP ELECTRONS} and \\refkeyword{EMASS}. If the additional option {\\bf + MINIMIZE} is chosen, then additionally line searches are performed to improve the + preconditioning. The preconditioning is controlled by the keyword + \\refkeyword{HAMILTONIAN CUTOFF}. Optionally preconditioning can be disabled. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.PCG')) + + x_cpmd_input_CPMD_PCG_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword PCG. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.PCG_options')) + + x_cpmd_input_CPMD_PCG_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword PCG. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.PCG_parameters')) + + +class x_cpmd_section_input_CPMD_PRFO_NSVIB(MSection): + ''' + Perform a {\\bf vibrational analysis} every NSVIB P-RFO steps {\\bf on the fly}. This + option only works with the P-RFO and microiterative transition state search + algorithms. In case of microiterative TS search, only the reaction core is analyzed. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.PRFO_NSVIB')) + + x_cpmd_input_CPMD_PRFO_NSVIB_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword PRFO_NSVIB. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.PRFO_NSVIB_options')) + + x_cpmd_input_CPMD_PRFO_NSVIB_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword PRFO_NSVIB. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.PRFO_NSVIB_parameters')) + + +class x_cpmd_section_input_CPMD_PRFO(MSection): + ''' + Use the partitioned rational function optimizer (P-RFO) with a quasi-Newton method + for {\\bf optimization} of the {\\bf ionic positions}. For more informations, + see~\\cite{LSCAL}. The approximated Hessian is updated using the Powell + method~\\cite{Powell71}. This method is used to find {\\bf transition states} by {\\bf + following eigenmodes} of the approximated Hessian~\\cite{Banerjee85,LSCAL}. Only one + suboption is allowed per line and the respective parameter is read from the next line. + The suboption {\\bf PRJHES} does not take any parameter. If it is present, the + translational and rotational modes are removed from the Hessian. This is only + meaningful for conventional (not microiterative) transition state search. The + parameters mean: \\hfill\\smallskip {\\sl MODE}: \\hfill\\begin{minipage}[t]{9.6cm} Number + of the initial Hessian {\\bf eigenmode} to be followed. Default is 1 (lowest + eigenvalue). \\end{minipage} {\\sl MDLOCK:} \\hfill\\begin{minipage}[t]{9.6cm} {\\sl + MDLOCK=1} switches from a mode following algorithm to a {\\bf fixed eigenvector} to be + maximized. The default value of 0 ({\\bf mode following}) is recommended. + \\end{minipage} {\\sl TRUSTP:} \\hfill\\begin{minipage}[t]{9.6cm} Maximum and initial {\\bf + trust radius}. Default is 0.2 atomic units. \\end{minipage} {\\sl OMIN:} + \\hfill\\begin{minipage}[t]{9.6cm} This parameter is the minimum {\\bf overlap} between + the maximized mode of the previous step and the most overlapping eigenvector of the + current Hessian. The trust radius is reduced until this requirement is fulfilled. The + default is 0.5. \\end{minipage} {\\sl DISPLACEMENT:} \\hfill\\begin{minipage}[t]{9.6cm} + Finite-difference {\\bf displacement} for initial partial Hessian. The default is 0.02. + \\end{minipage} {\\sl HESSTYPE:} \\hfill\\begin{minipage}[t]{9.6cm} {\\bf Type} of initial + partial Hessian. 0: Finite-difference. 1: Taken from the full Hessian assuming a + block-diagonal form. See keyword \\refkeyword{HESSIAN}. The default is 0. + \\end{minipage} It can be useful to combine these keywords with the keywords + \\refkeyword{CONVERGENCE} ENERGY, \\refkeyword{RESTART} LSSTAT, \\refkeyword{RESTART} + PHESS, \\refkeyword{PRFO} NSVIB, \\refkeyword{PRINT} LSCAL ON and others. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.PRFO')) + + x_cpmd_input_CPMD_PRFO_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword PRFO. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.PRFO_options')) + + x_cpmd_input_CPMD_PRFO_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword PRFO. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.PRFO_parameters')) + + +class x_cpmd_section_input_CPMD_PRINT(MSection): + ''' + A {\\bf detailed output} is printed every {\\sl IPRINT} iterations. Either only + different contribution to the energy or in addition the atomic coordinates and the + forces are printed. {\\sl IPRINT} is read from the next line if the keywords {\\bf ON} + or {\\bf OFF} are not specified. {\\bf Default} is {\\bf only energies} after the first + step and at the end of the run. OFF switches the output off. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.PRINT')) + + x_cpmd_input_CPMD_PRINT_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword PRINT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.PRINT_options')) + + x_cpmd_input_CPMD_PRINT_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword PRINT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.PRINT_parameters')) + + +class x_cpmd_section_input_CPMD_PRNGSEED(MSection): + ''' + The seed for the random number generator is read as an integer number from the next + line. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.PRNGSEED')) + + x_cpmd_input_CPMD_PRNGSEED_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword PRNGSEED. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.PRNGSEED_options')) + + x_cpmd_input_CPMD_PRNGSEED_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword PRNGSEED. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.PRNGSEED_parameters')) + + +class x_cpmd_section_input_CPMD_PROJECT(MSection): + ''' + This keyword is controlling the calculation of the constraint force in optimization + runs. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.PROJECT')) + + x_cpmd_input_CPMD_PROJECT_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword PROJECT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.PROJECT_options')) + + x_cpmd_input_CPMD_PROJECT_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword PROJECT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.PROJECT_parameters')) + + +class x_cpmd_section_input_CPMD_PROPAGATION_SPECTRA(MSection): + ''' + Calculates the electronic absorption spectra using the TDDFT propagation of the Kohn- + Sham orbitals. Use the section \\&PTDDFT to define the parameters. Use this principal + keyword always with CAYLEY (in \\&CPMD). The program produces a file "dipole.dat" with + the time series of the variation of the dipole in x, y, and z directions. After + Fourier transform of this file one gets the desired absorption spectra. Typical + (minimal) input file (for the sections \\&CPMD and \\&PTDDFT) \\&CPMD PROPAGATION + SPECTRA RESTART WAVEFUNCTION COORDINATES LATEST CAYLEY \\&END \\&PTDDFT ACCURACY + 1.0D-8 N\\_CYCLES 100000 PROP\\_TSTEP 0.01 EXT\\_PULSE 1.D-5 PERT\\_DIRECTION 1 + RESTART 2 \\&END The time step is specified by setting \\refkeyword{PROP-TSTEP}. The + total number of iteration is controlled by \\refkeyword{N-CYCLES}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.PROPAGATION_SPECTRA')) + + x_cpmd_input_CPMD_PROPAGATION_SPECTRA_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword PROPAGATION_SPECTRA. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.PROPAGATION_SPECTRA_options')) + + x_cpmd_input_CPMD_PROPAGATION_SPECTRA_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword PROPAGATION_SPECTRA. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.PROPAGATION_SPECTRA_parameters')) + + +class x_cpmd_section_input_CPMD_PROPERTIES(MSection): + ''' + Calculate some properties. This keyword requires further input in the section \\&PROP + \\dots \\&END. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.PROPERTIES')) + + x_cpmd_input_CPMD_PROPERTIES_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword PROPERTIES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.PROPERTIES_options')) + + x_cpmd_input_CPMD_PROPERTIES_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword PROPERTIES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.PROPERTIES_parameters')) + + +class x_cpmd_section_input_CPMD_QMMM(MSection): + ''' + Activate the hybrid QM/MM code. This keyword requires further input in the section + \\&QMMM \\dots \\&END. The QM driver is the standard CPMD. An interface program ({\\bf + MM\\_Interface}) and a classic force field + (Gromos\\cite{gromos96}/Amber\\cite{amber7}-like) are needed to run the code in hybdrid + mode\\cite{qmmm02,qmmm03,qmmm04,qmmm05,qmmm06}. This code requires a {\\it special + licence} and is {\\bf not} included in the standard CPMD code. % FIXME: AK 2005/07/10 % + we should put a contact address or web page here. (see section~\\ref{sec:qmmm} for more + information on the available options and the input format). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.QMMM')) + + x_cpmd_input_CPMD_QMMM_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword QMMM. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.QMMM_options')) + + x_cpmd_input_CPMD_QMMM_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword QMMM. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.QMMM_parameters')) + + +class x_cpmd_section_input_CPMD_QUENCH(MSection): + ''' + The {\\bf velocities} of the {\\bf ions}, {\\bf wavefunctions} or the {\\bf cell} are set + to zero at the beginning of a run. With the option {\\bf BO} the wavefunctions are + converged at the beginning of the MD run. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.QUENCH')) + + x_cpmd_input_CPMD_QUENCH_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword QUENCH. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.QUENCH_options')) + + x_cpmd_input_CPMD_QUENCH_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword QUENCH. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.QUENCH_parameters')) + + +class x_cpmd_section_input_CPMD_RANDOMIZE(MSection): + ''' + The {\\bf ionic positions} or the {\\bf wavefunction} or the {\\bf cell parameters} are + {\\bf randomly displaced} at the beginning of a run. The maximal amplitude of the + displacement is read from the next line. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.RANDOMIZE')) + + x_cpmd_input_CPMD_RANDOMIZE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword RANDOMIZE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.RANDOMIZE_options')) + + x_cpmd_input_CPMD_RANDOMIZE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword RANDOMIZE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.RANDOMIZE_parameters')) + + +class x_cpmd_section_input_CPMD_RATTLE(MSection): + ''' + This option can be used to set the maximum number of iterations and the tolerance for + the {\\bf iterative orthogonalization}. These two numbers are read from the next line. + {\\bf Defaults} are 30 and $10^{-6}$. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.RATTLE')) + + x_cpmd_input_CPMD_RATTLE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword RATTLE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.RATTLE_options')) + + x_cpmd_input_CPMD_RATTLE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword RATTLE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.RATTLE_parameters')) + + +class x_cpmd_section_input_CPMD_REAL_SPACE_WFN_KEEP(MSection): + ''' + The real space wavefunctions are kept in memory for later reuse. This minimizes the + number of Fourier transforms and can result in a significant speedup at the expense of + a larger memory use. With the option {\\bf SIZE} the maximum available memory for the + storage of wavefunctions is read from the next line (in MBytes). The program stores as + many wavefunctions as possible within the given memory allocation. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.REAL_SPACE_WFN_KEEP')) + + x_cpmd_input_CPMD_REAL_SPACE_WFN_KEEP_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword REAL_SPACE_WFN_KEEP. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.REAL_SPACE_WFN_KEEP_options')) + + x_cpmd_input_CPMD_REAL_SPACE_WFN_KEEP_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword REAL_SPACE_WFN_KEEP. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.REAL_SPACE_WFN_KEEP_parameters')) + + +class x_cpmd_section_input_CPMD_RESCALE_OLD_VELOCITIES(MSection): + ''' + Rescale {\\bf ionic} velocities after \\refkeyword{RESTART} to the temperature specified + by either \\refkeyword{TEMPERATURE}, \\refkeyword{TEMPCONTROL} {\\bf IONS}, or + \\refkeyword{NOSE} {\\bf IONS}. Useful if the type of ionic thermostatting is changed, + (do not use RESTART NOSEP in this case). Note only for path integral runs: the + scaling is only applied to the first (centroid) replica. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.RESCALE_OLD_VELOCITIES')) + + x_cpmd_input_CPMD_RESCALE_OLD_VELOCITIES_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword RESCALE_OLD_VELOCITIES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.RESCALE_OLD_VELOCITIES_options')) + + x_cpmd_input_CPMD_RESCALE_OLD_VELOCITIES_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword RESCALE_OLD_VELOCITIES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.RESCALE_OLD_VELOCITIES_parameters')) + + +class x_cpmd_section_input_CPMD_RESTART(MSection): + ''' + This keyword controls what data is read (at the beginning) from the file RESTART.x. + {\\bf Warning:} You can only read data that has been previously written into the + RESTART-file. A list of different {\\it OPTIONS}\\ can be specified. List of valid + options: + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.RESTART')) + + x_cpmd_input_CPMD_RESTART_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword RESTART. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.RESTART_options')) + + x_cpmd_input_CPMD_RESTART_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword RESTART. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.RESTART_parameters')) + + +class x_cpmd_section_input_CPMD_RESTFILE(MSection): + ''' + The number of distinct \\refkeyword{RESTART} files generated during CPMD runs is read + from the next line. The restart files are written in turn. {\\bf Default is 1}. If you + specify e.g.~3, then the files RESTART.1, RESTART.2, RESTART.3 are used in rotation. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.RESTFILE')) + + x_cpmd_input_CPMD_RESTFILE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword RESTFILE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.RESTFILE_options')) + + x_cpmd_input_CPMD_RESTFILE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword RESTFILE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.RESTFILE_parameters')) + + +class x_cpmd_section_input_CPMD_REVERSE_VELOCITIES(MSection): + ''' + Reverse the ionic and electronic (if applicable) velocities after the initial setup of + an MD run. This way one can, e.g., go ``backwards'' from a given \\refkeyword{RESTART} + to improve sampling of a given MD ``path''. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.REVERSE_VELOCITIES')) + + x_cpmd_input_CPMD_REVERSE_VELOCITIES_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword REVERSE_VELOCITIES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.REVERSE_VELOCITIES_options')) + + x_cpmd_input_CPMD_REVERSE_VELOCITIES_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword REVERSE_VELOCITIES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.REVERSE_VELOCITIES_parameters')) + + +class x_cpmd_section_input_CPMD_RHOOUT(MSection): + ''' + {\\bf Store} the {\\bf density} at the end of the run on file {\\em DENSITY}. If the + keyword BANDS is defined then on the following lines the number of bands (or orbitals) + to be plotted and their index (starting from 1) have to be given. If the position + specification is a negative number, then the wavefunction instead of the density is + written. Each band is stored on its own file {\\em DENSITY.num}. For spin polarized + calculations besides the total density also the spin density is stored on the file + {\\em SPINDEN}. The following example will request output of the orbitals or bands + number 5, 7, and 8 as wavefunctions: + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.RHOOUT')) + + x_cpmd_input_CPMD_RHOOUT_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword RHOOUT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.RHOOUT_options')) + + x_cpmd_input_CPMD_RHOOUT_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword RHOOUT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.RHOOUT_parameters')) + + +class x_cpmd_section_input_CPMD_ROKS(MSection): + ''' + Calculates the first excited state using Restricted Open-shell Kohn-Sham + theory~\\cite{Frank98}. By default, the singlet state is calculated using the + delocalized variant of the modified Goedecker-Umrigar scheme, which is supposed to + work in most cases. That is, for doing a ROKS simulation, it is usually sufficient to + just include this keyword in the CPMD section (instead of using the + \\refspekeyword{LSE}{LOW SPIN EXCITATION} input). See \\ref{hints:roks} for further + information. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ROKS')) + + x_cpmd_input_CPMD_ROKS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ROKS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ROKS_options')) + + x_cpmd_input_CPMD_ROKS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ROKS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.ROKS_parameters')) + + +class x_cpmd_section_input_CPMD_SCALED_MASSES(MSection): + ''' + Switches the usage of g-vector dependent masses on/off. The number of shells included + in the analytic integration is controlled with the keyword {\\bf HAMILTONIAN CUTOFF}. + By {\\bf default} this option is switched {\\bf off}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.SCALED_MASSES')) + + x_cpmd_input_CPMD_SCALED_MASSES_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword SCALED_MASSES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.SCALED_MASSES_options')) + + x_cpmd_input_CPMD_SCALED_MASSES_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword SCALED_MASSES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.SCALED_MASSES_parameters')) + + +class x_cpmd_section_input_CPMD_SHIFT_POTENTIAL(MSection): + ''' + After this keyword, useful in hamiltonian diagonalization, the shift value $V_{\\rm + shift}$ must be provided in the next line. This option is used in the Davidson + diagonalization subroutine and shifts rigidly the total electronic potential as + $V_{\\rm pot}({\\bf r}) \\to V_{\\rm pot}({\\bf r})+V_{\\rm shift}$ then it is subtracted + again at the end of the main loop, restoring back the original $V_{\\rm pot}({\\bf r})$ + that remains basically unaffected once that the calculation is completed. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.SHIFT_POTENTIAL')) + + x_cpmd_input_CPMD_SHIFT_POTENTIAL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword SHIFT_POTENTIAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.SHIFT_POTENTIAL_options')) + + x_cpmd_input_CPMD_SHIFT_POTENTIAL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword SHIFT_POTENTIAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.SHIFT_POTENTIAL_parameters')) + + +class x_cpmd_section_input_CPMD_SPLINE(MSection): + ''' + This option controls the generation of the pseudopotential functions in g-space. All + pseudopotential functions are first initialized on a evenly spaced grid in g-space and + then calculated at the needed positions with a spline interpolation. The number of + spline points is read from the next line when {\\bf POINTS} is specified. ( The {\\bf + default} number is {\\bf 5000}.) For calculations with the small cutoffs typically used + together with Vanderbilt PP a much smaller value, like 1500 or 2000, is sufficient. + In addition it is possible to keep the Q-functions of the Vanderbilt pseudopotentials + on the spline grid during the whole calculation and do the interpolation whenever + needed. This option may be useful to save time during the initialization phase and + memory in the case of Vanderbilt pseudopotentials when the number of shells is not + much smaller than the total number of plane waves, i.e. for all cell symmetries except + simple cubic and fcc. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.SPLINE')) + + x_cpmd_input_CPMD_SPLINE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword SPLINE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.SPLINE_options')) + + x_cpmd_input_CPMD_SPLINE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword SPLINE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.SPLINE_parameters')) + + +class x_cpmd_section_input_CPMD_SSIC(MSection): + ''' + Apply an {\\it ad hoc} Self Interaction Correction (SIC) to the ordinary DFT + calculation expressed in terms of total energy as \\begin{equation*} E^{\\rm tot}-a\\cdot + E_H[m]- b\\cdot E_{xc}[m, 0] \\end{equation*} where $m({\\bf x}) = \\rho_\\alpha({\\bf + x})-\\rho_\\beta({\\bf x})$. The value of $a$ must be supplied in the next line, while in + the present implementation $b$ is not required, being the optimal values $a=0.2$ and + $b=0.0$ according to Ref.~\\cite{SSIC}. These are assumed as default values although it + is not always the case \\cite{dna_sic}. Note that if you select negative $\\{a, b \\}$ + parameters, the signs in the equation above will be reversed. The Hartree electronic + potential is changed accordingly as $V_H[\\rho] \\to V_H[\\rho] \\pm a\\cdot V_{\\rm + SIC}[m]$, being \\begin{equation*} V_{\\rm SIC}[m]=\\frac{\\delta E_H[m]}{\\delta m({\\bf + x})} \\end{equation*} where the sign is $+$ for $\\alpha$ spin and $-$ for $\\beta$ spin + components, respectively. Be aware that this keyword should be used together with + $LSD$ (set by default). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.SSIC')) + + x_cpmd_input_CPMD_SSIC_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword SSIC. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.SSIC_options')) + + x_cpmd_input_CPMD_SSIC_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword SSIC. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.SSIC_parameters')) + + +class x_cpmd_section_input_CPMD_STEEPEST_DESCENT(MSection): + ''' + NOPRECONDITIONING works only for electrons and LINE only for ions. Use the method of + {\\bf steepest descent} for the {\\bf optimization} of wavefunction and/or atomic + positions and/or cell. If both options are specified in a geometry optimization run, a + simultaneous optimization is performed. Preconditioning of electron masses (scaled + masses) is used by default. The preconditioning is controlled by the keyword {\\bf + HAMILTONIAN CUTOFF}. Optionally preconditioning can be disabled. For ions + optimization, the steplength is controlled by the keywords {\\bf TIMESTEP} and {\\bf + EMASS}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.STEEPEST_DESCENT')) + + x_cpmd_input_CPMD_STEEPEST_DESCENT_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword STEEPEST_DESCENT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.STEEPEST_DESCENT_options')) + + x_cpmd_input_CPMD_STEEPEST_DESCENT_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword STEEPEST_DESCENT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.STEEPEST_DESCENT_parameters')) + + +class x_cpmd_section_input_CPMD_STRUCTURE(MSection): + ''' + Print {\\bf structure information} at the end of the run. Bonds, angles and dihedral + angles can be printed. Dihedral angles are defined between 0 and 180 degrees. This + might change in the future. If the option {\\bf SELECT} is used the output is + restricted to a set of atoms. The number of atoms and a list of the selected atoms has + to be given on the next lines. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.STRUCTURE')) + + x_cpmd_input_CPMD_STRUCTURE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword STRUCTURE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.STRUCTURE_options')) + + x_cpmd_input_CPMD_STRUCTURE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword STRUCTURE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.STRUCTURE_parameters')) + + +class x_cpmd_section_input_CPMD_SUBTRACT(MSection): + ''' + If COMVEL is selected, the total momentum of the system is removed, if ROTVEL is + selected the global angular momentum of the system is removed. Both options can be + used separately and simultaneously. The subtraction is done each {\\bf ncomv} or {\\bf + nrotv} steps, where the value is read in the next line. If this key is activated but + no number provided, the {\\bf default} is $10000$ steps. {\\bf Note}: The use of these + keywords is strongly recommended for long runs (e.g. $t>10$ ps) and/or low density + systems (e.g. isolated molecules, gas phase \\& Co.). Otherwise the whole system will + start to translate and/or rotate toward a (random) direction with increasing speed and + spinning. The ``relative'' translation within the system slows down correspondingly + and thus the system effectively cools down. As a consequence dynamic properties, like + self-diffusion coefficients will be wrong. This option should not be used for + systems, where some atoms are kept at fixed positions, e.g. slab configurations. Here + the center of mass may (or should) move. Due to the interactions with the fixed atoms, + a drift of the whole system should be much reduced, anyways. {\\bf Note}: since the + subtracted kinetic energy is put back into the system by simple rescaling of the ionic + velocities, these options is not fully compatible with \\refkeyword{NOSE} thermostats. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.SUBTRACT')) + + x_cpmd_input_CPMD_SUBTRACT_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword SUBTRACT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.SUBTRACT_options')) + + x_cpmd_input_CPMD_SUBTRACT_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword SUBTRACT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.SUBTRACT_parameters')) + + +class x_cpmd_section_input_CPMD_SURFACE_HOPPING(MSection): + ''' + Nonadiabatic dynamics involving the ground state and a \\refkeyword{ROKS} excited + state\\cite{surfhop}. Do NOT use this keyword together with \\refkeyword{T-SHTDDFT}, + which invokes the surface hopping MD scheme based on TDDFT~\\cite{TDDFT-SH} (see + \\refkeyword{T-SHTDDFT}). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.SURFACE_HOPPING')) + + x_cpmd_input_CPMD_SURFACE_HOPPING_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword SURFACE_HOPPING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.SURFACE_HOPPING_options')) + + x_cpmd_input_CPMD_SURFACE_HOPPING_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword SURFACE_HOPPING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.SURFACE_HOPPING_parameters')) + + +class x_cpmd_section_input_CPMD_TDDFT(MSection): + ''' + Calculate the energy according to TDDFT. This keyword can be used together with + \\refkeyword{OPTIMIZE GEOMETRY} or \\refkeyword{MOLECULAR DYNAMICS} BO. Use the \\&TDDFT + section to set parameters for the calculation. This keyword requires + \\refkeyword{RESTART} LINRES. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.TDDFT')) + + x_cpmd_input_CPMD_TDDFT_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword TDDFT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.TDDFT_options')) + + x_cpmd_input_CPMD_TDDFT_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword TDDFT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.TDDFT_parameters')) + + +class x_cpmd_section_input_CPMD_TEMPCONTROL(MSection): + ''' + The {\\bf temperature} of the {\\bf ions} in Kelvin or the {\\bf fictitious kinetic + energy} of the {\\bf electrons} in atomic units or the {\\bf kinetic energy} of the {\\bf + cell} in atomic units (?) is controlled by scaling. The {\\bf target} temperature and + the {\\bf tolerance} for the ions or the target kinetic energy and the tolerance for + the electrons or the cell are read from the next line. As a gentler alternative you + may want to try the \\refkeyword{BERENDSEN} scheme instead. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.TEMPCONTROL')) + + x_cpmd_input_CPMD_TEMPCONTROL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword TEMPCONTROL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.TEMPCONTROL_options')) + + x_cpmd_input_CPMD_TEMPCONTROL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword TEMPCONTROL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.TEMPCONTROL_parameters')) + + +class x_cpmd_section_input_CPMD_TEMPERATURE_ELECTRON(MSection): + ''' + The {\\bf electronic temperature} is read from the next line. {\\bf Default} is $1000$K. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.TEMPERATURE_ELECTRON')) + + x_cpmd_input_CPMD_TEMPERATURE_ELECTRON_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword TEMPERATURE_ELECTRON. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.TEMPERATURE_ELECTRON_options')) + + x_cpmd_input_CPMD_TEMPERATURE_ELECTRON_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword TEMPERATURE_ELECTRON. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.TEMPERATURE_ELECTRON_parameters')) + + +class x_cpmd_section_input_CPMD_TEMPERATURE(MSection): + ''' + The {\\bf initial temperature} in Kelvin of the {\\bf system} is read from the next + line. With the additional keyword {\\bf RAMP} the temperature can be linearly ramped to + a target value and two more numbers are read, the ramping target temperature in Kelvin + and the ramping speed in Kelvin per atomic time unit (to get the change per timestep + you have to multiply it with the value of \\refkeyword{TIMESTEP}). Note that this + ramping affects the target temperatures for \\refkeyword{TEMPCONTROL}, + \\refkeyword{BERENDSEN} and the global \\refkeyword{NOSE} thermostats. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.TEMPERATURE')) + + x_cpmd_input_CPMD_TEMPERATURE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword TEMPERATURE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.TEMPERATURE_options')) + + x_cpmd_input_CPMD_TEMPERATURE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword TEMPERATURE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.TEMPERATURE_parameters')) + + +class x_cpmd_section_input_CPMD_TIMESTEP_ELECTRONS(MSection): + ''' + The time step for electron dynamics in atomic units is read from the next line. This + is can be used to tweak the convergence behavior of the wavefunction optimization in + Born-Oppenheimer dynamics, where the default time step may be too large. see, e.g. + \\refkeyword{PCG} + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.TIMESTEP_ELECTRONS')) + + x_cpmd_input_CPMD_TIMESTEP_ELECTRONS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword TIMESTEP_ELECTRONS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.TIMESTEP_ELECTRONS_options')) + + x_cpmd_input_CPMD_TIMESTEP_ELECTRONS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword TIMESTEP_ELECTRONS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.TIMESTEP_ELECTRONS_parameters')) + + +class x_cpmd_section_input_CPMD_TIMESTEP_IONS(MSection): + ''' + The time step in atomic units is read from the next line. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.TIMESTEP_IONS')) + + x_cpmd_input_CPMD_TIMESTEP_IONS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword TIMESTEP_IONS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.TIMESTEP_IONS_options')) + + x_cpmd_input_CPMD_TIMESTEP_IONS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword TIMESTEP_IONS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.TIMESTEP_IONS_parameters')) + + +class x_cpmd_section_input_CPMD_TIMESTEP(MSection): + ''' + The time step in atomic units is read from the next line. {\\bf Default} is a time + step of {\\bf 5 a.u.} ($1\\, a.u. = 0.0241888428$ fs). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.TIMESTEP')) + + x_cpmd_input_CPMD_TIMESTEP_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword TIMESTEP. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.TIMESTEP_options')) + + x_cpmd_input_CPMD_TIMESTEP_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword TIMESTEP. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.TIMESTEP_parameters')) + + +class x_cpmd_section_input_CPMD_TRACE(MSection): + ''' + Activate the tracing of the procedures. {\\sl ALL} specifies that all the mpi tasks are + traced. {\\sl ALL} specifies that only the master is traced. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.TRACE')) + + x_cpmd_input_CPMD_TRACE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword TRACE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.TRACE_options')) + + x_cpmd_input_CPMD_TRACE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword TRACE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.TRACE_parameters')) + + +class x_cpmd_section_input_CPMD_TRAJECTORY(MSection): + ''' + Store the atomic positions, velocities and optionally forces at every {\\em NTRAJ} time + step on file {\\em TRAJECTORY}. This is the {\\bf default for MD runs}. With the + additional keyword XYZ the trajectory is also writthen in xyz-format on the file {\\em + TRAJEC.xyz}, similarly with the additional keyword DCD a trajectory in dcd-format + (binary and single precision, as used by CHARMM, X-PLOR and other programs) is written + on the file {\\rm TRAJEC.dcd}. If the keyword SAMPLE is given {\\em NTRAJ} is read from + the next line, otherwise the default value for {\\em NTRAJ} is $1$. A negative value of + {\\em NTRAJ} will disable output of the {\\em TRAJECTORY} file, but e.g. {TRAJEC.xyz} + will still be written every {\\em -NTRAJ} steps. A value of 0 for {\\em NTRAJ} will + disable writing of the trajectory files alltogether. The TRAJECTORY file is written + in binary format if the keyword BINARY is present. If FORCES is specified also the + forces are written together with the positions and velocities into the file + FTRAJECTORY. It is possible to store the data of a subset of atoms by specifying the + suboption RANGE, the smallest and largest index of atoms is read from the next line. + If both, SAMPLE and RANGE are given, the RANGE parameters have to come before the + SAMPLE parameter. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.TRAJECTORY')) + + x_cpmd_input_CPMD_TRAJECTORY_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword TRAJECTORY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.TRAJECTORY_options')) + + x_cpmd_input_CPMD_TRAJECTORY_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword TRAJECTORY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.TRAJECTORY_parameters')) + + +class x_cpmd_section_input_CPMD_TROTTER_FACTORIZATION_OFF(MSection): + ''' + Do not use Trotter factorization to calculate free energy functional. Remark: Place + this keywords only after FREE ENERGY FUNCTIO\\-NAL; before it has no effect. Note: this + keyword has {\\em nothing} to do with path integral MD as activated by the keyword PATH + INTEGRAL and as specified in the section \\&PIMD ... \\&END. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.TROTTER_FACTORIZATION_OFF')) + + x_cpmd_input_CPMD_TROTTER_FACTORIZATION_OFF_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword TROTTER_FACTORIZATION_OFF. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.TROTTER_FACTORIZATION_OFF_options')) + + x_cpmd_input_CPMD_TROTTER_FACTORIZATION_OFF_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword TROTTER_FACTORIZATION_OFF. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.TROTTER_FACTORIZATION_OFF_parameters')) + + +class x_cpmd_section_input_CPMD_TROTTER_FACTOR(MSection): + ''' + Solve $e^{-H/k_BT}$ directly using {\\bf Trotter approximation} $\\left( e^{-pH} \\simeq + e^{-pK/2}e^{-pV}e^{-pK/2}\\right)$. The Trotter approximation is twice as fast. The + Trotter factor is read from the next line (typically 0.001 is very accurate). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.TROTTER_FACTOR')) + + x_cpmd_input_CPMD_TROTTER_FACTOR_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword TROTTER_FACTOR. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.TROTTER_FACTOR_options')) + + x_cpmd_input_CPMD_TROTTER_FACTOR_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword TROTTER_FACTOR. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.TROTTER_FACTOR_parameters')) + + +class x_cpmd_section_input_CPMD_VDW_CORRECTION(MSection): + ''' + An empirical van der Waals correction scheme is applied to pairs of atom types + specified with this keyword. This activates reading the corresponding parameters from + the \\&VDW ... \\& END in which you have to specify all the VDW parameters between the + opening and closing section keywords EMPIRICAL CORRECTION and END EMPIRICAL + CORRECTION. Note that the two possible vdW options, EMPIRICAL CORRECTION and WANNIER + CORRECTION are mutually exclusive. See \\refkeyword{VDW PARAMETERS} for more details. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.VDW_CORRECTION')) + + x_cpmd_input_CPMD_VDW_CORRECTION_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword VDW_CORRECTION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.VDW_CORRECTION_options')) + + x_cpmd_input_CPMD_VDW_CORRECTION_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword VDW_CORRECTION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.VDW_CORRECTION_parameters')) + + +class x_cpmd_section_input_CPMD_VDW_WANNIER(MSection): + ''' + A first-principle van der Waals correction scheme \\cite{psil1,psil2} is applied to + selected groups of atoms on which maximally localized Wannier functions (WF) and + centers (WFC) have been previously computed. The file WANNIER-CENTER generated upon + WFC calculation must be present. This activates the reading procedure of the + corresponding parameters from the \\&VDW ... \\&END section. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.VDW_WANNIER')) + + x_cpmd_input_CPMD_VDW_WANNIER_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword VDW_WANNIER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.VDW_WANNIER_options')) + + x_cpmd_input_CPMD_VDW_WANNIER_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword VDW_WANNIER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.VDW_WANNIER_parameters')) + + +class x_cpmd_section_input_CPMD_VGFACTOR(MSection): + ''' + For \\refkeyword{CDFT} runs read the inverse of the gradient optimiser step size + ($1/dx$) from the next line. The standard value of \\defaultvalue{10.0} should be fine + in most situations. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.VGFACTOR')) + + x_cpmd_input_CPMD_VGFACTOR_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword VGFACTOR. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.VGFACTOR_options')) + + x_cpmd_input_CPMD_VGFACTOR_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword VGFACTOR. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.VGFACTOR_parameters')) + + +class x_cpmd_section_input_CPMD_VIBRATIONAL_ANALYSIS(MSection): + ''' + Calculate harmonic frequencies by finite differences of first derivatives {\\bf (FD)} + (see also keyword \\refkeyword{FINITE DIFFERENCES}), by {\\bf linear response} to ionic + displacements {\\bf (LR)} or from a {\\bf pre-calculated} Hessian {\\bf (IN)}. K-point + sampling is currently possible using finite differences. If the option GAUSS is + specified, additional output is written on the file {\\em VIB1.log} which contains the + modes in a style similar to GAUSSIAN 98 output. This file can be read in and + visualized with programs like MOLDEN or MOLEKEL. The option SAMPLE reads an integer + from the next line. If this number is 2 an additional file {\\em VIB2.log} containing + the lowest modes is written. The {\\bf default} value is 1. If the option ACLIMAX is + specified, additional output is written on the file VIB.aclimax which contains the + modes in a style readable by aClimax (\\htref{http://www.isis.rl.ac.uk/molecularspectro + scopy/aclimax/}{http://www.isis.rl.ac.uk/molecularspectroscopy/aclimax/}). If a + section {\\bf \\&PROP} is present with the keyword \\refkeyword{DIPOLE MOMENT}[BERRY] or + \\refkeyword{DIPOLE MOMENT}[RS], the Born charge tensor is calculated on the fly. See + also the block \\&LINRES ... \\&END and the keywords \\refkeyword{RESTART} PHESS and + \\refkeyword{HESSIAN} \\{DISCO,SCHLEGEL,UNIT\\} PARTIAL. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.VIBRATIONAL_ANALYSIS')) + + x_cpmd_input_CPMD_VIBRATIONAL_ANALYSIS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword VIBRATIONAL_ANALYSIS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.VIBRATIONAL_ANALYSIS_options')) + + x_cpmd_input_CPMD_VIBRATIONAL_ANALYSIS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword VIBRATIONAL_ANALYSIS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.VIBRATIONAL_ANALYSIS_parameters')) + + +class x_cpmd_section_input_CPMD_VMIRROR(MSection): + ''' + For \\refkeyword{CDFT} HDA runs initialise $V$ for the second state as the negative + final $V$ value of the first state. Useful in symmetric systems. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.VMIRROR')) + + x_cpmd_input_CPMD_VMIRROR_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword VMIRROR. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.VMIRROR_options')) + + x_cpmd_input_CPMD_VMIRROR_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword VMIRROR. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.VMIRROR_parameters')) + + +class x_cpmd_section_input_CPMD_WANNIER_DOS(MSection): + ''' + Outputs the projected density of states of the Wannier orbitals (file WANNIER\\_DOS) + and the KS hamiltonian in the Wannier states representation (file WANNIER\\_HAM). When + running \\refkeyword{MOLECULAR DYNAMICS} CP the files WANNIER\\_DOS and WANNIER\\_HAM + solely written at the last step. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.WANNIER_DOS')) + + x_cpmd_input_CPMD_WANNIER_DOS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword WANNIER_DOS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.WANNIER_DOS_options')) + + x_cpmd_input_CPMD_WANNIER_DOS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword WANNIER_DOS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.WANNIER_DOS_parameters')) + + +class x_cpmd_section_input_CPMD_WANNIER_MOLECULAR(MSection): + ''' + Generates effective molecular orbitals from the Wannier representation. It first + attributes Wannier orbitals to molecules and then diagonalizes by molecular blocks the + KS Hamiltonian. Does not work with \\refkeyword{MOLECULAR DYNAMICS} CP. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.WANNIER_MOLECULAR')) + + x_cpmd_input_CPMD_WANNIER_MOLECULAR_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword WANNIER_MOLECULAR. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.WANNIER_MOLECULAR_options')) + + x_cpmd_input_CPMD_WANNIER_MOLECULAR_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword WANNIER_MOLECULAR. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.WANNIER_MOLECULAR_parameters')) + + +class x_cpmd_section_input_CPMD_WANNIER_NPROC(MSection): + ''' + Set the number of mpi tasks to be used for localization. Default is to use all the + tasks avalable. The number of tasks is read from the next line and shall be a divisor + of the number of tasks in a parallel run. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.WANNIER_NPROC')) + + x_cpmd_input_CPMD_WANNIER_NPROC_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword WANNIER_NPROC. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.WANNIER_NPROC_options')) + + x_cpmd_input_CPMD_WANNIER_NPROC_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword WANNIER_NPROC. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.WANNIER_NPROC_parameters')) + + +class x_cpmd_section_input_CPMD_WANNIER_OPTIMIZATION(MSection): + ''' + Use steepest descent or Jacobi rotation method for the orbital localization. Default + are Jacobi rotations. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.WANNIER_OPTIMIZATION')) + + x_cpmd_input_CPMD_WANNIER_OPTIMIZATION_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword WANNIER_OPTIMIZATION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.WANNIER_OPTIMIZATION_options')) + + x_cpmd_input_CPMD_WANNIER_OPTIMIZATION_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword WANNIER_OPTIMIZATION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.WANNIER_OPTIMIZATION_parameters')) + + +class x_cpmd_section_input_CPMD_WANNIER_PARAMETER(MSection): + ''' + {\\sl W\\_STEP, W\\_EPS, W\\_RAN, W\\_MAXS} are read from the next line. {\\sl W\\_STEP} is + the step size of the steepest descent algorithm used in the optimization procedure + (default value 0.1). {\\sl W\\_EPS} the convergence criteria for the gradient (default + value $1.e-7$). {\\sl W\\_RAN} the amplitude for the initial random rotation of the + states (default value 0.0). {\\sl W\\_MAXS} is the maximum steps allowed in the + optimization (default value 200). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.WANNIER_PARAMETER')) + + x_cpmd_input_CPMD_WANNIER_PARAMETER_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword WANNIER_PARAMETER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.WANNIER_PARAMETER_options')) + + x_cpmd_input_CPMD_WANNIER_PARAMETER_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword WANNIER_PARAMETER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.WANNIER_PARAMETER_parameters')) + + +class x_cpmd_section_input_CPMD_WANNIER_REFERENCE(MSection): + ''' + The vector {\\sl W\\_REF} is read from the next line, which consists of 3 coordinates + $x, y, z$. These are assumed as the origin for the WFCs positions and related ionic + coordinates (i.e. ${\\bf R}_I \\to {\\bf R}_I-(x, y, z)$). The default value is the + center of the supercell, if \\refkeyword{CENTER MOLECULE} keyword is active (Note, that + this is implicitely turned on, for calculations with \\refkeyword{SYMMETRY} 0). + Otherwise it is set to (0,0,0), which is usually not the center of the box. In order + to get the best results displaying the IONS+CENTERS.xyz file this parameter should be + set explicitly. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.WANNIER_REFERENCE')) + + x_cpmd_input_CPMD_WANNIER_REFERENCE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword WANNIER_REFERENCE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.WANNIER_REFERENCE_options')) + + x_cpmd_input_CPMD_WANNIER_REFERENCE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword WANNIER_REFERENCE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.WANNIER_REFERENCE_parameters')) + + +class x_cpmd_section_input_CPMD_WANNIER_SERIAL(MSection): + ''' + Requests that the calculation of Wannier functions is performed using the serial code, + even in parallel runs. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.WANNIER_SERIAL')) + + x_cpmd_input_CPMD_WANNIER_SERIAL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword WANNIER_SERIAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.WANNIER_SERIAL_options')) + + x_cpmd_input_CPMD_WANNIER_SERIAL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword WANNIER_SERIAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.WANNIER_SERIAL_parameters')) + + +class x_cpmd_section_input_CPMD_WANNIER_TYPE(MSection): + ''' + Indicates the type of Wannier functions. Vanderbilt type is the default. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.WANNIER_TYPE')) + + x_cpmd_input_CPMD_WANNIER_TYPE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword WANNIER_TYPE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.WANNIER_TYPE_options')) + + x_cpmd_input_CPMD_WANNIER_TYPE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword WANNIER_TYPE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.WANNIER_TYPE_parameters')) + + +class x_cpmd_section_input_CPMD_WANNIER_WFNOUT(MSection): + ''' + Controls the printing of Wannier functions. Either all or only some of the functions + can be printed. This will be done at the end of each calculation of Wannier functions. + For {\\bf PARTIAL} output you have to give the indices of the first and the last + wannier function to print; the {\\em LIST} directive follows the syntax of + \\refkeyword{RHOOUT} {\\em BANDS}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.WANNIER_WFNOUT')) + + x_cpmd_input_CPMD_WANNIER_WFNOUT_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword WANNIER_WFNOUT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.WANNIER_WFNOUT_options')) + + x_cpmd_input_CPMD_WANNIER_WFNOUT_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword WANNIER_WFNOUT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.WANNIER_WFNOUT_parameters')) + + +class x_cpmd_section_input_CPMD_WOUT(MSection): + ''' + Controls the printing of the CDFT weight(s). If the keyword FULL is set the full + weight is written out in the form of a density to WEIGHT-(suff), where (suff) is + defined by the kind of the CDFT job. (suff)=WFOPT for single point calculations, while + for geometry optimisations and MD two weights are written, (suff)=INIT at the + beginning and (suff)=FINAL for the last step. If FULL is not set write out a slice of + the weight in gnuplot readable form to WEIGHT-(suff).dat. Parameters WSLICE and WSTEP + are read from the next line. WSLICE \\defaultvalue{0.5} is if larger than zero the z + coordinate of the x-y weight plane to write out divided by the total box height. If + WSLICE$<0$ the weight at the z coordinate of the first acceptor atom will be used. + WSTEP \\defaultvalue{1} is the grid point step size for the output. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.WOUT')) + + x_cpmd_input_CPMD_WOUT_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword WOUT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.WOUT_options')) + + x_cpmd_input_CPMD_WOUT_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword WOUT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD.WOUT_parameters')) + + +class x_cpmd_section_input_CPMD(MSection): + ''' + General control parameters for calculation (\\textbf{required}). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD')) + + x_cpmd_input_CPMD_default_keyword = Quantity( + type=str, + shape=[], + description=''' + The parameters that are present in the section CPMD even without a keyword. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_CPMD_default_keyword')) + + x_cpmd_section_input_CPMD_ALEXANDER_MIXING = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_ALEXANDER_MIXING'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ALEXANDER_MIXING')) + + x_cpmd_section_input_CPMD_ALLTOALL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_ALLTOALL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ALLTOALL')) + + x_cpmd_section_input_CPMD_ANDERSON_MIXING = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_ANDERSON_MIXING'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ANDERSON_MIXING')) + + x_cpmd_section_input_CPMD_ANNEALING = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_ANNEALING'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ANNEALING')) + + x_cpmd_section_input_CPMD_BENCHMARK = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_BENCHMARK'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.BENCHMARK')) + + x_cpmd_section_input_CPMD_BERENDSEN = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_BERENDSEN'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.BERENDSEN')) + + x_cpmd_section_input_CPMD_BFGS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_BFGS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.BFGS')) + + x_cpmd_section_input_CPMD_BLOCKSIZE_STATES = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_BLOCKSIZE_STATES'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.BLOCKSIZE_STATES')) + + x_cpmd_section_input_CPMD_BOGOLIUBOV_CORRECTION = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_BOGOLIUBOV_CORRECTION'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.BOGOLIUBOV_CORRECTION')) + + x_cpmd_section_input_CPMD_BOX_WALLS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_BOX_WALLS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.BOX_WALLS')) + + x_cpmd_section_input_CPMD_BROYDEN_MIXING = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_BROYDEN_MIXING'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.BROYDEN_MIXING')) + + x_cpmd_section_input_CPMD_CAYLEY = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_CAYLEY'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.CAYLEY')) + + x_cpmd_section_input_CPMD_CDFT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_CDFT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.CDFT')) + + x_cpmd_section_input_CPMD_CENTER_MOLECULE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_CENTER_MOLECULE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.CENTER_MOLECULE')) + + x_cpmd_section_input_CPMD_CHECK_MEMORY = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_CHECK_MEMORY'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.CHECK_MEMORY')) + + x_cpmd_section_input_CPMD_CLASSTRESS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_CLASSTRESS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.CLASSTRESS')) + + x_cpmd_section_input_CPMD_CMASS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_CMASS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.CMASS')) + + x_cpmd_section_input_CPMD_COMBINE_SYSTEMS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_COMBINE_SYSTEMS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.COMBINE_SYSTEMS')) + + x_cpmd_section_input_CPMD_COMPRESS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_COMPRESS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.COMPRESS')) + + x_cpmd_section_input_CPMD_CONJUGATE_GRADIENTS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_CONJUGATE_GRADIENTS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.CONJUGATE_GRADIENTS')) + + x_cpmd_section_input_CPMD_CONVERGENCE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_CONVERGENCE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.CONVERGENCE')) + + x_cpmd_section_input_CPMD_CZONES = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_CZONES'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.CZONES')) + + x_cpmd_section_input_CPMD_DAMPING = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_DAMPING'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DAMPING')) + + x_cpmd_section_input_CPMD_DAVIDSON_DIAGONALIZATION = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_DAVIDSON_DIAGONALIZATION'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DAVIDSON_DIAGONALIZATION')) + + x_cpmd_section_input_CPMD_DAVIDSON_PARAMETER = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_DAVIDSON_PARAMETER'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DAVIDSON_PARAMETER')) + + x_cpmd_section_input_CPMD_DEBUG_CODE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_DEBUG_CODE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DEBUG_CODE')) + + x_cpmd_section_input_CPMD_DEBUG_FILEOPEN = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_DEBUG_FILEOPEN'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DEBUG_FILEOPEN')) + + x_cpmd_section_input_CPMD_DEBUG_FORCES = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_DEBUG_FORCES'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DEBUG_FORCES')) + + x_cpmd_section_input_CPMD_DEBUG_MEMORY = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_DEBUG_MEMORY'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DEBUG_MEMORY')) + + x_cpmd_section_input_CPMD_DEBUG_NOACC = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_DEBUG_NOACC'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DEBUG_NOACC')) + + x_cpmd_section_input_CPMD_DIIS_MIXING = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_DIIS_MIXING'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DIIS_MIXING')) + + x_cpmd_section_input_CPMD_DIPOLE_DYNAMICS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_DIPOLE_DYNAMICS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DIPOLE_DYNAMICS')) + + x_cpmd_section_input_CPMD_DISTRIBUTE_FNL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_DISTRIBUTE_FNL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DISTRIBUTE_FNL')) + + x_cpmd_section_input_CPMD_DISTRIBUTED_LINALG = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_DISTRIBUTED_LINALG'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.DISTRIBUTED_LINALG')) + + x_cpmd_section_input_CPMD_ELECTRONIC_SPECTRA = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_ELECTRONIC_SPECTRA'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ELECTRONIC_SPECTRA')) + + x_cpmd_section_input_CPMD_ELECTROSTATIC_POTENTIAL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_ELECTROSTATIC_POTENTIAL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ELECTROSTATIC_POTENTIAL')) + + x_cpmd_section_input_CPMD_ELF = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_ELF'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ELF')) + + x_cpmd_section_input_CPMD_EMASS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_EMASS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.EMASS')) + + x_cpmd_section_input_CPMD_ENERGYBANDS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_ENERGYBANDS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ENERGYBANDS')) + + x_cpmd_section_input_CPMD_EXTERNAL_POTENTIAL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_EXTERNAL_POTENTIAL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.EXTERNAL_POTENTIAL')) + + x_cpmd_section_input_CPMD_EXTRAPOLATE_CONSTRAINT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_EXTRAPOLATE_CONSTRAINT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.EXTRAPOLATE_CONSTRAINT')) + + x_cpmd_section_input_CPMD_EXTRAPOLATE_WFN = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_EXTRAPOLATE_WFN'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.EXTRAPOLATE_WFN')) + + x_cpmd_section_input_CPMD_FFTW_WISDOM = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_FFTW_WISDOM'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.FFTW_WISDOM')) + + x_cpmd_section_input_CPMD_FILE_FUSION = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_FILE_FUSION'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.FILE_FUSION')) + + x_cpmd_section_input_CPMD_FILEPATH = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_FILEPATH'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.FILEPATH')) + + x_cpmd_section_input_CPMD_FINITE_DIFFERENCES = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_FINITE_DIFFERENCES'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.FINITE_DIFFERENCES')) + + x_cpmd_section_input_CPMD_FIXRHO_UPWFN = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_FIXRHO_UPWFN'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.FIXRHO_UPWFN')) + + x_cpmd_section_input_CPMD_FORCEMATCH = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_FORCEMATCH'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.FORCEMATCH')) + + x_cpmd_section_input_CPMD_FREE_ENERGY_FUNCTIONAL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_FREE_ENERGY_FUNCTIONAL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.FREE_ENERGY_FUNCTIONAL')) + + x_cpmd_section_input_CPMD_GDIIS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_GDIIS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.GDIIS')) + + x_cpmd_section_input_CPMD_GSHELL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_GSHELL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.GSHELL')) + + x_cpmd_section_input_CPMD_HAMILTONIAN_CUTOFF = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_HAMILTONIAN_CUTOFF'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.HAMILTONIAN_CUTOFF')) + + x_cpmd_section_input_CPMD_HARMONIC_REFERENCE_SYSTEM = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_HARMONIC_REFERENCE_SYSTEM'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.HARMONIC_REFERENCE_SYSTEM')) + + x_cpmd_section_input_CPMD_HESSCORE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_HESSCORE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.HESSCORE')) + + x_cpmd_section_input_CPMD_HESSIAN = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_HESSIAN'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.HESSIAN')) + + x_cpmd_section_input_CPMD_INITIALIZE_WAVEFUNCTION = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_INITIALIZE_WAVEFUNCTION'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.INITIALIZE_WAVEFUNCTION')) + + x_cpmd_section_input_CPMD_INTERFACE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_INTERFACE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.INTERFACE')) + + x_cpmd_section_input_CPMD_INTFILE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_INTFILE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.INTFILE')) + + x_cpmd_section_input_CPMD_ISOLATED_MOLECULE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_ISOLATED_MOLECULE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ISOLATED_MOLECULE')) + + x_cpmd_section_input_CPMD_KSHAM = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_KSHAM'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.KSHAM')) + + x_cpmd_section_input_CPMD_LANCZOS_DIAGONALIZATION = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_LANCZOS_DIAGONALIZATION'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.LANCZOS_DIAGONALIZATION')) + + x_cpmd_section_input_CPMD_LANCZOS_PARAMETER = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_LANCZOS_PARAMETER'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.LANCZOS_PARAMETER')) + + x_cpmd_section_input_CPMD_LANGEVIN = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_LANGEVIN'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.LANGEVIN')) + + x_cpmd_section_input_CPMD_LBFGS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_LBFGS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.LBFGS')) + + x_cpmd_section_input_CPMD_LINEAR_RESPONSE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_LINEAR_RESPONSE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.LINEAR_RESPONSE')) + + x_cpmd_section_input_CPMD_LOCAL_SPIN_DENSITY = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_LOCAL_SPIN_DENSITY'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.LOCAL_SPIN_DENSITY')) + + x_cpmd_section_input_CPMD_LSD = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_LSD'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.LSD')) + + x_cpmd_section_input_CPMD_MAXITER = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_MAXITER'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.MAXITER')) + + x_cpmd_section_input_CPMD_MAXRUNTIME = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_MAXRUNTIME'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.MAXRUNTIME')) + + x_cpmd_section_input_CPMD_MAXSTEP = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_MAXSTEP'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.MAXSTEP')) + + x_cpmd_section_input_CPMD_MEMORY = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_MEMORY'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.MEMORY')) + + x_cpmd_section_input_CPMD_MIRROR = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_MIRROR'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.MIRROR')) + + x_cpmd_section_input_CPMD_MIXDIIS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_MIXDIIS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.MIXDIIS')) + + x_cpmd_section_input_CPMD_MIXSD = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_MIXSD'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.MIXSD')) + + x_cpmd_section_input_CPMD_MODIFIED_GOEDECKER = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_MODIFIED_GOEDECKER'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.MODIFIED_GOEDECKER')) + + x_cpmd_section_input_CPMD_MOLECULAR_DYNAMICS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_MOLECULAR_DYNAMICS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.MOLECULAR_DYNAMICS')) + + x_cpmd_section_input_CPMD_MOVERHO = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_MOVERHO'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.MOVERHO')) + + x_cpmd_section_input_CPMD_MOVIE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_MOVIE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.MOVIE')) + + x_cpmd_section_input_CPMD_NOGEOCHECK = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_NOGEOCHECK'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.NOGEOCHECK')) + + x_cpmd_section_input_CPMD_NONORTHOGONAL_ORBITALS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_NONORTHOGONAL_ORBITALS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.NONORTHOGONAL_ORBITALS')) + + x_cpmd_section_input_CPMD_NOSE_PARAMETERS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_NOSE_PARAMETERS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.NOSE_PARAMETERS')) + + x_cpmd_section_input_CPMD_NOSE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_NOSE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.NOSE')) + + x_cpmd_section_input_CPMD_ODIIS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_ODIIS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ODIIS')) + + x_cpmd_section_input_CPMD_OPTIMIZE_GEOMETRY = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_OPTIMIZE_GEOMETRY'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.OPTIMIZE_GEOMETRY')) + + x_cpmd_section_input_CPMD_OPTIMIZE_WAVEFUNCTION = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_OPTIMIZE_WAVEFUNCTION'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.OPTIMIZE_WAVEFUNCTION')) + + x_cpmd_section_input_CPMD_ORBITAL_HARDNESS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_ORBITAL_HARDNESS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ORBITAL_HARDNESS')) + + x_cpmd_section_input_CPMD_ORTHOGONALIZATION = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_ORTHOGONALIZATION'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ORTHOGONALIZATION')) + + x_cpmd_section_input_CPMD_PATH_INTEGRAL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_PATH_INTEGRAL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.PATH_INTEGRAL')) + + x_cpmd_section_input_CPMD_PATH_MINIMIZATION = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_PATH_MINIMIZATION'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.PATH_MINIMIZATION')) + + x_cpmd_section_input_CPMD_PATH_SAMPLING = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_PATH_SAMPLING'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.PATH_SAMPLING')) + + x_cpmd_section_input_CPMD_PCG = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_PCG'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.PCG')) + + x_cpmd_section_input_CPMD_PRFO_NSVIB = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_PRFO_NSVIB'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.PRFO_NSVIB')) + + x_cpmd_section_input_CPMD_PRFO = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_PRFO'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.PRFO')) + + x_cpmd_section_input_CPMD_PRINT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_PRINT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.PRINT')) + + x_cpmd_section_input_CPMD_PRNGSEED = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_PRNGSEED'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.PRNGSEED')) + + x_cpmd_section_input_CPMD_PROJECT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_PROJECT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.PROJECT')) + + x_cpmd_section_input_CPMD_PROPAGATION_SPECTRA = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_PROPAGATION_SPECTRA'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.PROPAGATION_SPECTRA')) + + x_cpmd_section_input_CPMD_PROPERTIES = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_PROPERTIES'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.PROPERTIES')) + + x_cpmd_section_input_CPMD_QMMM = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_QMMM'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.QMMM')) + + x_cpmd_section_input_CPMD_QUENCH = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_QUENCH'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.QUENCH')) + + x_cpmd_section_input_CPMD_RANDOMIZE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_RANDOMIZE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.RANDOMIZE')) + + x_cpmd_section_input_CPMD_RATTLE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_RATTLE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.RATTLE')) + + x_cpmd_section_input_CPMD_REAL_SPACE_WFN_KEEP = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_REAL_SPACE_WFN_KEEP'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.REAL_SPACE_WFN_KEEP')) + + x_cpmd_section_input_CPMD_RESCALE_OLD_VELOCITIES = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_RESCALE_OLD_VELOCITIES'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.RESCALE_OLD_VELOCITIES')) + + x_cpmd_section_input_CPMD_RESTART = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_RESTART'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.RESTART')) + + x_cpmd_section_input_CPMD_RESTFILE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_RESTFILE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.RESTFILE')) + + x_cpmd_section_input_CPMD_REVERSE_VELOCITIES = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_REVERSE_VELOCITIES'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.REVERSE_VELOCITIES')) + + x_cpmd_section_input_CPMD_RHOOUT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_RHOOUT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.RHOOUT')) + + x_cpmd_section_input_CPMD_ROKS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_ROKS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.ROKS')) + + x_cpmd_section_input_CPMD_SCALED_MASSES = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_SCALED_MASSES'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.SCALED_MASSES')) + + x_cpmd_section_input_CPMD_SHIFT_POTENTIAL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_SHIFT_POTENTIAL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.SHIFT_POTENTIAL')) + + x_cpmd_section_input_CPMD_SPLINE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_SPLINE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.SPLINE')) + + x_cpmd_section_input_CPMD_SSIC = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_SSIC'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.SSIC')) + + x_cpmd_section_input_CPMD_STEEPEST_DESCENT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_STEEPEST_DESCENT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.STEEPEST_DESCENT')) + + x_cpmd_section_input_CPMD_STRUCTURE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_STRUCTURE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.STRUCTURE')) + + x_cpmd_section_input_CPMD_SUBTRACT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_SUBTRACT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.SUBTRACT')) + + x_cpmd_section_input_CPMD_SURFACE_HOPPING = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_SURFACE_HOPPING'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.SURFACE_HOPPING')) + + x_cpmd_section_input_CPMD_TDDFT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_TDDFT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.TDDFT')) + + x_cpmd_section_input_CPMD_TEMPCONTROL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_TEMPCONTROL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.TEMPCONTROL')) + + x_cpmd_section_input_CPMD_TEMPERATURE_ELECTRON = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_TEMPERATURE_ELECTRON'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.TEMPERATURE_ELECTRON')) + + x_cpmd_section_input_CPMD_TEMPERATURE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_TEMPERATURE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.TEMPERATURE')) + + x_cpmd_section_input_CPMD_TIMESTEP_ELECTRONS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_TIMESTEP_ELECTRONS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.TIMESTEP_ELECTRONS')) + + x_cpmd_section_input_CPMD_TIMESTEP_IONS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_TIMESTEP_IONS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.TIMESTEP_IONS')) + + x_cpmd_section_input_CPMD_TIMESTEP = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_TIMESTEP'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.TIMESTEP')) + + x_cpmd_section_input_CPMD_TRACE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_TRACE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.TRACE')) + + x_cpmd_section_input_CPMD_TRAJECTORY = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_TRAJECTORY'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.TRAJECTORY')) + + x_cpmd_section_input_CPMD_TROTTER_FACTORIZATION_OFF = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_TROTTER_FACTORIZATION_OFF'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.TROTTER_FACTORIZATION_OFF')) + + x_cpmd_section_input_CPMD_TROTTER_FACTOR = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_TROTTER_FACTOR'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.TROTTER_FACTOR')) + + x_cpmd_section_input_CPMD_VDW_CORRECTION = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_VDW_CORRECTION'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.VDW_CORRECTION')) + + x_cpmd_section_input_CPMD_VDW_WANNIER = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_VDW_WANNIER'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.VDW_WANNIER')) + + x_cpmd_section_input_CPMD_VGFACTOR = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_VGFACTOR'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.VGFACTOR')) + + x_cpmd_section_input_CPMD_VIBRATIONAL_ANALYSIS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_VIBRATIONAL_ANALYSIS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.VIBRATIONAL_ANALYSIS')) + + x_cpmd_section_input_CPMD_VMIRROR = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_VMIRROR'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.VMIRROR')) + + x_cpmd_section_input_CPMD_WANNIER_DOS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_WANNIER_DOS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.WANNIER_DOS')) + + x_cpmd_section_input_CPMD_WANNIER_MOLECULAR = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_WANNIER_MOLECULAR'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.WANNIER_MOLECULAR')) + + x_cpmd_section_input_CPMD_WANNIER_NPROC = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_WANNIER_NPROC'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.WANNIER_NPROC')) + + x_cpmd_section_input_CPMD_WANNIER_OPTIMIZATION = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_WANNIER_OPTIMIZATION'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.WANNIER_OPTIMIZATION')) + + x_cpmd_section_input_CPMD_WANNIER_PARAMETER = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_WANNIER_PARAMETER'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.WANNIER_PARAMETER')) + + x_cpmd_section_input_CPMD_WANNIER_REFERENCE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_WANNIER_REFERENCE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.WANNIER_REFERENCE')) + + x_cpmd_section_input_CPMD_WANNIER_SERIAL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_WANNIER_SERIAL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.WANNIER_SERIAL')) + + x_cpmd_section_input_CPMD_WANNIER_TYPE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_WANNIER_TYPE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.WANNIER_TYPE')) + + x_cpmd_section_input_CPMD_WANNIER_WFNOUT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_WANNIER_WFNOUT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.WANNIER_WFNOUT')) + + x_cpmd_section_input_CPMD_WOUT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD_WOUT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD.WOUT')) + + +class x_cpmd_section_input_DFT_ACM0(MSection): + ''' + Add exact exchange to the specified \\refkeyword{FUNCTIONAL} according to the adiabatic + connection method 0.~\\cite{acm0,adamo2000} This only works for isolated systems and + should only be used if an excessive amount of CPU time is available. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.ACM0')) + + x_cpmd_input_DFT_ACM0_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ACM0. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.ACM0_options')) + + x_cpmd_input_DFT_ACM0_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ACM0. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.ACM0_parameters')) + + +class x_cpmd_section_input_DFT_ACM1(MSection): + ''' + Add exact exchange to the specified \\refkeyword{FUNCTIONAL} according to the adiabatic + connection method 1.~\\cite{adamo2000,acm1} The parameter is read from the next line. + This only works for isolated systems and should only be used if an excessive amount of + CPU time is available. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.ACM1')) + + x_cpmd_input_DFT_ACM1_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ACM1. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.ACM1_options')) + + x_cpmd_input_DFT_ACM1_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ACM1. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.ACM1_parameters')) + + +class x_cpmd_section_input_DFT_ACM3(MSection): + ''' + Add exact exchange to the specified \\refkeyword{FUNCTIONAL} according to the adiabatic + connection method 3.~\\cite{adamo2000,acm3} The three needed parameters are read from + the next line. This only works for isolated systems and should only be used if an + excessive amount of CPU time is available. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.ACM3')) + + x_cpmd_input_DFT_ACM3_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ACM3. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.ACM3_options')) + + x_cpmd_input_DFT_ACM3_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ACM3. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.ACM3_parameters')) + + +class x_cpmd_section_input_DFT_BECKE_BETA(MSection): + ''' + Change the $\\beta$ parameter in Becke's exchange functional~\\cite{Becke88} to the + value given on the next line. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.BECKE_BETA')) + + x_cpmd_input_DFT_BECKE_BETA_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword BECKE_BETA. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.BECKE_BETA_options')) + + x_cpmd_input_DFT_BECKE_BETA_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword BECKE_BETA. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.BECKE_BETA_parameters')) + + +class x_cpmd_section_input_DFT_EXCHANGE_CORRELATION_TABLE(MSection): + ''' + Specifies the range and the granularity of the lookup table for the local exchange- + correlation energy and potential. The number of table entries and the maximum density + have to be given on the next line. Note that this keyword is only relevant when using + \\refkeyword{OLDCODE} and even then it is set to \\textbf{NO} be default. Previous + default values were 30000 and 2.0. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.EXCHANGE_CORRELATION_TABLE')) + + x_cpmd_input_DFT_EXCHANGE_CORRELATION_TABLE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword EXCHANGE_CORRELATION_TABLE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.EXCHANGE_CORRELATION_TABLE_options')) + + x_cpmd_input_DFT_EXCHANGE_CORRELATION_TABLE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword EXCHANGE_CORRELATION_TABLE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.EXCHANGE_CORRELATION_TABLE_parameters')) + + +class x_cpmd_section_input_DFT_FUNCTIONAL(MSection): + ''' + Single keyword for setting up XC-functionals. Available functionals are NONE, SONLY, + LDA (in PADE form), \\goodbreak BONLY, BP, BLYP, XLYP, GGA (=PW91), PBE, PBES, REVPBE, + \\goodbreak HCTH, OPTX, OLYP, TPSS, PBE0, B1LYP, B3LYP, X3LYP,PBES, \\goodbreak HSE06 + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.FUNCTIONAL')) + + x_cpmd_input_DFT_FUNCTIONAL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword FUNCTIONAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.FUNCTIONAL_options')) + + x_cpmd_input_DFT_FUNCTIONAL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword FUNCTIONAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.FUNCTIONAL_parameters')) + + +class x_cpmd_section_input_DFT_GRADIENT_CORRECTION(MSection): + ''' + Individual components of gradient corrected functionals can be selected. Rarely needed + anymore, use the \\refkeyword{FUNCTIONAL} keyword instead. Functionals implemented are + for the exchange energy: {\\bf BECKE88}~\\cite{Becke88}, {\\bf GGAX}~\\cite{Perdew92} {\\bf + PBEX}~\\cite{Perdew96}, {\\bf REVPBEX}~\\cite{Zhang98}, \\goodbreak{\\bf + HCTH}~\\cite{Handy98}, {\\bf OPTX}~\\cite{Optx},{\\bf PBESX}~\\cite{Perdew07} and for the + correlation part: {\\bf PERDEW86}~\\cite{Perdew86}, {\\bf LYP}~\\cite{Lee88}, {\\bf + GGAC}~\\cite{Perdew92}, {\\bf PBEC} \\cite{Perdew96}, {\\bf REVPBEC} \\cite{Zhang98}, {\\bf + HCTH} \\cite{Handy98} {\\bf OLYP}~\\cite{Optx},{\\bf PBESC}~\\cite{Perdew07}. Note that + for HCTH, exchange and correlation are treated as a unique functional. The keywords + {\\bf EXCHANGE} and {\\bf CORRELATION} can be used for the default functionals + (currently BECKE88 and PERDEW86). If no functionals are specified the default + functionals for exchange and correlation are used. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.GRADIENT_CORRECTION')) + + x_cpmd_input_DFT_GRADIENT_CORRECTION_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword GRADIENT_CORRECTION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.GRADIENT_CORRECTION_options')) + + x_cpmd_input_DFT_GRADIENT_CORRECTION_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword GRADIENT_CORRECTION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.GRADIENT_CORRECTION_parameters')) + + +class x_cpmd_section_input_DFT_HARTREE(MSection): + ''' + Do a Hartree calculation. Only of use for testing purposes. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.HARTREE')) + + x_cpmd_input_DFT_HARTREE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword HARTREE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.HARTREE_options')) + + x_cpmd_input_DFT_HARTREE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword HARTREE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.HARTREE_parameters')) + + +class x_cpmd_section_input_DFT_HFX_SCREENING(MSection): + ''' + Read value from the next line. Perform the calculation of exact exchange using + Wannier functions. Orbital pairs are screened according to the distance of the Wannier + centers {\\sl WFC}, the value of the integrals {\\sl EPS\\_INT}, or only the diagonal + terms are included ({\\sl DIAG}). {\\sl RECOMPUTE\\_TWO\\_INT\\_LIST\\_EVERY} allows to set + how often the integral list is recomputed. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.HFX_SCREENING')) + + x_cpmd_input_DFT_HFX_SCREENING_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword HFX_SCREENING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.HFX_SCREENING_options')) + + x_cpmd_input_DFT_HFX_SCREENING_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword HFX_SCREENING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.HFX_SCREENING_parameters')) + + +class x_cpmd_section_input_DFT_LDA_CORRELATION(MSection): + ''' + The LDA correlation functional is specified. Possible functionals are {\\bf NO} (no + correlation functional), {\\bf PZ}~\\cite{Perdew81}, \\penalty 1000 {\\bf + VWN}~\\cite{Vosko80}, {\\bf LYP}~\\cite{Lee88} and {\\bf PW}~\\cite{Perdew91}. Default is + the {\\bf PZ}, the Perdew and Zunger fit to the data of Ceperley and + Alder~\\cite{Ceperley80}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.LDA_CORRELATION')) + + x_cpmd_input_DFT_LDA_CORRELATION_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword LDA_CORRELATION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.LDA_CORRELATION_options')) + + x_cpmd_input_DFT_LDA_CORRELATION_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword LDA_CORRELATION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.LDA_CORRELATION_parameters')) + + +class x_cpmd_section_input_DFT_LR_KERNEL(MSection): + ''' + Use another functional for the linear response kernel. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.LR_KERNEL')) + + x_cpmd_input_DFT_LR_KERNEL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword LR_KERNEL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.LR_KERNEL_options')) + + x_cpmd_input_DFT_LR_KERNEL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword LR_KERNEL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.LR_KERNEL_parameters')) + + +class x_cpmd_section_input_DFT_NEWCODE(MSection): + ''' + Switch to select one out of two versions of code to calculate exchange-correlation + functionals. NEWCODE is the default, but not all functionals are available with + NEWCODE, if you select one of these, \\refkeyword{OLDCODE} is used automatically. + NEWCODE is highly recommended for all new projects and especially for vector + computers, also some of the newer functionality is untested or non-functional with + OLDCODE. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.NEWCODE')) + + x_cpmd_input_DFT_NEWCODE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword NEWCODE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.NEWCODE_options')) + + x_cpmd_input_DFT_NEWCODE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword NEWCODE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.NEWCODE_parameters')) + + +class x_cpmd_section_input_DFT_OLDCODE(MSection): + ''' + see \\refkeyword{NEWCODE} + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.OLDCODE')) + + x_cpmd_input_DFT_OLDCODE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword OLDCODE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.OLDCODE_options')) + + x_cpmd_input_DFT_OLDCODE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword OLDCODE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.OLDCODE_parameters')) + + +class x_cpmd_section_input_DFT_REFUNCT(MSection): + ''' + Use a special reference functional in a calculation. This option is not active. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.REFUNCT')) + + x_cpmd_input_DFT_REFUNCT_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword REFUNCT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.REFUNCT_options')) + + x_cpmd_input_DFT_REFUNCT_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword REFUNCT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.REFUNCT_parameters')) + + +class x_cpmd_section_input_DFT_SLATER(MSection): + ''' + The $\\alpha$ value for the Slater exchange functional~\\cite{Slater51} is read from the + next line. With NO the exchange functional is switched off. Default is a value of 2/3. + This option together with no correlation functional, allows for $X\\alpha$ theory. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.SLATER')) + + x_cpmd_input_DFT_SLATER_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword SLATER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.SLATER_options')) + + x_cpmd_input_DFT_SLATER_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword SLATER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.SLATER_parameters')) + + +class x_cpmd_section_input_DFT_SMOOTH(MSection): + ''' + A smoothening function is applied to the density~\\cite{Laasonen93}. The function is of + the Fermi type. \\[ f(G) = \\frac{1}{% \\displaystyle{1 + e^{\\frac{\\scriptstyle{G - + G_{\\scriptstyle cut}}} {\\scriptstyle\\Delta}}}} \\] G is the wavevector, $G_{cut} = + \\alpha\\,G_{max}$ and $\\Delta = \\beta\\,G_{max}$. Values for $\\alpha$ and $\\beta$ have + to be given on the next line. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.SMOOTH')) + + x_cpmd_input_DFT_SMOOTH_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword SMOOTH. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.SMOOTH_options')) + + x_cpmd_input_DFT_SMOOTH_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword SMOOTH. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT.SMOOTH_parameters')) + + +class x_cpmd_section_input_DFT(MSection): + ''' + Exchange and correlation functional and related parameters. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT')) + + x_cpmd_input_DFT_default_keyword = Quantity( + type=str, + shape=[], + description=''' + The parameters that are present in the section DFT even without a keyword. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_DFT_default_keyword')) + + x_cpmd_section_input_DFT_ACM0 = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_DFT_ACM0'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.ACM0')) + + x_cpmd_section_input_DFT_ACM1 = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_DFT_ACM1'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.ACM1')) + + x_cpmd_section_input_DFT_ACM3 = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_DFT_ACM3'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.ACM3')) + + x_cpmd_section_input_DFT_BECKE_BETA = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_DFT_BECKE_BETA'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.BECKE_BETA')) + + x_cpmd_section_input_DFT_EXCHANGE_CORRELATION_TABLE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_DFT_EXCHANGE_CORRELATION_TABLE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.EXCHANGE_CORRELATION_TABLE')) + + x_cpmd_section_input_DFT_FUNCTIONAL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_DFT_FUNCTIONAL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.FUNCTIONAL')) + + x_cpmd_section_input_DFT_GRADIENT_CORRECTION = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_DFT_GRADIENT_CORRECTION'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.GRADIENT_CORRECTION')) + + x_cpmd_section_input_DFT_HARTREE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_DFT_HARTREE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.HARTREE')) + + x_cpmd_section_input_DFT_HFX_SCREENING = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_DFT_HFX_SCREENING'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.HFX_SCREENING')) + + x_cpmd_section_input_DFT_LDA_CORRELATION = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_DFT_LDA_CORRELATION'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.LDA_CORRELATION')) + + x_cpmd_section_input_DFT_LR_KERNEL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_DFT_LR_KERNEL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.LR_KERNEL')) + + x_cpmd_section_input_DFT_NEWCODE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_DFT_NEWCODE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.NEWCODE')) + + x_cpmd_section_input_DFT_OLDCODE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_DFT_OLDCODE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.OLDCODE')) + + x_cpmd_section_input_DFT_REFUNCT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_DFT_REFUNCT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.REFUNCT')) + + x_cpmd_section_input_DFT_SLATER = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_DFT_SLATER'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.SLATER')) + + x_cpmd_section_input_DFT_SMOOTH = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_DFT_SMOOTH'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT.SMOOTH')) + + +class x_cpmd_section_input_EXTE(MSection): + ''' + External field definition for EGO QM/MM interface + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_EXTE')) + + x_cpmd_input_EXTE_default_keyword = Quantity( + type=str, + shape=[], + description=''' + The parameters that are present in the section EXTE even without a keyword. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_EXTE_default_keyword')) + + +class x_cpmd_section_input_HARDNESS_DIAGONAL(MSection): + ''' + Not documented + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_HARDNESS.DIAGONAL')) + + x_cpmd_input_HARDNESS_DIAGONAL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DIAGONAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_HARDNESS.DIAGONAL_options')) + + x_cpmd_input_HARDNESS_DIAGONAL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DIAGONAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_HARDNESS.DIAGONAL_parameters')) + + +class x_cpmd_section_input_HARDNESS_ORBITALS(MSection): + ''' + Specify the number of orbitals to be used in a hardness calculation on the next line. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_HARDNESS.ORBITALS')) + + x_cpmd_input_HARDNESS_ORBITALS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ORBITALS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_HARDNESS.ORBITALS_options')) + + x_cpmd_input_HARDNESS_ORBITALS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ORBITALS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_HARDNESS.ORBITALS_parameters')) + + +class x_cpmd_section_input_HARDNESS_REFATOM(MSection): + ''' + Specify the reference atom to be used in a hardness calculation on the next line. This + option is to be used together with the \\refkeyword{ORBITALS} and + \\refkeyword{LOCALIZE}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_HARDNESS.REFATOM')) + + x_cpmd_input_HARDNESS_REFATOM_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword REFATOM. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_HARDNESS.REFATOM_options')) + + x_cpmd_input_HARDNESS_REFATOM_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword REFATOM. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_HARDNESS.REFATOM_parameters')) + + +class x_cpmd_section_input_HARDNESS(MSection): + ''' + Input for HARDNESS calculations + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_HARDNESS')) + + x_cpmd_input_HARDNESS_default_keyword = Quantity( + type=str, + shape=[], + description=''' + The parameters that are present in the section HARDNESS even without a keyword. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_HARDNESS_default_keyword')) + + x_cpmd_section_input_HARDNESS_DIAGONAL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_HARDNESS_DIAGONAL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_HARDNESS.DIAGONAL')) + + x_cpmd_section_input_HARDNESS_ORBITALS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_HARDNESS_ORBITALS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_HARDNESS.ORBITALS')) + + x_cpmd_section_input_HARDNESS_REFATOM = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_HARDNESS_REFATOM'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_HARDNESS.REFATOM')) + + +class x_cpmd_section_input_INFO(MSection): + ''' + A place to put comments about the job. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_INFO')) + + x_cpmd_input_INFO_default_keyword = Quantity( + type=str, + shape=[], + description=''' + The parameters that are present in the section INFO even without a keyword. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_INFO_default_keyword')) + + +class x_cpmd_section_input_LINRES_DIFF_FORMULA(MSection): + ''' + Number of points used in finite difference formula for second derivatives of exchange + --correlation functionals. Default is two point central differences. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_LINRES.DIFF_FORMULA')) + + x_cpmd_input_LINRES_DIFF_FORMULA_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DIFF_FORMULA. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_LINRES.DIFF_FORMULA_options')) + + x_cpmd_input_LINRES_DIFF_FORMULA_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DIFF_FORMULA. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_LINRES.DIFF_FORMULA_parameters')) + + +class x_cpmd_section_input_LINRES_GAUGE(MSection): + ''' + Gauge of the linear-response wavefunctions. Default is the parallel-transport gauge + (PARA) for closed-shell calculations and a sensible combination of the parallel- + transport gauge and the full-rotation gauge (GEN) for all other cases. The full- + rotation gauge can be enforced for all states by selecting ALL. See \\cite{lsets}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_LINRES.GAUGE')) + + x_cpmd_input_LINRES_GAUGE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword GAUGE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_LINRES.GAUGE_options')) + + x_cpmd_input_LINRES_GAUGE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword GAUGE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_LINRES.GAUGE_parameters')) + + +class x_cpmd_section_input_LINRES_HTHRS(MSection): + ''' + Threshold for Hessian in preconditioner for linear response optimizations. Default is + 0.5. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_LINRES.HTHRS')) + + x_cpmd_input_LINRES_HTHRS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword HTHRS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_LINRES.HTHRS_options')) + + x_cpmd_input_LINRES_HTHRS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword HTHRS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_LINRES.HTHRS_parameters')) + + +class x_cpmd_section_input_LINRES_OPTIMIZER(MSection): + ''' + Optimizer to be used for linear response equations. Default is ``AUTO'' which will + first use PCG, then switch to DIIS and finally switch to DIIS with full storage and + state dependent preconditioner. \\refkeyword{THAUTO} sets the two tolerances for when + to do the switch. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_LINRES.OPTIMIZER')) + + x_cpmd_input_LINRES_OPTIMIZER_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword OPTIMIZER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_LINRES.OPTIMIZER_options')) + + x_cpmd_input_LINRES_OPTIMIZER_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword OPTIMIZER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_LINRES.OPTIMIZER_parameters')) + + +class x_cpmd_section_input_LINRES_STEPLENGTH(MSection): + ''' + Step length for steepest descent and preconditioned conjugate gradient methods used in + linear response calculations. Default is 0.1. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_LINRES.STEPLENGTH')) + + x_cpmd_input_LINRES_STEPLENGTH_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword STEPLENGTH. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_LINRES.STEPLENGTH_options')) + + x_cpmd_input_LINRES_STEPLENGTH_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword STEPLENGTH. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_LINRES.STEPLENGTH_parameters')) + + +class x_cpmd_section_input_LINRES_THAUTO(MSection): + ''' + The two values read from the next line control the switch to different optimizers for + an automatic selection of optimizers during a linear response calculation. This also + applies to the Z-vector optimization for TDDFT forces. The first value is the + threshold for switching from conjugate gradients to DIIS (with compressed storage and + averged preconditioner, subspace size defined with \\refkeyword{ODIIS}). The second + value is the threshold for switching to DIIS with full storage and state dependent + preconditioner. See also \\refkeyword{ZDIIS} for specification of the subspace size. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_LINRES.THAUTO')) + + x_cpmd_input_LINRES_THAUTO_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword THAUTO. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_LINRES.THAUTO_options')) + + x_cpmd_input_LINRES_THAUTO_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword THAUTO. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_LINRES.THAUTO_parameters')) + + +class x_cpmd_section_input_LINRES_ZDIIS(MSection): + ''' + The subspace size for the optimizer is read from the next line. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_LINRES.ZDIIS')) + + x_cpmd_input_LINRES_ZDIIS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ZDIIS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_LINRES.ZDIIS_options')) + + x_cpmd_input_LINRES_ZDIIS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ZDIIS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_LINRES.ZDIIS_parameters')) + + +class x_cpmd_section_input_LINRES(MSection): + ''' + General input for HARDNESS and TDDFT calculations + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_LINRES')) + + x_cpmd_input_LINRES_default_keyword = Quantity( + type=str, + shape=[], + description=''' + The parameters that are present in the section LINRES even without a keyword. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_LINRES_default_keyword')) + + x_cpmd_section_input_LINRES_DIFF_FORMULA = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_LINRES_DIFF_FORMULA'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_LINRES.DIFF_FORMULA')) + + x_cpmd_section_input_LINRES_GAUGE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_LINRES_GAUGE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_LINRES.GAUGE')) + + x_cpmd_section_input_LINRES_HTHRS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_LINRES_HTHRS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_LINRES.HTHRS')) + + x_cpmd_section_input_LINRES_OPTIMIZER = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_LINRES_OPTIMIZER'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_LINRES.OPTIMIZER')) + + x_cpmd_section_input_LINRES_STEPLENGTH = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_LINRES_STEPLENGTH'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_LINRES.STEPLENGTH')) + + x_cpmd_section_input_LINRES_THAUTO = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_LINRES_THAUTO'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_LINRES.THAUTO')) + + x_cpmd_section_input_LINRES_ZDIIS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_LINRES_ZDIIS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_LINRES.ZDIIS')) + + +class x_cpmd_section_input_PATH_ALPHA(MSection): + ''' + Smoothing parameter for iterating the string (see \\cite{Eijnden06}). \\textbf{Default} + value is \\defaultvalue{0.2} + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PATH.ALPHA')) + + x_cpmd_input_PATH_ALPHA_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ALPHA. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PATH.ALPHA_options')) + + x_cpmd_input_PATH_ALPHA_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ALPHA. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PATH.ALPHA_parameters')) + + +class x_cpmd_section_input_PATH_FACTOR(MSection): + ''' + Step for propagating string (see \\cite{Eijnden06}). \\textbf{Default} value is + \\defaultvalue{1.0} + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PATH.FACTOR')) + + x_cpmd_input_PATH_FACTOR_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword FACTOR. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PATH.FACTOR_options')) + + x_cpmd_input_PATH_FACTOR_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword FACTOR. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PATH.FACTOR_parameters')) + + +class x_cpmd_section_input_PATH_NEQUI(MSection): + ''' + Number of equilibration steps discarded to calculate the mean force. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PATH.NEQUI')) + + x_cpmd_input_PATH_NEQUI_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword NEQUI. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PATH.NEQUI_options')) + + x_cpmd_input_PATH_NEQUI_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword NEQUI. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PATH.NEQUI_parameters')) + + +class x_cpmd_section_input_PATH_NLOOP(MSection): + ''' + Maximum number of string searches for Mean Free Energy Path searches. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PATH.NLOOP')) + + x_cpmd_input_PATH_NLOOP_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword NLOOP. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PATH.NLOOP_options')) + + x_cpmd_input_PATH_NLOOP_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword NLOOP. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PATH.NLOOP_parameters')) + + +class x_cpmd_section_input_PATH_NPREVIOUS(MSection): + ''' + String index to restart from. Note that this is just for numbering files, the initial + path in collective variables for the search is always {\\em string.inp}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PATH.NPREVIOUS')) + + x_cpmd_input_PATH_NPREVIOUS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword NPREVIOUS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PATH.NPREVIOUS_options')) + + x_cpmd_input_PATH_NPREVIOUS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword NPREVIOUS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PATH.NPREVIOUS_parameters')) + + +class x_cpmd_section_input_PATH_REPLICA_NUMBER(MSection): + ''' + Number of replicas along the string. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PATH.REPLICA_NUMBER')) + + x_cpmd_input_PATH_REPLICA_NUMBER_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword REPLICA_NUMBER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PATH.REPLICA_NUMBER_options')) + + x_cpmd_input_PATH_REPLICA_NUMBER_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword REPLICA_NUMBER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PATH.REPLICA_NUMBER_parameters')) + + +class x_cpmd_section_input_PATH(MSection): + ''' + Mean free energy path calculation (MFEP) + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PATH')) + + x_cpmd_input_PATH_default_keyword = Quantity( + type=str, + shape=[], + description=''' + The parameters that are present in the section PATH even without a keyword. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PATH_default_keyword')) + + x_cpmd_section_input_PATH_ALPHA = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PATH_ALPHA'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PATH.ALPHA')) + + x_cpmd_section_input_PATH_FACTOR = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PATH_FACTOR'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PATH.FACTOR')) + + x_cpmd_section_input_PATH_NEQUI = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PATH_NEQUI'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PATH.NEQUI')) + + x_cpmd_section_input_PATH_NLOOP = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PATH_NLOOP'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PATH.NLOOP')) + + x_cpmd_section_input_PATH_NPREVIOUS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PATH_NPREVIOUS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PATH.NPREVIOUS')) + + x_cpmd_section_input_PATH_REPLICA_NUMBER = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PATH_REPLICA_NUMBER'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PATH.REPLICA_NUMBER')) + + +class x_cpmd_section_input_PIMD_CENTROID_DYNAMICS(MSection): + ''' + Adiabatic centroid molecular dynamics, see Ref.~\\cite{Cao93,Martyna96,aicmd} for + theory and details of our implementation, which yields quasiclassical dynamics of the + nuclear centroids at a specified temperature of the non--centroid modes. This keyword + makes only sense if used in conjunction with the normal mode propagator via the + keyword NORMAL MODES {\\em and} FACSTAGE~$>1.0$ {\\em and} WMASS~$=1.0$. The centroid + adiabaticity control parameter FACSTAGE, which makes the non-centroid modes + artificially fast in order to sample adiabatically the quantum fluctuations, has to be + chosen carefully; note that FACSTAGE~$= 1/\\gamma$ as introduced in Ref.~\\cite{aicmd} + in eq.~(2.51). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.CENTROID_DYNAMICS')) + + x_cpmd_input_PIMD_CENTROID_DYNAMICS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CENTROID_DYNAMICS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.CENTROID_DYNAMICS_options')) + + x_cpmd_input_PIMD_CENTROID_DYNAMICS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CENTROID_DYNAMICS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.CENTROID_DYNAMICS_parameters')) + + +class x_cpmd_section_input_PIMD_CLASSICAL_TEST(MSection): + ''' + Test option to reduce the path integral branch to the classical code for the special + case $P=1$ in order to allow for a one-to-one comparison to a run using the standard + branch of CPMD. It works only with primitive propagator, i.e.\\ not together with + NORMAL MODES, STAGING and/or \\refkeyword{DEBROGLIE} CENTROID. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.CLASSICAL_TEST')) + + x_cpmd_input_PIMD_CLASSICAL_TEST_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CLASSICAL_TEST. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.CLASSICAL_TEST_options')) + + x_cpmd_input_PIMD_CLASSICAL_TEST_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CLASSICAL_TEST. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.CLASSICAL_TEST_parameters')) + + +class x_cpmd_section_input_PIMD_DEBROGLIE(MSection): + ''' + An initial configuration assuming quantum free particle behavior is generated for each + individual atom according to its physical mass at the temperature given in Kelvin on + the following input line. + + Using DEBROGLIE each nuclear position obtained from the \\&ATOMS \\ldots\\ \\&END section + serves as the starting point for a Gaussian L\\'evy walk of length $P$ in three + dimensions, see e.g.\\ Ref.~\\cite{Fosdick66}. + + Using DEBROGLIE CENTROID each nuclear position obtained from the \\&ATOMS \\ldots\\ \\&END + section serves as the centroid (center of geometry) for obtaining the centroid (center + of geometry) for obtaining the $P$ normal modes in three dimensions, see e.g.\\ + Ref.~\\cite{Tuckerman96}. + + This option does only specify the generation of the initial configuration if + INITIALIZATION and GENERATE REPLICAS are active. + + Default is DEBROGLIE CENTROID and 500~Kelvin. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.DEBROGLIE')) + + x_cpmd_input_PIMD_DEBROGLIE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DEBROGLIE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.DEBROGLIE_options')) + + x_cpmd_input_PIMD_DEBROGLIE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DEBROGLIE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.DEBROGLIE_parameters')) + + +class x_cpmd_section_input_PIMD_FACMASS(MSection): + ''' + Obtain the fictitious nuclear masses $M_I^\\prime$ within path integral molecular + dynamics from the real physical atomic masses $M_I$ (as tabulated in the DATA ATWT / + \\ldots / statement in atoms.F) by {\\em multiplying} them with the dimensionless + factor WMASS that is read from the following line; if the NORMAL MODES or STAGING + propagator is used obtain $M_I^{\\prime (s)}= \\mbox{WMASS} \\cdot M_I^{(s)}$ for {\\em + all} replicas $s=1, \\dots , P$; see e.g. Ref.~\\cite{aicmd} eq.~(2.37) for + nomenclature. \\textbf{Default} value of WMASS is \\defaultvalue{1.0} + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.FACMASS')) + + x_cpmd_input_PIMD_FACMASS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword FACMASS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.FACMASS_options')) + + x_cpmd_input_PIMD_FACMASS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword FACMASS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.FACMASS_parameters')) + + +class x_cpmd_section_input_PIMD_GENERATE_REPLICAS(MSection): + ''' + Generate quantum free particle replicas from scratch given a classical input + configuration according to the keyword \\refkeyword{DEBROGLIE} specification. + + This is the default if \\refkeyword{INITIALIZATION} is active. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.GENERATE_REPLICAS')) + + x_cpmd_input_PIMD_GENERATE_REPLICAS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword GENERATE_REPLICAS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.GENERATE_REPLICAS_options')) + + x_cpmd_input_PIMD_GENERATE_REPLICAS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword GENERATE_REPLICAS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.GENERATE_REPLICAS_parameters')) + + +class x_cpmd_section_input_PIMD_INITIALIZATION(MSection): + ''' + Provide an initial configuration for all replicas as specified either by + \\refkeyword{GENERATE REPLICAS} or by \\refkeyword{READ REPLICAS}. + + This option is automatically activated if \\refkeyword{RESTART} COORDINATES is not + specified. + + It is defaulted to GENERATE REPLICAS together with \\refkeyword{DEBROGLIE} CENTROID and + a temperature of 500~Kelvin. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.INITIALIZATION')) + + x_cpmd_input_PIMD_INITIALIZATION_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword INITIALIZATION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.INITIALIZATION_options')) + + x_cpmd_input_PIMD_INITIALIZATION_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword INITIALIZATION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.INITIALIZATION_parameters')) + + +class x_cpmd_section_input_PIMD_NORMAL_MODES(MSection): + ''' + Use the normal mode representation~\\cite{Tuckerman96} of the path integral propagator. + It is possible to impose a mass disparity between centroid and non--centroid + coordinates by dividing the fictitious masses of only the {\\em non}--centroid $s=2, + \\dots ,P$ replicas by the adiabaticity control factor FACSTAGE. This dimensionless + factor {\\em must always} be specified in the following line. Note: the eigen--{\\em + frequencies} of the $s>1$ replicas are changed by only $\\sqrt{\\mbox{FACSTAGE}}$, see + Ref.~\\cite{Martyna96}(b). Using FACSTAGE~$\\not= 1.0$ makes only sense in conjunction + with CENTROID DYNAMICS where WMASS=1.0 has to be used as well. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.NORMAL_MODES')) + + x_cpmd_input_PIMD_NORMAL_MODES_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword NORMAL_MODES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.NORMAL_MODES_options')) + + x_cpmd_input_PIMD_NORMAL_MODES_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword NORMAL_MODES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.NORMAL_MODES_parameters')) + + +class x_cpmd_section_input_PIMD_OUTPUT(MSection): + ''' + Output files for each processor, processor group, or only grandparent. + + Default is PARENT to standard output file (Note: some information such as messages for + correct reading~/ writing of restart files is lost); GROUPS and ALL write to the files + OUTPUT\\_$n$ where $n$ is the group and bead number, respectively. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.OUTPUT')) + + x_cpmd_input_PIMD_OUTPUT_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword OUTPUT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.OUTPUT_options')) + + x_cpmd_input_PIMD_OUTPUT_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword OUTPUT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.OUTPUT_parameters')) + + +class x_cpmd_section_input_PIMD_PRINT_LEVEL(MSection): + ''' + The detail of printing information is read as an integer number from the next line. + + Currently there is only minimal output for $<5$ and maximal output for $\\geq 5$. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.PRINT_LEVEL')) + + x_cpmd_input_PIMD_PRINT_LEVEL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword PRINT_LEVEL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.PRINT_LEVEL_options')) + + x_cpmd_input_PIMD_PRINT_LEVEL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword PRINT_LEVEL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.PRINT_LEVEL_parameters')) + + +class x_cpmd_section_input_PIMD_PROCESSOR_GROUPS(MSection): + ''' + % This is only needed for {\\em fine}--tuning load balancing in case of path integral + runs {\\em iff} two level parallelization is used. The default optimizes the combined + load balancing of the parallelization over replicas and g--vectors. The default load + distribution is usually optimal. Separate the total number of processors into a + certain number of processor groups that is read from the following line; only 2$^N$ = + 2, 4, 8, 16, $\\dots$ groups are allowed and the maximum number of groups is the number + of replicas. Every processor group is headed by one PARENT and has several CHILDREN + that work together on a single replica at one time; the processor groups work + sequentially on replicas if there is more than one replica assigned to one processor + group. + + Note: if the resulting number of processor groups is much smaller than the number of + replicas (which occurs in ``odd'' cases) specifying the number of processor groups to + be equal to the number of replicas might be more efficient. + + This keyword is only active in parallel mode. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.PROCESSOR_GROUPS')) + + x_cpmd_input_PIMD_PROCESSOR_GROUPS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword PROCESSOR_GROUPS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.PROCESSOR_GROUPS_options')) + + x_cpmd_input_PIMD_PROCESSOR_GROUPS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword PROCESSOR_GROUPS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.PROCESSOR_GROUPS_parameters')) + + +class x_cpmd_section_input_PIMD_READ_REPLICAS(MSection): + ''' + Read all $P$ replicas from a file with a name to be specified in the following line, + for the input format see subroutine rreadf.F. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.READ_REPLICAS')) + + x_cpmd_input_PIMD_READ_REPLICAS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword READ_REPLICAS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.READ_REPLICAS_options')) + + x_cpmd_input_PIMD_READ_REPLICAS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword READ_REPLICAS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.READ_REPLICAS_parameters')) + + +class x_cpmd_section_input_PIMD_STAGING(MSection): + ''' + Use the staging representation~\\cite{Tuckerman96} of the path integral propagator. It + is possible to impose a mass disparity between centroid and non--centroid coordinates + by dividing the fictitous masses of only the {\\em non}--centroid $s=2, \\dots ,P$ + replicas by the adiabaticity control factor FACSTAGE. This dimensionless factor {\\em + must always} be specified in the following line. Note: the eigen--{\\em frequencies} of + the $s>1$ replicas are changed by only $\\sqrt{\\mbox{FACSTAGE}}$, see + Ref.~\\cite{Martyna96}(b). Note: using FACSTAGE~$\\not= 1.0$ essentially makes no sense + within the STAGING scheme, but see its use within CENTROID DYNAMICS and NORMAL MODES. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.STAGING')) + + x_cpmd_input_PIMD_STAGING_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword STAGING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.STAGING_options')) + + x_cpmd_input_PIMD_STAGING_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword STAGING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.STAGING_parameters')) + + +class x_cpmd_section_input_PIMD_TROTTER_DIMENSION(MSection): + ''' + The Trotter number $P$, i.e. the number of ``replicas'', ``beads'', or ``imaginary + time slices'' which are used in order to discretize the Feynman--Kac path integral of + the nuclei, is read from the next line. If NORMAL MODES or STAGING is not activated + the path integral is discretized in cartesian coordinates in real space (so--called + ``primitive coordinates''). A discussion about controlling discretization errors and + on estimating $P$ in advance is given in Ref.~\\cite{knoll-marx-00}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.TROTTER_DIMENSION')) + + x_cpmd_input_PIMD_TROTTER_DIMENSION_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword TROTTER_DIMENSION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.TROTTER_DIMENSION_options')) + + x_cpmd_input_PIMD_TROTTER_DIMENSION_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword TROTTER_DIMENSION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD.TROTTER_DIMENSION_parameters')) + + +class x_cpmd_section_input_PIMD(MSection): + ''' + Path integral molecular dynamics (PIMD) + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD')) + + x_cpmd_input_PIMD_default_keyword = Quantity( + type=str, + shape=[], + description=''' + The parameters that are present in the section PIMD even without a keyword. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PIMD_default_keyword')) + + x_cpmd_section_input_PIMD_CENTROID_DYNAMICS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PIMD_CENTROID_DYNAMICS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.CENTROID_DYNAMICS')) + + x_cpmd_section_input_PIMD_CLASSICAL_TEST = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PIMD_CLASSICAL_TEST'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.CLASSICAL_TEST')) + + x_cpmd_section_input_PIMD_DEBROGLIE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PIMD_DEBROGLIE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.DEBROGLIE')) + + x_cpmd_section_input_PIMD_FACMASS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PIMD_FACMASS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.FACMASS')) + + x_cpmd_section_input_PIMD_GENERATE_REPLICAS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PIMD_GENERATE_REPLICAS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.GENERATE_REPLICAS')) + + x_cpmd_section_input_PIMD_INITIALIZATION = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PIMD_INITIALIZATION'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.INITIALIZATION')) + + x_cpmd_section_input_PIMD_NORMAL_MODES = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PIMD_NORMAL_MODES'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.NORMAL_MODES')) + + x_cpmd_section_input_PIMD_OUTPUT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PIMD_OUTPUT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.OUTPUT')) + + x_cpmd_section_input_PIMD_PRINT_LEVEL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PIMD_PRINT_LEVEL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.PRINT_LEVEL')) + + x_cpmd_section_input_PIMD_PROCESSOR_GROUPS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PIMD_PROCESSOR_GROUPS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.PROCESSOR_GROUPS')) + + x_cpmd_section_input_PIMD_READ_REPLICAS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PIMD_READ_REPLICAS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.READ_REPLICAS')) + + x_cpmd_section_input_PIMD_STAGING = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PIMD_STAGING'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.STAGING')) + + x_cpmd_section_input_PIMD_TROTTER_DIMENSION = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PIMD_TROTTER_DIMENSION'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD.TROTTER_DIMENSION')) + + +class x_cpmd_section_input_PROP_AVERAGED_POTENTIAL(MSection): + ''' + Calculate averaged electrostatic potential in spheres of radius Rcut around the atomic + positions. Parameter Rcut is read in from next line. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.AVERAGED_POTENTIAL')) + + x_cpmd_input_PROP_AVERAGED_POTENTIAL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword AVERAGED_POTENTIAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.AVERAGED_POTENTIAL_options')) + + x_cpmd_input_PROP_AVERAGED_POTENTIAL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword AVERAGED_POTENTIAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.AVERAGED_POTENTIAL_parameters')) + + +class x_cpmd_section_input_PROP_CHARGES(MSection): + ''' + Calculate atomic charges. Charges are calculated according to the method of + Hirshfeld~\\cite{Hirshfeld77} and charges derived from the electrostatic + potential~\\cite{Cox84}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.CHARGES')) + + x_cpmd_input_PROP_CHARGES_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CHARGES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.CHARGES_options')) + + x_cpmd_input_PROP_CHARGES_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CHARGES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.CHARGES_parameters')) + + +class x_cpmd_section_input_PROP_CONDUCTIVITY(MSection): + ''' + Computes the optical conductivity according to the Kubo-Greenwod formula + \\begin{equation*} \\sigma(\\omega) = \\frac{2 \\pi e^2}{3m^2 V_{\\rm cell}} \\frac{1}{\\omega + } \\sum_{i,j} (f_i-f_j) |\\langle \\psi _i| \\hat{\\bf p} |\\psi _j \\rangle |^2 + \\delta(\\epsilon _i -\\epsilon_j - \\hbar \\omega) \\label{condu} \\end{equation*} where + $\\psi _i$ are the Kohn-Sham eigenstates, $\\epsilon _i$ their corresponding + eigenvalues, $f_i$ the occupation number and the difference $f_i-f_j$ takes care of + the fermionic occupancy. This calculation is executed when the keyword PROPERTIES is + used in the section \\&CPMD ... \\&END. In the section \\&PROP ... \\&END the keyword + CONDUCTIVITY must be present and the interval interval $\\Delta \\omega$ for the + calculation of the spectrum is read from the next line. Note that, since this is a + "PROPERTIES" calculation, {\\it you must have previously computed the electronic + structure of your system and have a consistent \\refkeyword{RESTART} file ready to + use}. Further keyword: \\texttt{STEP=0.14}, where (e.g.) 0.14 is the bin width in eV of + the $\\sigma(\\omega)$ histogram if you want it to be different from $\\Delta \\omega$. A + file MATRIX.DAT is written in your working directory, where all the non-zero + transition amplitudes and related informations are reported (see the header of + MATRIX.DAT). An example of application is given in Refs.~\\cite{solve,solve2}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.CONDUCTIVITY')) + + x_cpmd_input_PROP_CONDUCTIVITY_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CONDUCTIVITY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.CONDUCTIVITY_options')) + + x_cpmd_input_PROP_CONDUCTIVITY_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CONDUCTIVITY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.CONDUCTIVITY_parameters')) + + +class x_cpmd_section_input_PROP_CORE_SPECTRA(MSection): + ''' + Computes the X-ray adsorption spectrum and related transition matrix elements + according to Ref.~\\cite{xray}. This calculation is executed when the keyword + PROPERTIES is used in the section \\&CPMD ... \\&END. In the section \\&PROP ... \\&END + the keyword CORE SPECTRA must be present and the core atom number (e.g. 10 if it is + the 10$th$ atom in your list) and core level energy (in au) are read from the next + line, while in the following line the $n$ and $l$ quantum numbers of the selected core + level, along with the exponential factor $a$ of the STO orbital for the core level + must be provided. In the case of $1s$ states, the core orbital is reconstructed as + \\begin{equation*} \\psi _{1s}(r) = 2 a^{\\frac{3}{2}} r \\cdot \\exp (-a\\cdot r) + \\label{1s} \\end{equation*} and it is this $a$ value in au that must be supplied in + input. As a general rule, first-row elements in the neutral case have the following + $a$ values: B (4.64), C (5.63), N (6.62), O (7.62). For an excited atom these values + would be of course a bit larger; e.g. for O it is 7.74453, i.e. 1.6 \\% larger. Since + this is a "PROPERTIES" calculation, {\\it you must have previously computed the + electronic structure of your system and have a consistent \\refkeyword{RESTART} file + ready to use}. A file XRAYSPEC.DAT is written in your working directory, containing + all the square transition amplitudes and related informations, part of which are also + written in the standard output. Waring: in order to use this keyword you need special + pseudopotentials. These are provided, at least for some elements, in the PP library of + CPMD and are named as *\\_HOLE.psp + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.CORE_SPECTRA')) + + x_cpmd_input_PROP_CORE_SPECTRA_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CORE_SPECTRA. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.CORE_SPECTRA_options')) + + x_cpmd_input_PROP_CORE_SPECTRA_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CORE_SPECTRA. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.CORE_SPECTRA_parameters')) + + +class x_cpmd_section_input_PROP_CUBECENTER(MSection): + ''' + Sets the center of the cubefiles produced by the \\refkeyword{CUBEFILE} flag. The next + line has to contain the coordinates of the center in Bohr or Angstrom, depending on + whether the \\refkeyword{ANGSTROM} keyword was given. \\textbf{Default} is the geometric + center of the system. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.CUBECENTER')) + + x_cpmd_input_PROP_CUBECENTER_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CUBECENTER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.CUBECENTER_options')) + + x_cpmd_input_PROP_CUBECENTER_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CUBECENTER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.CUBECENTER_parameters')) + + +class x_cpmd_section_input_PROP_CUBEFILE(MSection): + ''' + Plots the requested objects in .CUBE file format. If ORBITALS are demanded, the total + number as well as the indices have to be given on the next and second next line. + HALFMESH reduces the number of grid points per direction by 2, thus reducing the file + size by a factor of 8. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.CUBEFILE')) + + x_cpmd_input_PROP_CUBEFILE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CUBEFILE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.CUBEFILE_options')) + + x_cpmd_input_PROP_CUBEFILE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CUBEFILE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.CUBEFILE_parameters')) + + +class x_cpmd_section_input_PROP_DIPOLE_MOMENT(MSection): + ''' + Calculate the dipole moment. + + Without the additional keywords {\\bf BERRY} or {\\bf RS} this is only implemented for + simple cubic and fcc supercells. The keyword {\\bf RS} requests the use of the real- + space algorithm. The keyword {\\bf BERRY} requests the use of the Berry phase + algorithm. + + {\\bf Default} is to use the real-space algorithm. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.DIPOLE_MOMENT')) + + x_cpmd_input_PROP_DIPOLE_MOMENT_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DIPOLE_MOMENT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.DIPOLE_MOMENT_options')) + + x_cpmd_input_PROP_DIPOLE_MOMENT_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DIPOLE_MOMENT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.DIPOLE_MOMENT_parameters')) + + +class x_cpmd_section_input_PROP_EXCITED_DIPOLE(MSection): + ''' + Calculate the difference of dipole moments between the ground state density and a + density generated by differently occupied Kohn-Sham orbitals. On the next line the + number of dipole moments to calculate and the total number orbitals has to be given. + On the following lines the occupation of the states for each calculation has to be + given. By default the dipoles are calculated by the method used for the {\\bf DIPOLE + MOMENT} option and the same restrictions apply. If the {\\bf LOCAL DIPOLE} option is + specified the dipole moment differences are calculated within the same boxes. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.EXCITED_DIPOLE')) + + x_cpmd_input_PROP_EXCITED_DIPOLE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword EXCITED_DIPOLE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.EXCITED_DIPOLE_options')) + + x_cpmd_input_PROP_EXCITED_DIPOLE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword EXCITED_DIPOLE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.EXCITED_DIPOLE_parameters')) + + +class x_cpmd_section_input_PROP_LDOS(MSection): + ''' + Calculate the layer projected density of states. The number of layers is read from the + next line. To use the LDOS keyword, the user must first have performed a wavefunction + optimization and then restart with with the \\refkeyword{PROPERTIES} and + \\refkeyword{LANCZOS DIAGONALIZATION} keywords in the \\&CPMD section (and LDOS in the + \\&PROP section). \\textbf{Warning:} If you use special k-points for a special + structure you need to symmetrize charge density for which you must specify the + \\refkeyword{POINT GROUP}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.LDOS')) + + x_cpmd_input_PROP_LDOS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword LDOS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.LDOS_options')) + + x_cpmd_input_PROP_LDOS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword LDOS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.LDOS_parameters')) + + +class x_cpmd_section_input_PROP_LOCAL_DIPOLE(MSection): + ''' + Calculate $numloc$ local dipole moments. $numloc$ is read from the next line followed + by two numloc lines with the format: \\\\ $xmin$ $ymin$ $zmin$ \\\\ $xmax$ $ymax$ $zmax$ + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.LOCAL_DIPOLE')) + + x_cpmd_input_PROP_LOCAL_DIPOLE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword LOCAL_DIPOLE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.LOCAL_DIPOLE_options')) + + x_cpmd_input_PROP_LOCAL_DIPOLE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword LOCAL_DIPOLE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.LOCAL_DIPOLE_parameters')) + + +class x_cpmd_section_input_PROP_LOCALIZE(MSection): + ''' + Localize the molecular orbitals \\cite{Hutter94b} as defined through the atomic basis + set. The same localization transformation is then applied also to the wavefunctions + in the plane wave basis. These wavefunction can be printed with the keyword {\\bf + RHOOUT} specified in the section \\&CPMD section. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.LOCALIZE')) + + x_cpmd_input_PROP_LOCALIZE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword LOCALIZE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.LOCALIZE_options')) + + x_cpmd_input_PROP_LOCALIZE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword LOCALIZE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.LOCALIZE_parameters')) + + +class x_cpmd_section_input_PROP_NOPRINT_ORBITALS(MSection): + ''' + Do not print the wavefunctions in the atomic basis set. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.NOPRINT_ORBITALS')) + + x_cpmd_input_PROP_NOPRINT_ORBITALS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword NOPRINT_ORBITALS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.NOPRINT_ORBITALS_options')) + + x_cpmd_input_PROP_NOPRINT_ORBITALS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword NOPRINT_ORBITALS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.NOPRINT_ORBITALS_parameters')) + + +class x_cpmd_section_input_PROP_OPTIMIZE_SLATER_EXPONENTS(MSection): + ''' + Not documented + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.OPTIMIZE_SLATER_EXPONENTS')) + + x_cpmd_input_PROP_OPTIMIZE_SLATER_EXPONENTS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword OPTIMIZE_SLATER_EXPONENTS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.OPTIMIZE_SLATER_EXPONENTS_options')) + + x_cpmd_input_PROP_OPTIMIZE_SLATER_EXPONENTS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword OPTIMIZE_SLATER_EXPONENTS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.OPTIMIZE_SLATER_EXPONENTS_parameters')) + + +class x_cpmd_section_input_PROP_POLARISABILITY(MSection): + ''' + Computes the polarisability of a system, intended as dipole moment per unit volume. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.POLARISABILITY')) + + x_cpmd_input_PROP_POLARISABILITY_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword POLARISABILITY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.POLARISABILITY_options')) + + x_cpmd_input_PROP_POLARISABILITY_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword POLARISABILITY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.POLARISABILITY_parameters')) + + +class x_cpmd_section_input_PROP_POPULATION_ANALYSIS(MSection): + ''' + The type of population analysis that is performed with the projected wavefunctions. + L\\"owdin charges are given with both options. For the Davidson + analysis~\\cite{Davidson67} the maximum complexity can be specified with the keyword + {\\bf n-CENTER}. Default for n is 2, terms up to 4 are programmed. For the Davidson + option one has to specify the number of atomic orbitals that are used in the analysis. + For each species one has to give this number in a separate line. An input example for + a water molecule is given in the hints section \\ref{hints:pop}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.POPULATION_ANALYSIS')) + + x_cpmd_input_PROP_POPULATION_ANALYSIS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword POPULATION_ANALYSIS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.POPULATION_ANALYSIS_options')) + + x_cpmd_input_PROP_POPULATION_ANALYSIS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword POPULATION_ANALYSIS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.POPULATION_ANALYSIS_parameters')) + + +class x_cpmd_section_input_PROP_PROJECT_WAVEFUNCTION(MSection): + ''' + The wavefunctions are projected on atomic orbitals. The projected wavefunctions are + then used to calculate atomic populations and bond orders. The atomic orbitals to + project on are taken from the \\&BASIS section. If there is no \\&BASIS section in the + input a minimal Slater basis is used. See section~\\ref{input:basis} for more details. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.PROJECT_WAVEFUNCTION')) + + x_cpmd_input_PROP_PROJECT_WAVEFUNCTION_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword PROJECT_WAVEFUNCTION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.PROJECT_WAVEFUNCTION_options')) + + x_cpmd_input_PROP_PROJECT_WAVEFUNCTION_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword PROJECT_WAVEFUNCTION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.PROJECT_WAVEFUNCTION_parameters')) + + +class x_cpmd_section_input_PROP_TRANSITION_MOMENT(MSection): + ''' + Calculate the dipole transition matrix element. + + On the following lines, the number of transitions and the involved orbitals are given. + Example: {\\tt \\begin{tabular}{ccc} \\multicolumn{2}{l}{\\bf TRANSITION MOMENT} 2 & 6 + & 7 6 & 8 \\end{tabular} } + + This calculates the dipole transition matrix elements between KS states 6 and 7, and + between 6 and 8. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.TRANSITION_MOMENT')) + + x_cpmd_input_PROP_TRANSITION_MOMENT_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword TRANSITION_MOMENT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.TRANSITION_MOMENT_options')) + + x_cpmd_input_PROP_TRANSITION_MOMENT_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword TRANSITION_MOMENT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP.TRANSITION_MOMENT_parameters')) + + +class x_cpmd_section_input_PROP(MSection): + ''' + Calculation of properties + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP')) + + x_cpmd_input_PROP_default_keyword = Quantity( + type=str, + shape=[], + description=''' + The parameters that are present in the section PROP even without a keyword. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PROP_default_keyword')) + + x_cpmd_section_input_PROP_AVERAGED_POTENTIAL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PROP_AVERAGED_POTENTIAL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.AVERAGED_POTENTIAL')) + + x_cpmd_section_input_PROP_CHARGES = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PROP_CHARGES'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.CHARGES')) + + x_cpmd_section_input_PROP_CONDUCTIVITY = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PROP_CONDUCTIVITY'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.CONDUCTIVITY')) + + x_cpmd_section_input_PROP_CORE_SPECTRA = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PROP_CORE_SPECTRA'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.CORE_SPECTRA')) + + x_cpmd_section_input_PROP_CUBECENTER = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PROP_CUBECENTER'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.CUBECENTER')) + + x_cpmd_section_input_PROP_CUBEFILE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PROP_CUBEFILE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.CUBEFILE')) + + x_cpmd_section_input_PROP_DIPOLE_MOMENT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PROP_DIPOLE_MOMENT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.DIPOLE_MOMENT')) + + x_cpmd_section_input_PROP_EXCITED_DIPOLE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PROP_EXCITED_DIPOLE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.EXCITED_DIPOLE')) + + x_cpmd_section_input_PROP_LDOS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PROP_LDOS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.LDOS')) + + x_cpmd_section_input_PROP_LOCAL_DIPOLE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PROP_LOCAL_DIPOLE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.LOCAL_DIPOLE')) + + x_cpmd_section_input_PROP_LOCALIZE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PROP_LOCALIZE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.LOCALIZE')) + + x_cpmd_section_input_PROP_NOPRINT_ORBITALS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PROP_NOPRINT_ORBITALS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.NOPRINT_ORBITALS')) + + x_cpmd_section_input_PROP_OPTIMIZE_SLATER_EXPONENTS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PROP_OPTIMIZE_SLATER_EXPONENTS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.OPTIMIZE_SLATER_EXPONENTS')) + + x_cpmd_section_input_PROP_POLARISABILITY = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PROP_POLARISABILITY'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.POLARISABILITY')) + + x_cpmd_section_input_PROP_POPULATION_ANALYSIS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PROP_POPULATION_ANALYSIS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.POPULATION_ANALYSIS')) + + x_cpmd_section_input_PROP_PROJECT_WAVEFUNCTION = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PROP_PROJECT_WAVEFUNCTION'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.PROJECT_WAVEFUNCTION')) + + x_cpmd_section_input_PROP_TRANSITION_MOMENT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PROP_TRANSITION_MOMENT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP.TRANSITION_MOMENT')) + + +class x_cpmd_section_input_PTDDFT_ACCURACY(MSection): + ''' + Specifies the accuracy to be reached in the Cayley propagation scheme used in + Ehrenfest type of dynamics and spectra calculation. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PTDDFT.ACCURACY')) + + x_cpmd_input_PTDDFT_ACCURACY_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ACCURACY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PTDDFT.ACCURACY_options')) + + x_cpmd_input_PTDDFT_ACCURACY_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ACCURACY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PTDDFT.ACCURACY_parameters')) + + +class x_cpmd_section_input_PTDDFT_PIPULSE(MSection): + ''' + Specifies a time dependent pi-pulse to be used with MOLECULAR DYNAMICS EH. Use PIPULSE + together with TD\\_POTENTIAL. The pulse strength is read from the next line (see + subroutine gaugepot\\_laser in td\\_util.F for further details). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PTDDFT.PIPULSE')) + + x_cpmd_input_PTDDFT_PIPULSE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword PIPULSE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PTDDFT.PIPULSE_options')) + + x_cpmd_input_PTDDFT_PIPULSE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword PIPULSE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PTDDFT.PIPULSE_parameters')) + + +class x_cpmd_section_input_PTDDFT_RESTFILE(MSection): + ''' + Defines a restart code for the restart of the Ehrenfest dynamics + (\\refkeyword{MOLECULAR DYNAMICS} EH) and the propagation spectra + (\\refkeyword{PROPAGATION SPECTRA}). The restart option is read from the next line: + 0(=default) restart from the (complex)wavefunctions in the file wavefunctions. This + option is used in case of a continuation run; 1. restart from the the orbital files + WAVEFUNCTION.n, where $n$ is the index of the KS orbital and runs from $1$ to the + number of s tates (This states a prepare in a previuos run using the KOHN-SHAM + ENERGIES principal keyward), 2; restart from the orbitals stored in RESTART (obtained + from a optimization run with tight convergence (at least 1.D-7)). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PTDDFT.RESTFILE')) + + x_cpmd_input_PTDDFT_RESTFILE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword RESTFILE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PTDDFT.RESTFILE_options')) + + x_cpmd_input_PTDDFT_RESTFILE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword RESTFILE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PTDDFT.RESTFILE_parameters')) + + +class x_cpmd_section_input_PTDDFT(MSection): + ''' + Propagation TDDFT for Ehrenfest dynamics and spectra calculation + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_PTDDFT')) + + x_cpmd_input_PTDDFT_default_keyword = Quantity( + type=str, + shape=[], + description=''' + The parameters that are present in the section PTDDFT even without a keyword. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_PTDDFT_default_keyword')) + + x_cpmd_section_input_PTDDFT_ACCURACY = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PTDDFT_ACCURACY'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PTDDFT.ACCURACY')) + + x_cpmd_section_input_PTDDFT_PIPULSE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PTDDFT_PIPULSE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PTDDFT.PIPULSE')) + + x_cpmd_section_input_PTDDFT_RESTFILE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PTDDFT_RESTFILE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PTDDFT.RESTFILE')) + + +class x_cpmd_section_input_QMMM_AMBER(MSection): + ''' + An Amber functional form for the classical force field is used. In this case + coordinates and topology files as obtained by Amber have to be converted in Gromos + format just for input/read consistency. This is done with the tool amber2gromos + availabe with the CPMD/QMMM package. This keyword is mutually exclusive with the + \\refkeyword{GROMOS} keyword (which is used by default). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.AMBER')) + + x_cpmd_input_QMMM_AMBER_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword AMBER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.AMBER_options')) + + x_cpmd_input_QMMM_AMBER_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword AMBER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.AMBER_parameters')) + + +class x_cpmd_section_input_QMMM_BOX_TOLERANCE(MSection): + ''' + The value for the box tolerance is read from the next line. In a QM/MM calculation the + size of the QM-box is fixed and the QM-atoms must not come to close to the walls of + this box. On top of always recentering the QM-box around the center of the + distribution of the atoms, CPMD prints a warning message to the output when the + distribution extends too much to fit into the QM-box properly anymore. This value may + need to be adjusted to the requirements of the Poisson solver used (see section + \\ref{hints:symm0}). {\\bf Default} value is 8~a.u. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.BOX_TOLERANCE')) + + x_cpmd_input_QMMM_BOX_TOLERANCE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword BOX_TOLERANCE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.BOX_TOLERANCE_options')) + + x_cpmd_input_QMMM_BOX_TOLERANCE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword BOX_TOLERANCE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.BOX_TOLERANCE_parameters')) + + +class x_cpmd_section_input_QMMM_BOX_WALLS(MSection): + ''' + The thickness parameter for soft, reflecting QM-box walls is read from the next line. + This keyword allows to reverse the momentum of the particles (${\\bf p}_I \\rightarrow + -{\\bf p}_I$) when they reach the walls of the simulation supercell similar to the full + quantum case, but acting along all the three directions $x,y,z$. In the case this + keyword is used in the \\&QMMM section,QM particles are reflected back in the QM box. + Contrary to the normal procedure of re-centering the QM-box, a soft, reflecting + confinement potential is applied if atoms come too close to the border of the QM + box~\\cite{box-walls}. It is highly recommended to also use \\refkeyword{SUBTRACT} + COMVEL in combination with this feature. {\\bf NOTE:} to have your QM-box properly + centered, it is best to run a short MD with this feature turned off and then start + from the resulting restart with the soft walls turned on. Since the reflecting walls + reverse the sign of the velocities, ${\\bf p}_I \\to -{\\bf p}_I$ ($I$ = QM atom index), + be aware that this options affects the momentum conservation in your QM subsystem. + This feature is {\\bf disabled by default} + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.BOX_WALLS')) + + x_cpmd_input_QMMM_BOX_WALLS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword BOX_WALLS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.BOX_WALLS_options')) + + x_cpmd_input_QMMM_BOX_WALLS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword BOX_WALLS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.BOX_WALLS_parameters')) + + +class x_cpmd_section_input_QMMM_CAPPING(MSection): + ''' + Add (dummy) hydrogen atoms to the QM-system to saturate dangling bonds when cutting + between MM- and QM-system. This needs a special pseudopotential entry in the \\&ATOMS + section (see section \\ref{sec:qmmm-cut-bonds} for more details). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.CAPPING')) + + x_cpmd_input_QMMM_CAPPING_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CAPPING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.CAPPING_options')) + + x_cpmd_input_QMMM_CAPPING_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CAPPING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.CAPPING_parameters')) + + +class x_cpmd_section_input_QMMM_COORDINATES(MSection): + ''' + On the next line the name of a Gromos96 format coordinate file has to be given. Note, + that this file must match the corresponding input and topology files. Note, that in + case of hydrogen capping, this file has to be modified to also contain the respective + dummy hydrogen atoms. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.COORDINATES')) + + x_cpmd_input_QMMM_COORDINATES_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword COORDINATES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.COORDINATES_options')) + + x_cpmd_input_QMMM_COORDINATES_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword COORDINATES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.COORDINATES_parameters')) + + +class x_cpmd_section_input_QMMM_ELECTROSTATIC_COUPLING(MSection): + ''' + The electrostatic interaction of the quantum system with the classical system is + explicitly kept into account for all classical atoms at a distance $r \\leq + $~\\refspekeyword{RCUT\\_NN}{RCUT-NN} from any quantum atom and for all the MM atoms at + a distance of \\refspekeyword{RCUT\\_NN}{RCUT-NN}~$< r + \\leq$~\\refspekeyword{RCUT\\_MIX}{RCUT-MIX} and a charge larger than $0.1 e_0$ (NN + atoms). MM-atoms with a charge smaller than $0.1 e_0$ and a distance of + \\refspekeyword{RCUT\\_NN}{RCUT-NN}~$< r \\leq$~\\refspekeyword{RCUT\\_MIX}{RCUT-MIX} and + all MM-atoms with \\refspekeyword{RCUT\\_MIX}{RCUT-MIX}~$< r + \\leq$~\\refspekeyword{RCUT\\_ESP}{RCUT-ESP} are coupled to the QM system by a ESP + coupling Hamiltonian (EC atoms). If the additional \\texttt{LONG RANGE} keyword is + specified, the interaction of the QM-system with the rest of the classical atoms is + explicitly kept into account via interacting with a multipole expansion for the QM- + system up to quadrupolar order. A file named \\texttt{MULTIPOLE} is produced. If + \\texttt{LONG RANGE} is omitted the quantum system is coupled to the classical atoms + not in the NN-area and in the EC-area list via the force-field charges. If the + keyword \\texttt{ELECTROSTATIC COUPLING} is omitted, all classical atoms are coupled to + the quantum system by the force-field charges (mechanical coupling). The files + INTERACTING.pdb, TRAJECTORY\\_INTERACTING, MOVIE\\_INTERACTING, TRAJ\\_INT.dcd, and ESP + (or some of them) are created. The list of NN and EC atoms is updated every 100 MD + steps. This can be changed using the keyword \\refkeyword{UPDATE LIST}. The default + values for the cut-offs are RCUT\\_NN=RCUT\\_MIX=RCUT\\_ESP=10 a.u.. These values can be + changed by the keywords \\refspekeyword{RCUT\\_NN}{RCUT-NN}, + \\refspekeyword{RCUT\\_MIX}{RCUT-MIX}, and \\refspekeyword{RCUT\\_ESP}{RCUT-ESP} with + $r_{nn} \\leq r_{mix} \\leq r_{esp}$. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.ELECTROSTATIC_COUPLING')) + + x_cpmd_input_QMMM_ELECTROSTATIC_COUPLING_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ELECTROSTATIC_COUPLING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.ELECTROSTATIC_COUPLING_options')) + + x_cpmd_input_QMMM_ELECTROSTATIC_COUPLING_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ELECTROSTATIC_COUPLING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.ELECTROSTATIC_COUPLING_parameters')) + + +class x_cpmd_section_input_QMMM_ESPWEIGHT(MSection): + ''' + The ESP-charg fit weighting parameter is read from the next line. {\\bf Default} value + is $0.1 e_0$. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.ESPWEIGHT')) + + x_cpmd_input_QMMM_ESPWEIGHT_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ESPWEIGHT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.ESPWEIGHT_options')) + + x_cpmd_input_QMMM_ESPWEIGHT_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ESPWEIGHT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.ESPWEIGHT_parameters')) + + +class x_cpmd_section_input_QMMM_EXCLUSION(MSection): + ''' + Specify charge interactions that should be excluded from the QM/MM hamiltonian. With + the additional flag GROMOS, the exclusions from the Gromos topology are used. With the + additional flag LIST, an explicit list is read from following lines. The format of + that list has the number of exclusions in the first line and then the exclusions + listed in pairs of numbers of the QM atom and the MM atom in Gromos ordering; the + optional flag NORESP in this case requests usage of MM point charges for the QM atoms + instead of the D-RESP charges (default). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.EXCLUSION')) + + x_cpmd_input_QMMM_EXCLUSION_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword EXCLUSION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.EXCLUSION_options')) + + x_cpmd_input_QMMM_EXCLUSION_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword EXCLUSION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.EXCLUSION_parameters')) + + +class x_cpmd_section_input_QMMM_FLEXIBLE_WATER(MSection): + ''' + Convert some solven water molecules into solute molecules and thus using a flexible + potential. With the BONDTYPE flag, the three bond potentials (OH1, OH2, and H1H2) can + be given as index in the BONDTYPE section of the Gromos topology file. Note that the + {\\bf non-bonded} parameters are taken from the SOLVENATOM section of the + \\refkeyword{TOPOLOGY} file. {\\bf Default} is to use the values: 35, 35, 41. With the + additional flag ALL this applies to all solvent water molecules, otherwise on the next + line the number of flexible water molecules has to be given with the Gromos index + numbers of their respective Oxygen atoms on the following line(s). On successful + conversion a new, adapted topology file, MM\\_TOPOLOGY, is written that has to be used + with the \\refkeyword{TOPOLOGY} keyword for subsequent restarts. Also the + \\refkeyword{INPUT} file has to be adapted: in the SYSTEM section the number of solvent + molecules has to be reduced by the number of converted molecules, and in the + SUBMOLECULES section the new solute atoms have to be added accordingly.\\\\ Example: + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.FLEXIBLE_WATER')) + + x_cpmd_input_QMMM_FLEXIBLE_WATER_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword FLEXIBLE_WATER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.FLEXIBLE_WATER_options')) + + x_cpmd_input_QMMM_FLEXIBLE_WATER_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword FLEXIBLE_WATER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.FLEXIBLE_WATER_parameters')) + + +class x_cpmd_section_input_QMMM_GROMOS(MSection): + ''' + A Gromos functional form for the classical force field is used (this is the default). + This keyword is mutually exclusive with the \\refkeyword{AMBER} keyword. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.GROMOS')) + + x_cpmd_input_QMMM_GROMOS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword GROMOS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.GROMOS_options')) + + x_cpmd_input_QMMM_GROMOS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword GROMOS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.GROMOS_parameters')) + + +class x_cpmd_section_input_QMMM_HIRSHFELD(MSection): + ''' + With this option, restraints to Hirshfeld charges~\\cite{Hirshfeld77} can be turned on + or off {\\bf Default} value is ON. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.HIRSHFELD')) + + x_cpmd_input_QMMM_HIRSHFELD_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword HIRSHFELD. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.HIRSHFELD_options')) + + x_cpmd_input_QMMM_HIRSHFELD_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword HIRSHFELD. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.HIRSHFELD_parameters')) + + +class x_cpmd_section_input_QMMM_INPUT(MSection): + ''' + On the next line the name of a Gromos input file has to be given. A short summary of + the input file syntax and some keywords are in section \\ref{sec:qmmm-gromos-inp}. + Note, that it has to be a correct input file, even though many options do not apply + for QM/MM runs. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.INPUT')) + + x_cpmd_input_QMMM_INPUT_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword INPUT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.INPUT_options')) + + x_cpmd_input_QMMM_INPUT_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword INPUT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.INPUT_parameters')) + + +class x_cpmd_section_input_QMMM_MAXNN(MSection): + ''' + Then maximum number of NN atoms, i.e. the number of atoms coupled to the QM system via + \\refkeyword{ELECTROSTATIC COUPLING} is read from the next line. (Note: This keyword + was renamed from MAXNAT in older versions of the QM/MM interface code to avoid + confusion with the MAXNAT keyword in the \\refkeyword{ARRAYSIZES ... END ARRAYSIZES} + block.) {\\bf Default} value is 5000. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.MAXNN')) + + x_cpmd_input_QMMM_MAXNN_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword MAXNN. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.MAXNN_options')) + + x_cpmd_input_QMMM_MAXNN_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword MAXNN. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.MAXNN_parameters')) + + +class x_cpmd_section_input_QMMM_NOSPLIT(MSection): + ''' + If the program is run on more than one node, the MM forces calculation is performed on + all nodes. Since the MM part is not parallelized, this is mostly useful for systems + with a small MM-part and for runs using only very few nodes. Usually the QM part of + the calculation needs the bulk of the cpu-time in the QM/MM. This setting is the + default. See also under \\refkeyword{SPLIT}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.NOSPLIT')) + + x_cpmd_input_QMMM_NOSPLIT_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword NOSPLIT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.NOSPLIT_options')) + + x_cpmd_input_QMMM_NOSPLIT_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword NOSPLIT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.NOSPLIT_parameters')) + + +class x_cpmd_section_input_QMMM_RESTART_TRAJECTORY(MSection): + ''' + Restart the MD with coordinates and velocities from a previous run. With the + additional flag FRAME followed by the frame number the trajectory frame can be + selected. With the flag FILE followed by the name of the trajectory file, the filename + can be set (Default is TRAJECTORY). Finally the flag REVERSE will reverse the sign of + the velocities, so the system will move backwards from the selected point in the + trajecory. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.RESTART_TRAJECTORY')) + + x_cpmd_input_QMMM_RESTART_TRAJECTORY_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword RESTART_TRAJECTORY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.RESTART_TRAJECTORY_options')) + + x_cpmd_input_QMMM_RESTART_TRAJECTORY_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword RESTART_TRAJECTORY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.RESTART_TRAJECTORY_parameters')) + + +class x_cpmd_section_input_QMMM_SAMPLE_INTERACTING(MSection): + ''' + The sampling rate for writing a trajectory of the interacting subsystem is read from + the next line. With the additional keyword OFF or a sampling rate of 0, those + trajectories are not written. The coordinates of the atoms atoms contained in the file + INTERACTING.pdb are written, in the same order, on the file TRAJECTORY\\_INTERACTING + every. If the \\refkeyword{MOVIE} output is turned on, a file MOVIE\\_INTERACTING is + written as well. With the additional keyword DCD the file TRAJ\\_INT.dcd is also + written to. if the sampling rate is negative, then \\textbf{only} the TRAJ\\_INT.dcd is + written. {\\bf Default} value is 5 for MD calculations and OFF for others. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.SAMPLE_INTERACTING')) + + x_cpmd_input_QMMM_SAMPLE_INTERACTING_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword SAMPLE_INTERACTING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.SAMPLE_INTERACTING_options')) + + x_cpmd_input_QMMM_SAMPLE_INTERACTING_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword SAMPLE_INTERACTING. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.SAMPLE_INTERACTING_parameters')) + + +class x_cpmd_section_input_QMMM_SPLIT(MSection): + ''' + If the program is run on more than one node, the MM forces calculation is performed on + a separate node. This is mostly useful for systems with a large MM-part and runs with + many nodes where the accumulated time used for the classical part has a larger impact + on the performace than losing one node for the (in total) much more time consuming QM- + part. {\\bf Default} is \\refkeyword{NOSPLIT}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.SPLIT')) + + x_cpmd_input_QMMM_SPLIT_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword SPLIT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.SPLIT_options')) + + x_cpmd_input_QMMM_SPLIT_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword SPLIT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.SPLIT_parameters')) + + +class x_cpmd_section_input_QMMM_TIMINGS(MSection): + ''' + Display timing information about the various parts of the QM/MM interface code in the + output file. Also a file \\texttt{TIMINGS} with even more details is written. This + option is off by {\\bf default}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.TIMINGS')) + + x_cpmd_input_QMMM_TIMINGS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword TIMINGS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.TIMINGS_options')) + + x_cpmd_input_QMMM_TIMINGS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword TIMINGS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.TIMINGS_parameters')) + + +class x_cpmd_section_input_QMMM_TOPOLOGY(MSection): + ''' + On the next line the name of a Gromos topology file has to be given. Regardless of the + force field, this topology file has to be in Gromos format\\cite{gromos96}. Topologies + created with Amber % or Gromacs (Gromos/OPLS-forcefield) can be converted using the + respective conversion tools shipped with the interface code. A short summary of the + topology file syntax and some keywords are in section \\ref{sec:qmmm-gromos-inp}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.TOPOLOGY')) + + x_cpmd_input_QMMM_TOPOLOGY_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword TOPOLOGY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.TOPOLOGY_options')) + + x_cpmd_input_QMMM_TOPOLOGY_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword TOPOLOGY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.TOPOLOGY_parameters')) + + +class x_cpmd_section_input_QMMM_UPDATE_LIST(MSection): + ''' + On the next line the number of MD steps between updates of the various lists of atoms + for \\refkeyword{ELECTROSTATIC COUPLING} is given. At every list update a file + INTERACTING\\_NEW.pdb is created (and overwritten). {\\bf Default} value is 100. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.UPDATE_LIST')) + + x_cpmd_input_QMMM_UPDATE_LIST_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword UPDATE_LIST. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.UPDATE_LIST_options')) + + x_cpmd_input_QMMM_UPDATE_LIST_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword UPDATE_LIST. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.UPDATE_LIST_parameters')) + + +class x_cpmd_section_input_QMMM_VERBOSE(MSection): + ''' + The progress of the QM/MM simulation is reported more verbosely in the output. This + option is off by {\\bf default}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.VERBOSE')) + + x_cpmd_input_QMMM_VERBOSE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword VERBOSE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.VERBOSE_options')) + + x_cpmd_input_QMMM_VERBOSE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword VERBOSE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.VERBOSE_parameters')) + + +class x_cpmd_section_input_QMMM_WRITE_LOCALTEMP(MSection): + ''' + The Temperatures of the QM subsystem, the MM solute (without the QM atoms) and the + solvent (if present) are calculated separately and writen to the standard output and a + file \\texttt{QM\\_TEMP}. The file has 5 columns containing the QM temperature, the MM + temperature, the solvent temperature (or 0.0 if the solvent is part of the solute), + and the total temperature in that order. With the optional parameters STEP followed by + an integer, this is done only every \\texttt{nfi\\_lt} timesteps. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.WRITE_LOCALTEMP')) + + x_cpmd_input_QMMM_WRITE_LOCALTEMP_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword WRITE_LOCALTEMP. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.WRITE_LOCALTEMP_options')) + + x_cpmd_input_QMMM_WRITE_LOCALTEMP_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword WRITE_LOCALTEMP. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM.WRITE_LOCALTEMP_parameters')) + + +class x_cpmd_section_input_QMMM(MSection): + ''' + Input for Gromos QM/MM interface (see section \\ref{sec:qmmm}). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM')) + + x_cpmd_input_QMMM_default_keyword = Quantity( + type=str, + shape=[], + description=''' + The parameters that are present in the section QMMM even without a keyword. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_QMMM_default_keyword')) + + x_cpmd_section_input_QMMM_AMBER = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM_AMBER'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.AMBER')) + + x_cpmd_section_input_QMMM_BOX_TOLERANCE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM_BOX_TOLERANCE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.BOX_TOLERANCE')) + + x_cpmd_section_input_QMMM_BOX_WALLS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM_BOX_WALLS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.BOX_WALLS')) + + x_cpmd_section_input_QMMM_CAPPING = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM_CAPPING'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.CAPPING')) + + x_cpmd_section_input_QMMM_COORDINATES = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM_COORDINATES'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.COORDINATES')) + + x_cpmd_section_input_QMMM_ELECTROSTATIC_COUPLING = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM_ELECTROSTATIC_COUPLING'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.ELECTROSTATIC_COUPLING')) + + x_cpmd_section_input_QMMM_ESPWEIGHT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM_ESPWEIGHT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.ESPWEIGHT')) + + x_cpmd_section_input_QMMM_EXCLUSION = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM_EXCLUSION'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.EXCLUSION')) + + x_cpmd_section_input_QMMM_FLEXIBLE_WATER = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM_FLEXIBLE_WATER'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.FLEXIBLE_WATER')) + + x_cpmd_section_input_QMMM_GROMOS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM_GROMOS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.GROMOS')) + + x_cpmd_section_input_QMMM_HIRSHFELD = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM_HIRSHFELD'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.HIRSHFELD')) + + x_cpmd_section_input_QMMM_INPUT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM_INPUT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.INPUT')) + + x_cpmd_section_input_QMMM_MAXNN = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM_MAXNN'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.MAXNN')) + + x_cpmd_section_input_QMMM_NOSPLIT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM_NOSPLIT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.NOSPLIT')) + + x_cpmd_section_input_QMMM_RESTART_TRAJECTORY = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM_RESTART_TRAJECTORY'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.RESTART_TRAJECTORY')) + + x_cpmd_section_input_QMMM_SAMPLE_INTERACTING = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM_SAMPLE_INTERACTING'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.SAMPLE_INTERACTING')) + + x_cpmd_section_input_QMMM_SPLIT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM_SPLIT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.SPLIT')) + + x_cpmd_section_input_QMMM_TIMINGS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM_TIMINGS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.TIMINGS')) + + x_cpmd_section_input_QMMM_TOPOLOGY = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM_TOPOLOGY'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.TOPOLOGY')) + + x_cpmd_section_input_QMMM_UPDATE_LIST = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM_UPDATE_LIST'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.UPDATE_LIST')) + + x_cpmd_section_input_QMMM_VERBOSE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM_VERBOSE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.VERBOSE')) + + x_cpmd_section_input_QMMM_WRITE_LOCALTEMP = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM_WRITE_LOCALTEMP'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM.WRITE_LOCALTEMP')) + + +class x_cpmd_section_input_RESP_DISCARD(MSection): + ''' + Request to discard trivial modes in vibrational analysis from linear response (both + \\refkeyword{PHONON} and \\refkeyword{LANCZOS}). {\\bf OFF} = argument for performing no + projection. {\\bf PARTIAL} = argument for projecting out only translations (this is the + default). {\\bf TOTAL} = argument for projecting both rotations and translations. {\\bf + LINEAR} = argument for projecting rotations around the $C - \\infty$ axis in a linear + molecule (not implemented yet). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.DISCARD')) + + x_cpmd_input_RESP_DISCARD_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DISCARD. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.DISCARD_options')) + + x_cpmd_input_RESP_DISCARD_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DISCARD. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.DISCARD_parameters')) + + +class x_cpmd_section_input_RESP_EIGENSYSTEM(MSection): + ''' + Not documented. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.EIGENSYSTEM')) + + x_cpmd_input_RESP_EIGENSYSTEM_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword EIGENSYSTEM. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.EIGENSYSTEM_options')) + + x_cpmd_input_RESP_EIGENSYSTEM_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword EIGENSYSTEM. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.EIGENSYSTEM_parameters')) + + +class x_cpmd_section_input_RESP_EPR(MSection): + ''' + Calculate the EPR $g$ tensor for the system. This routine accepts most, if not all, of + the options available in the NMR routine (RESTART, NOSMOOTH, NOVIRTUAL, PSI0, RHO0, + OVERLAP and FULL). Most important new options are: {\\bf FULL SMART}: does a + calculation with improved accuracy. A threshold value (between 0 and 1) must be + present on the next line. The higher the threshold value, the lower the computational + cost, but this will also reduce the accuracy (a bit). Typically, a value of 0.05 + should be fine. {\\bf OWNOPT}: for the calculation of the $g$ tensor, an effective + potential is needed. By default, the EPR routine uses the local potential ($V_{LOC} = + V_{PP,LOC} + V_{HARTREE} + V_{XC}$). This works well with Goedecker pseudopotentials, + but rather poor with Troullier-Martins pseudopotentials. When using this option, the + following potential is used instead: $$ V_{EFF} = -\\frac{Z}{r}\\mathrm{erf}(r/r_c) + + V_{HARTREE} + V_{XC} $$ and $r_c$ (greater than 0) is read on the next line. {\\bf + HYP}: calculates the hyperfine tensors. See epr\\_hyp.F for details. Contact + Reinout.Declerck@UGent.be should you require further information. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.EPR')) + + x_cpmd_input_RESP_EPR_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword EPR. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.EPR_options')) + + x_cpmd_input_RESP_EPR_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword EPR. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.EPR_parameters')) + + +class x_cpmd_section_input_RESP_FUKUI(MSection): + ''' + Calculates the response to a change of occupation number of chosen orbitals. The + indices of these orbitals are read from the following nf lines ({\\bf default nf=1}). + The orbitals themselves are not read from any \\refkeyword{RESTART} file but from + WAVEFUNCTION.* files generated with \\refkeyword{RHOOUT} in the \\&CPMD section; to + recall this the orbital numbers have to be negative, just like for the + \\refkeyword{RHOOUT} keyword. A weight can be associated with each orbital if given + just after the orbital number, on the same line. It corresponds to saying how many + electrons are put in or taken from the orbital. For example; + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.FUKUI')) + + x_cpmd_input_RESP_FUKUI_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword FUKUI. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.FUKUI_options')) + + x_cpmd_input_RESP_FUKUI_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword FUKUI. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.FUKUI_parameters')) + + +class x_cpmd_section_input_RESP_HARDNESS(MSection): + ''' + Not documented. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.HARDNESS')) + + x_cpmd_input_RESP_HARDNESS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword HARDNESS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.HARDNESS_options')) + + x_cpmd_input_RESP_HARDNESS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword HARDNESS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.HARDNESS_parameters')) + + +class x_cpmd_section_input_RESP_INTERACTION(MSection): + ''' + Not documented. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.INTERACTION')) + + x_cpmd_input_RESP_INTERACTION_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword INTERACTION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.INTERACTION_options')) + + x_cpmd_input_RESP_INTERACTION_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword INTERACTION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.INTERACTION_parameters')) + + +class x_cpmd_section_input_RESP_KEEPREALSPACE(MSection): + ''' + Like the standard CPMD option, this keeps the C0 ground state wavefunctions in the + direct space representation during the calculation. Can save a lot of time, but is + incredibly memory intensive. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.KEEPREALSPACE')) + + x_cpmd_input_RESP_KEEPREALSPACE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword KEEPREALSPACE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.KEEPREALSPACE_options')) + + x_cpmd_input_RESP_KEEPREALSPACE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword KEEPREALSPACE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.KEEPREALSPACE_parameters')) + + +class x_cpmd_section_input_RESP_KPERT(MSection): + ''' + \\label{sec:kpert + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.KPERT')) + + x_cpmd_input_RESP_KPERT_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword KPERT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.KPERT_options')) + + x_cpmd_input_RESP_KPERT_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword KPERT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.KPERT_parameters')) + + +class x_cpmd_section_input_RESP_LANCZOS(MSection): + ''' + lanczos\\_dim iterations conv\\_threshold lanczos\\_dim= dimension of the vibrational + d.o.f. iterations = no. of iterations desired for this run conv\\_threshold = threshold + for convergence on eigenvectors CONTINUE = argument for continuing Lanczos + diagonalization from a previous run (reads file LANCZOS\\_CONTINUE) DETAILS = argument + for verbosity. prints a lot of stuff + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.LANCZOS')) + + x_cpmd_input_RESP_LANCZOS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword LANCZOS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.LANCZOS_options')) + + x_cpmd_input_RESP_LANCZOS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword LANCZOS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.LANCZOS_parameters')) + + +class x_cpmd_section_input_RESP_NMR(MSection): + ''' + Calculate the NMR chemical shielding tensors for the system. Most important option: + FULL, does a calculation with improved accuracy for periodic systems but takes a lot + of time. Isolated systems: Use OVERLAP and 0.1 (on next line) for the same effect. + \\textit{Be careful for non-hydrogen nuclei.} The shielding is calculated without + contribution from the core electrons. Contact sebastia@mpip-mainz.mpg.de for further + details. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.NMR')) + + x_cpmd_input_RESP_NMR_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword NMR. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.NMR_options')) + + x_cpmd_input_RESP_NMR_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword NMR. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.NMR_parameters')) + + +class x_cpmd_section_input_RESP_NOOPT(MSection): + ''' + Do not perform a ground state wfn optimization. Be sure the restarted wfn is at the + BO-surface. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.NOOPT')) + + x_cpmd_input_RESP_NOOPT_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword NOOPT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.NOOPT_options')) + + x_cpmd_input_RESP_NOOPT_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword NOOPT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.NOOPT_parameters')) + + +class x_cpmd_section_input_RESP_OACP(MSection): + ''' + Not documented. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.OACP')) + + x_cpmd_input_RESP_OACP_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword OACP. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.OACP_options')) + + x_cpmd_input_RESP_OACP_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword OACP. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.OACP_parameters')) + + +class x_cpmd_section_input_RESP_PHONON(MSection): + ''' + Calculate the harmonic frequencies from perturbation theory. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.PHONON')) + + x_cpmd_input_RESP_PHONON_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword PHONON. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.PHONON_options')) + + x_cpmd_input_RESP_PHONON_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword PHONON. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.PHONON_parameters')) + + +class x_cpmd_section_input_RESP_POLAK(MSection): + ''' + Uses the Polak-Ribiere formula for the conjugate gradient algorithm. Can be safer in + the convergence. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.POLAK')) + + x_cpmd_input_RESP_POLAK_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword POLAK. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.POLAK_options')) + + x_cpmd_input_RESP_POLAK_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword POLAK. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.POLAK_parameters')) + + +class x_cpmd_section_input_RESP_RAMAN(MSection): + ''' + Calculate the polarizability (also in periodic systems) as well as Born-charges and + dipole moment. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.RAMAN')) + + x_cpmd_input_RESP_RAMAN_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword RAMAN. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.RAMAN_options')) + + x_cpmd_input_RESP_RAMAN_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword RAMAN. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.RAMAN_parameters')) + + +class x_cpmd_section_input_RESP_TIGHTPREC(MSection): + ''' + Uses a harder preconditioner. For experts: The Hamiltonian is approximated by the + kinetic energy, the G-diagonal Coulomb potential and the KS-energies. The number + obtained this way must not be close to zero. This is achieved by smoothing it with + This is achieved by smoothing it with $$x \\to f(x) = \\sqrt{x^2 + \\epsilon^2} \\; \\; + [{\\rm default}] $$ or $$x \\to f(x) = (x^2 + \\epsilon ^2)/x \\; \\; [{\\rm this \\; + option}] $$ The HARD option conserves the sign of the approximate Hamiltonian whereas + the default formula does never diverge. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.TIGHTPREC')) + + x_cpmd_input_RESP_TIGHTPREC_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword TIGHTPREC. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.TIGHTPREC_options')) + + x_cpmd_input_RESP_TIGHTPREC_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword TIGHTPREC. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP.TIGHTPREC_parameters')) + + +class x_cpmd_section_input_RESP(MSection): + ''' + Response calculations + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP')) + + x_cpmd_input_RESP_default_keyword = Quantity( + type=str, + shape=[], + description=''' + The parameters that are present in the section RESP even without a keyword. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_RESP_default_keyword')) + + x_cpmd_section_input_RESP_DISCARD = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_RESP_DISCARD'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.DISCARD')) + + x_cpmd_section_input_RESP_EIGENSYSTEM = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_RESP_EIGENSYSTEM'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.EIGENSYSTEM')) + + x_cpmd_section_input_RESP_EPR = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_RESP_EPR'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.EPR')) + + x_cpmd_section_input_RESP_FUKUI = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_RESP_FUKUI'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.FUKUI')) + + x_cpmd_section_input_RESP_HARDNESS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_RESP_HARDNESS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.HARDNESS')) + + x_cpmd_section_input_RESP_INTERACTION = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_RESP_INTERACTION'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.INTERACTION')) + + x_cpmd_section_input_RESP_KEEPREALSPACE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_RESP_KEEPREALSPACE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.KEEPREALSPACE')) + + x_cpmd_section_input_RESP_KPERT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_RESP_KPERT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.KPERT')) + + x_cpmd_section_input_RESP_LANCZOS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_RESP_LANCZOS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.LANCZOS')) + + x_cpmd_section_input_RESP_NMR = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_RESP_NMR'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.NMR')) + + x_cpmd_section_input_RESP_NOOPT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_RESP_NOOPT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.NOOPT')) + + x_cpmd_section_input_RESP_OACP = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_RESP_OACP'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.OACP')) + + x_cpmd_section_input_RESP_PHONON = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_RESP_PHONON'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.PHONON')) + + x_cpmd_section_input_RESP_POLAK = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_RESP_POLAK'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.POLAK')) + + x_cpmd_section_input_RESP_RAMAN = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_RESP_RAMAN'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.RAMAN')) + + x_cpmd_section_input_RESP_TIGHTPREC = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_RESP_TIGHTPREC'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP.TIGHTPREC')) + + +class x_cpmd_section_input_SYSTEM_ACCEPTOR(MSection): + ''' + Set the \\refkeyword{CDFT} acceptor atoms. Parameter NACCR must be specified next to + the keyword. NACCR $\\in [1,2,...,N]$ is the number of acceptor Atoms ($N$ being the + total number of atoms). The indices of NACCR atoms separated by whitespaces are read + from the next line. {\\bf HDASINGLE} \\defaultvalue{off} if set together with CDFT HDA, + CPMD performs a constrained HDA calculation with only an ACCEPTOR group weight but + different constraint values $N_\\text{c}$. {\\bf WMULT} \\defaultvalue{off} if set + together with CDFT HDA, CPMD performs a constrained HDA calculation with two different + an ACCEPTOR group weights for the two states. {\\bf HDASINGLE} and {\\bf WMULT} are + mutually exclusive. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.ACCEPTOR')) + + x_cpmd_input_SYSTEM_ACCEPTOR_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ACCEPTOR. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.ACCEPTOR_options')) + + x_cpmd_input_SYSTEM_ACCEPTOR_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ACCEPTOR. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.ACCEPTOR_parameters')) + + +class x_cpmd_section_input_SYSTEM_ANGSTROM(MSection): + ''' + The atomic coordinates and the supercell parameters and several other parameters are + read in {\\AA}ngs\\-troms. + + {\\bf Default} is {\\bf atomic units} which are always used internally. Not supported + for \\refkeyword{QMMM} calculations. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.ANGSTROM')) + + x_cpmd_input_SYSTEM_ANGSTROM_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ANGSTROM. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.ANGSTROM_options')) + + x_cpmd_input_SYSTEM_ANGSTROM_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ANGSTROM. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.ANGSTROM_parameters')) + + +class x_cpmd_section_input_SYSTEM_CELL(MSection): + ''' + The parameters specifying the super cell are read from the next line. Six numbers in + the following order have to be provided: $a$, $b/a$, $c/a$, $\\cos \\alpha$, $\\cos + \\beta$, $\\cos \\gamma$. For cubic phases, $a$ is the lattice parameter. CPMD will check + those values, unless you turn off the test via \\refkeyword{CHECK SYMMETRY}. With the + keyword {\\bf ABSOLUTE}, you give $a$, $b$ and $c$. With the keyword {\\bf DEGREE}, you + provide $\\alpha$, $\\beta$ and $\\gamma$ in degrees instead of their cosine. With the + keyword {\\bf VECTORS}, the lattice vectors $a1$, $a2$, $a3$ are read from the next + line instead of the 6 numbers. In this case the {\\bf SYMMETRY} keyword is not used. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.CELL')) + + x_cpmd_input_SYSTEM_CELL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CELL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.CELL_options')) + + x_cpmd_input_SYSTEM_CELL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CELL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.CELL_parameters')) + + +class x_cpmd_section_input_SYSTEM_CHARGE(MSection): + ''' + The total charge of the system is read from the next line. \\textbf{Default} is + \\defaultvalue{0}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.CHARGE')) + + x_cpmd_input_SYSTEM_CHARGE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CHARGE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.CHARGE_options')) + + x_cpmd_input_SYSTEM_CHARGE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CHARGE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.CHARGE_parameters')) + + +class x_cpmd_section_input_SYSTEM_CHECK_SYMMETRY(MSection): + ''' + The precision with which the conformance of the \\refkeyword{CELL} parameters are + checked against the (supercell) \\refkeyword{SYMMETRY} is read from the next line. With + older versions of CPMD, redundant variables could be set to arbitrary values; now + \\textbf{all} values have to conform. If you want the old behavior back, you can turn + the check off by adding the keyword {\\bf OFF} or by providing a negative precision. + \\textbf{Default} value is: \\defaultvalue{1.0e-4} + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.CHECK_SYMMETRY')) + + x_cpmd_input_SYSTEM_CHECK_SYMMETRY_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CHECK_SYMMETRY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.CHECK_SYMMETRY_options')) + + x_cpmd_input_SYSTEM_CHECK_SYMMETRY_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CHECK_SYMMETRY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.CHECK_SYMMETRY_parameters')) + + +class x_cpmd_section_input_SYSTEM_CLASSICAL_CELL(MSection): + ''' + Not documented. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.CLASSICAL_CELL')) + + x_cpmd_input_SYSTEM_CLASSICAL_CELL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CLASSICAL_CELL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.CLASSICAL_CELL_options')) + + x_cpmd_input_SYSTEM_CLASSICAL_CELL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CLASSICAL_CELL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.CLASSICAL_CELL_parameters')) + + +class x_cpmd_section_input_SYSTEM_CLUSTER(MSection): + ''' + Isolated system such as a molecule or a cluster. Same effect as \\refkeyword{SYMMETRY} + 0, but allows a non-orthorhombic cell. Only rarely useful. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.CLUSTER')) + + x_cpmd_input_SYSTEM_CLUSTER_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CLUSTER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.CLUSTER_options')) + + x_cpmd_input_SYSTEM_CLUSTER_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CLUSTER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.CLUSTER_parameters')) + + +class x_cpmd_section_input_SYSTEM_CONSTANT_CUTOFF(MSection): + ''' + Apply a cutoff function to the kinetic energy term~\\cite{bernasconi95} in order to + simulate constant cutoff dynamics. The parameters $A$, $\\sigma$ and $E_o$ are read + from the next line (all quantities have to be given in Rydbergs). $$ G^2 \\to G^2 + A + \\left[ 1 + \\mbox{erf} \\left( {\\frac{1}{2} G^2 - \\frac{E_o}{\\sigma}} \\right) \\right] + $$ + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.CONSTANT_CUTOFF')) + + x_cpmd_input_SYSTEM_CONSTANT_CUTOFF_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CONSTANT_CUTOFF. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.CONSTANT_CUTOFF_options')) + + x_cpmd_input_SYSTEM_CONSTANT_CUTOFF_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CONSTANT_CUTOFF. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.CONSTANT_CUTOFF_parameters')) + + +class x_cpmd_section_input_SYSTEM_COUPLINGS_LINRES(MSection): + ''' + Calculate non-adiabatic couplings~\\cite{nonadiabatic} using linear-response theory. + With BRUTE FORCE, the linear response to the nuclear displacements along all Cartesian + coordinates is calculated. With NVECT=$n$, at most $n$ cycles of the iterative scheme + in \\cite{nonadiabatic} are performed. However, the iterative calculation is also + stopped earlier if its contribution to the non-adiabatic coupling vector is smaller a + given tolerance (TOL=$C_{\\mathrm{tol}}$). In the case of the iterative scheme, also + the option THR can be given, followed by three lines each containing a pair of a + threshold contribution to the non-adiabatic coupling vector and a tolerance for the + linear-response wavefunction (see \\cite{nonadiabatic}). Do not forget to include a + \\&LINRES section in the input, even if the defaults are used. See + \\refkeyword{COUPLINGS NSURF}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.COUPLINGS_LINRES')) + + x_cpmd_input_SYSTEM_COUPLINGS_LINRES_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword COUPLINGS_LINRES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.COUPLINGS_LINRES_options')) + + x_cpmd_input_SYSTEM_COUPLINGS_LINRES_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword COUPLINGS_LINRES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.COUPLINGS_LINRES_parameters')) + + +class x_cpmd_section_input_SYSTEM_COUPLINGS_NSURF(MSection): + ''' + Required for non-adiabatic couplings: the Kohn-Sham states involved in the transition. + For the moment, only one pair of states makes sense, NSURF=1. On the following line, + the orbital numbers of the two Kohn-Sham states and a weight of 1.0 are expected. For + singlet-singlet transitions, the ROKS-based Slater transition-state density + (\\refkeyword{LOW SPIN EXCITATION LSETS}) should be used. For doublet-doublet + transitions, the local spin-density approximation (\\refkeyword{LSD}) with the + occupation numbers (\\refkeyword{OCCUPATION}, \\refkeyword{NSUP}, \\refkeyword{STATES}) + of the corresponding Slater transition-state density should be used. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.COUPLINGS_NSURF')) + + x_cpmd_input_SYSTEM_COUPLINGS_NSURF_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword COUPLINGS_NSURF. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.COUPLINGS_NSURF_options')) + + x_cpmd_input_SYSTEM_COUPLINGS_NSURF_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword COUPLINGS_NSURF. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.COUPLINGS_NSURF_parameters')) + + +class x_cpmd_section_input_SYSTEM_COUPLINGS(MSection): + ''' + Calculate non-adiabatic couplings~\\cite{nonadiabatic} using finite differences (FD and + PROD are two different finite-difference approximations). The displacement $\\epsilon$ + is expected in atomic units. If NAT=$n$ is given, the coupling vector acting on only a + subset of $n$ atoms is calculated. In this case, a line containing $n$ atom sequence + numbers is expected. See \\refkeyword{COUPLINGS NSURF}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.COUPLINGS')) + + x_cpmd_input_SYSTEM_COUPLINGS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword COUPLINGS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.COUPLINGS_options')) + + x_cpmd_input_SYSTEM_COUPLINGS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword COUPLINGS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.COUPLINGS_parameters')) + + +class x_cpmd_section_input_SYSTEM_CUTOFF(MSection): + ''' + The {\\bf cutoff} for the plane wave basis in {\\bf Rydberg} is read from the next line. + The keyword {\\bf SPHERICAL} is used with k points in order to have $|g + k|^2 < + E_{cut}$ instead of $|g|^2 < E_{cut}$. This is the default. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.CUTOFF')) + + x_cpmd_input_SYSTEM_CUTOFF_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword CUTOFF. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.CUTOFF_options')) + + x_cpmd_input_SYSTEM_CUTOFF_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword CUTOFF. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.CUTOFF_parameters')) + + +class x_cpmd_section_input_SYSTEM_DENSITY_CUTOFF(MSection): + ''' + Set the plane wave energy cutoff for the density. The value is read from the next + line. The density cutoff is usally automatically determined from the wavefunction + \\refkeyword{CUTOFF} via the \\refkeyword{DUAL} factor. With the additional flag {\\bf + NUMBER} the number of plane waves can be specified directly. This is useful to + calculate bulk modulus or properties depending on the volume. The given energy cutoff + has to be bigger than the one to have the required plane wave density number. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.DENSITY_CUTOFF')) + + x_cpmd_input_SYSTEM_DENSITY_CUTOFF_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DENSITY_CUTOFF. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.DENSITY_CUTOFF_options')) + + x_cpmd_input_SYSTEM_DENSITY_CUTOFF_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DENSITY_CUTOFF. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.DENSITY_CUTOFF_parameters')) + + +class x_cpmd_section_input_SYSTEM_DONOR(MSection): + ''' + Set the \\refkeyword{CDFT} donor atoms. Parameter NACCR must be specified next to the + keyword. NDON $\\in \\mathbb{R}_+$ is the number of Donor Atoms ($N$ being the total + number of atoms). If NDON$>0$ the indices of NDON atoms separated by whitespaces are + read from the next line else only use an Acceptor group in the CDFT weight. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.DONOR')) + + x_cpmd_input_SYSTEM_DONOR_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DONOR. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.DONOR_options')) + + x_cpmd_input_SYSTEM_DONOR_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DONOR. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.DONOR_parameters')) + + +class x_cpmd_section_input_SYSTEM_DUAL(MSection): + ''' + The ratio between the wavefunction energy \\refkeyword{CUTOFF} and the + \\refkeyword{DENSITY CUTOFF} is read from the next line. + + {\\bf Default} is {\\bf 4}. + + There is little need to change this parameter, except when using ultra-soft + pseudopotentials, where the wavefunction cutoff is very low and the corresponding + density cutoff is too low to represent the augmentation charges accurately. In order + to maintain good energy conservation and have good convergens of wavefunctions and + related parameters, {\\bf DUAL} needs to be increased to values of 6--10. Warning: You + can have some trouble if you use the {\\bf DUAL} option with the symmetrization of the + electronic density. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.DUAL')) + + x_cpmd_input_SYSTEM_DUAL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DUAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.DUAL_options')) + + x_cpmd_input_SYSTEM_DUAL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DUAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.DUAL_parameters')) + + +class x_cpmd_section_input_SYSTEM_ENERGY_PROFILE(MSection): + ''' + Perform an energy profile calculation at the end of a wavefunction optimization using + the ROKS or ROSS methods. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.ENERGY_PROFILE')) + + x_cpmd_input_SYSTEM_ENERGY_PROFILE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ENERGY_PROFILE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.ENERGY_PROFILE_options')) + + x_cpmd_input_SYSTEM_ENERGY_PROFILE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ENERGY_PROFILE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.ENERGY_PROFILE_parameters')) + + +class x_cpmd_section_input_SYSTEM_EXTERNAL_FIELD(MSection): + ''' + Applies an external electric field to the system using the Berry phase. The electric + field vector in AU is read from the next line. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.EXTERNAL_FIELD')) + + x_cpmd_input_SYSTEM_EXTERNAL_FIELD_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword EXTERNAL_FIELD. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.EXTERNAL_FIELD_options')) + + x_cpmd_input_SYSTEM_EXTERNAL_FIELD_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword EXTERNAL_FIELD. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.EXTERNAL_FIELD_parameters')) + + +class x_cpmd_section_input_SYSTEM_HFX_CUTOFF(MSection): + ''' + Set an additional cutoff for wavefunctionand density to be used in the calculation of + exact exchange. Cutoffs for wavefunctions and densities are read from the next line in + Rydberg units. Defaults are the same cutoffs as for the normal calculation. Only lower + cutoffs than the defaults can be specified. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.HFX_CUTOFF')) + + x_cpmd_input_SYSTEM_HFX_CUTOFF_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword HFX_CUTOFF. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.HFX_CUTOFF_options')) + + x_cpmd_input_SYSTEM_HFX_CUTOFF_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword HFX_CUTOFF. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.HFX_CUTOFF_parameters')) + + +class x_cpmd_section_input_SYSTEM_ISOTROPIC_CELL(MSection): + ''' + Specifies a constraint on the super cell in constant pressure dynamics or geometry + optimization. The shape of the cell is held fixed, only the volume changes. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.ISOTROPIC_CELL')) + + x_cpmd_input_SYSTEM_ISOTROPIC_CELL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ISOTROPIC_CELL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.ISOTROPIC_CELL_options')) + + x_cpmd_input_SYSTEM_ISOTROPIC_CELL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ISOTROPIC_CELL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.ISOTROPIC_CELL_parameters')) + + +class x_cpmd_section_input_SYSTEM_KPOINTS(MSection): + ''' + With no option, read in the next line with the number of k-points and for each + k-point, read the components in the Cartesian coordinates (units~$2\\pi/a$) and the + weight. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.KPOINTS')) + + x_cpmd_input_SYSTEM_KPOINTS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword KPOINTS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.KPOINTS_options')) + + x_cpmd_input_SYSTEM_KPOINTS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword KPOINTS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.KPOINTS_parameters')) + + +class x_cpmd_section_input_SYSTEM_LOW_SPIN_EXCITATION_LSETS(MSection): + ''' + Slater transition-state density with restricted open-shell Kohn-Sham (low spin excited + state). Currently works only with ROKS but not with ROSS, ROOTHAAN, or CAS22. See + Ref.~\\cite{lsets}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.LOW_SPIN_EXCITATION_LSETS')) + + x_cpmd_input_SYSTEM_LOW_SPIN_EXCITATION_LSETS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword LOW_SPIN_EXCITATION_LSETS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.LOW_SPIN_EXCITATION_LSETS_options')) + + x_cpmd_input_SYSTEM_LOW_SPIN_EXCITATION_LSETS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword LOW_SPIN_EXCITATION_LSETS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.LOW_SPIN_EXCITATION_LSETS_parameters')) + + +class x_cpmd_section_input_SYSTEM_LOW_SPIN_EXCITATION(MSection): + ''' + Use the low spin excited state functional~\\cite{Frank98}. For ROKS calculations, see + also the \\refkeyword{ROKS} keyword in the \\&CPMD-section. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.LOW_SPIN_EXCITATION')) + + x_cpmd_input_SYSTEM_LOW_SPIN_EXCITATION_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword LOW_SPIN_EXCITATION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.LOW_SPIN_EXCITATION_options')) + + x_cpmd_input_SYSTEM_LOW_SPIN_EXCITATION_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword LOW_SPIN_EXCITATION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.LOW_SPIN_EXCITATION_parameters')) + + +class x_cpmd_section_input_SYSTEM_LSE_PARAMETERS(MSection): + ''' + Determines the energy expression used in LSE calculations. The two parameters LSEA and + LSEB are read from the next line. \\[E = \\mbox{LSEA} \\cdot E(Mixed) + \\mbox{LSEB} \\cdot + E(Triplet)\\] The default (LSEA $= 2$ and LSEB $= 1$) corresponds to singlet symmetry. + For the lowest triplet state, the \\refkeyword{LSE PARAMETERS} must be set to 0 and 1 + (zero times mixed state plus triplet). See ref \\cite{Frank98} for a description of the + method. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.LSE_PARAMETERS')) + + x_cpmd_input_SYSTEM_LSE_PARAMETERS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword LSE_PARAMETERS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.LSE_PARAMETERS_options')) + + x_cpmd_input_SYSTEM_LSE_PARAMETERS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword LSE_PARAMETERS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.LSE_PARAMETERS_parameters')) + + +class x_cpmd_section_input_SYSTEM_MESH(MSection): + ''' + The number of {\\bf real space mesh} points in $x-$, $y-$ and $z-$direction is read + from the next line. If the values provided by the user are not compatible with the + plane-wave cutoff or the requirements of the FFT routines the program chooses the next + bigger valid numbers. {\\bf Default} are the {\\bf minimal values} compatible with the + energy cutoff and the {\\bf FFT} requirements. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.MESH')) + + x_cpmd_input_SYSTEM_MESH_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword MESH. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.MESH_options')) + + x_cpmd_input_SYSTEM_MESH_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword MESH. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.MESH_parameters')) + + +class x_cpmd_section_input_SYSTEM_MULTIPLICITY(MSection): + ''' + This keyword only applies to LSD calculations. The multiplicity (2$S$+1) is read from + the next line. {\\bf Default} is the {\\bf smallest possible} multiplicity. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.MULTIPLICITY')) + + x_cpmd_input_SYSTEM_MULTIPLICITY_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword MULTIPLICITY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.MULTIPLICITY_options')) + + x_cpmd_input_SYSTEM_MULTIPLICITY_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword MULTIPLICITY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.MULTIPLICITY_parameters')) + + +class x_cpmd_section_input_SYSTEM_NSUP(MSection): + ''' + The number of states of the same spin as the first state is read from the next line. + This keyword makes only sense in spin-polarized calculations (keyword + \\refkeyword{LSD}). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.NSUP')) + + x_cpmd_input_SYSTEM_NSUP_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword NSUP. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.NSUP_options')) + + x_cpmd_input_SYSTEM_NSUP_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword NSUP. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.NSUP_parameters')) + + +class x_cpmd_section_input_SYSTEM_OCCUPATION(MSection): + ''' + The occupation numbers are read from the next line. This keyword must be preceeded by + \\refkeyword{STATES}. The FIXED option fixes the occupation numbers for the + diagonalization scheme, otherwise this option is meaningless. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.OCCUPATION')) + + x_cpmd_input_SYSTEM_OCCUPATION_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword OCCUPATION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.OCCUPATION_options')) + + x_cpmd_input_SYSTEM_OCCUPATION_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword OCCUPATION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.OCCUPATION_parameters')) + + +class x_cpmd_section_input_SYSTEM_POINT_GROUP(MSection): + ''' + The point group symmetry of the system can be specified in the next line. With the + keyword {\\sl AUTO} in the next line, the space group is determined automatically. This + affects the calculation of nuclear forces and ionic positions. The electronic density + and nuclear forces are symmetrized in function of point group symmetry. The group + number is read from the next line. Crystal symmetry groups: + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.POINT_GROUP')) + + x_cpmd_input_SYSTEM_POINT_GROUP_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword POINT_GROUP. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.POINT_GROUP_options')) + + x_cpmd_input_SYSTEM_POINT_GROUP_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword POINT_GROUP. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.POINT_GROUP_parameters')) + + +class x_cpmd_section_input_SYSTEM_POISSON_SOLVER(MSection): + ''' + This keyword determines the method for the solution of the Poisson equation for + isolated systems. Either Hockney's method~\\cite{Hockney70} or Martyna and Tuckerman's + method~\\cite{Martyna99} is used. The smoothing parameter (for Hockney's method) or $L + \\times \\alpha$ for Tuckerman's method can be read from the next line using the {\\bf + PARAMETER} keyword. For more information about the usage of this parameter see also + section \\ref{hints:symm0}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.POISSON_SOLVER')) + + x_cpmd_input_SYSTEM_POISSON_SOLVER_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword POISSON_SOLVER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.POISSON_SOLVER_options')) + + x_cpmd_input_SYSTEM_POISSON_SOLVER_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword POISSON_SOLVER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.POISSON_SOLVER_parameters')) + + +class x_cpmd_section_input_SYSTEM_POLYMER(MSection): + ''' + Assume {\\bf periodic boundary} condition in {\\bf $x$-direction}. % You also need + to set the 'cluster option' (i.e. \\refkeyword{SYMMETRY} 0). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.POLYMER')) + + x_cpmd_input_SYSTEM_POLYMER_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword POLYMER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.POLYMER_options')) + + x_cpmd_input_SYSTEM_POLYMER_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword POLYMER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.POLYMER_parameters')) + + +class x_cpmd_section_input_SYSTEM_PRESSURE(MSection): + ''' + The {\\bf external pressure} on the system is read from the next line (in {\\bf kbar}). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.PRESSURE')) + + x_cpmd_input_SYSTEM_PRESSURE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword PRESSURE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.PRESSURE_options')) + + x_cpmd_input_SYSTEM_PRESSURE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword PRESSURE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.PRESSURE_parameters')) + + +class x_cpmd_section_input_SYSTEM_REFERENCE_CELL(MSection): + ''' + This cell is used to calculate the Miller indices in a constant pressure simulation. + This keyword is only active together with the option {\\bf PARRINELLO-RAHMAN}. The + parameters specifying the reference (super) cell are read from the next line. Six + numbers in the following order have to be provided: $a$, $b/a$, $c/a$, $\\cos \\alpha$, + $\\cos \\beta$, $\\cos \\gamma$. The keywords {\\bf ABSOLUTE} and {\\bf DEGREE } are + described in {\\bf CELL} option. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.REFERENCE_CELL')) + + x_cpmd_input_SYSTEM_REFERENCE_CELL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword REFERENCE_CELL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.REFERENCE_CELL_options')) + + x_cpmd_input_SYSTEM_REFERENCE_CELL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword REFERENCE_CELL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.REFERENCE_CELL_parameters')) + + +class x_cpmd_section_input_SYSTEM_SCALE(MSection): + ''' + {\\bf Scale atomic coordinates} of the system with the lattice constants (see {\\bf + CELL}). You can indicate an additional scale for each axis with the options {\\bf SX}, + {\\bf SY} and {\\bf SZ}. For instance, if you indicate SX=sxscale, you give your + x-coordinates between $0.$ and sxscale (by default $1.$). This is useful when you use + many primitive cells. With the keyword {\\bf CARTESIAN}, you specify that the given + coordinates are in Cartesian basis, otherwise the default with the {\\bf SCALE} option + is in direct lattice basis. In all cases, the coordinates are multiplied by the + lattice constants. If this keyword is present an output file GEOMETRY.scale is + written. This file contains the lattice vectors in \\AA and atomic units together with + the atomic coordinates in the direct lattice basis. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.SCALE')) + + x_cpmd_input_SYSTEM_SCALE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword SCALE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.SCALE_options')) + + x_cpmd_input_SYSTEM_SCALE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword SCALE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.SCALE_parameters')) + + +class x_cpmd_section_input_SYSTEM_STATES(MSection): + ''' + The number of states used in the calculation is read from the next line. This keyword + has to preceed the keyword {\\bf OCCUPATION}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.STATES')) + + x_cpmd_input_SYSTEM_STATES_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword STATES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.STATES_options')) + + x_cpmd_input_SYSTEM_STATES_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword STATES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.STATES_parameters')) + + +class x_cpmd_section_input_SYSTEM_SURFACE(MSection): + ''' + By default, if nothing is specified, assume {\\bf periodic boundary} condition in {\\bf + $x$- and $y$-direction}. With the extra keywords {\\sl XY}, {\\sl YZ} or {\\sl ZX}, the + periodicity of the systems is assumed to be along $(x,y)$, $(y,z)$ or $(z,x)$, + respectively. % You also need to set the 'cluster option' (i.e. + \\refkeyword{SYMMETRY} 0). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.SURFACE')) + + x_cpmd_input_SYSTEM_SURFACE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword SURFACE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.SURFACE_options')) + + x_cpmd_input_SYSTEM_SURFACE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword SURFACE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.SURFACE_parameters')) + + +class x_cpmd_section_input_SYSTEM_SYMMETRIZE_COORDINATES(MSection): + ''' + {\\bf Input coordinates} are {\\bf symmetrized} according to the {\\bf point group} + specified. This only makes sense when the structure already is close to the symmetric + one. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.SYMMETRIZE_COORDINATES')) + + x_cpmd_input_SYSTEM_SYMMETRIZE_COORDINATES_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword SYMMETRIZE_COORDINATES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.SYMMETRIZE_COORDINATES_options')) + + x_cpmd_input_SYSTEM_SYMMETRIZE_COORDINATES_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword SYMMETRIZE_COORDINATES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.SYMMETRIZE_COORDINATES_parameters')) + + +class x_cpmd_section_input_SYSTEM_SYMMETRY(MSection): + ''' + The {\\bf supercell symmetry type} is read from the next line. You can put a number or + a keyword. {\\small \\begin{description} \\renewcommand{\\makelabel}[1]{\\hbox to 2em + {\\hfill#1}} \\item[0] {\\bf ISOLATED} system in a cubic/orthorhombic + box~\\cite{Hockney70,Landman} with ISOLATED MOLECULE option activated. By default the + Hockney method (see \\refkeyword{POISSON SOLVER}) is used for solving the Poisson + equations. You can use this option in combination with \\refkeyword{POLYMER} or + \\refkeyword{SURFACE} for systems that are periodic in only 1 or 2 dimensions. The + default Poisson solver is MORTENSEN in this case. See the Hints and Tricks section for + some additional requirements when calculating isolated system. \\item[1] Simple {\\bf + CUBIC} \\item[2] {\\bf FACE CENTERED CUBIC} ({\\bf FCC}) \\item[3] {\\bf BODY CENTERED + CUBIC} ({\\bf BCC}) \\item[4] {\\bf HEXAGONAL} \\item[5] {\\bf TRIGONAL} or {\\bf + RHOMBOHEDRAL} \\item[6] {\\bf TETRAGONAL} \\item[7] {\\bf BODY CENTRED TETRAGONAL} ({\\bf + BCT}) \\item[8] {\\bf ORTHORHOMBIC} \\item[12] {\\bf MONOCLINIC} \\item[14] {\\bf + TRICLINIC} \\end{description} } Warning: This keyword should not be used with the + keyword {\\bf CELL VECTORS}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.SYMMETRY')) + + x_cpmd_input_SYSTEM_SYMMETRY_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword SYMMETRY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.SYMMETRY_options')) + + x_cpmd_input_SYSTEM_SYMMETRY_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword SYMMETRY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.SYMMETRY_parameters')) + + +class x_cpmd_section_input_SYSTEM_TESR(MSection): + ''' + The number of additional supercells included in the real space sum for the Ewald term + is read from the next line. Default is 0, for small unit cells larger values (up to 8) + have to be used. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.TESR')) + + x_cpmd_input_SYSTEM_TESR_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword TESR. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.TESR_options')) + + x_cpmd_input_SYSTEM_TESR_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword TESR. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.TESR_parameters')) + + +class x_cpmd_section_input_SYSTEM_WCUT(MSection): + ''' + Set the radial \\refkeyword{CDFT} weight cutoff for all atom species to CUT, which is + specified next to the keyword. Default is a species specific cutoff at the distance + where the magnitude of the respective promolecular density is smaller than $10^{-6}$. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.WCUT')) + + x_cpmd_input_SYSTEM_WCUT_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword WCUT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.WCUT_options')) + + x_cpmd_input_SYSTEM_WCUT_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword WCUT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.WCUT_parameters')) + + +class x_cpmd_section_input_SYSTEM_WGAUSS(MSection): + ''' + Use Gaussian weight functions instead of Hirshfeld promolecular orbitals in the + \\refkeyword{CDFT} weight. Parameter NWG is specified next to the keyword and has to be + equal to the number of different atom species in the calculation. The Gaussian widths + $\\sigma_i$ of the species $i$ are read from subsequent lines. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.WGAUSS')) + + x_cpmd_input_SYSTEM_WGAUSS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword WGAUSS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.WGAUSS_options')) + + x_cpmd_input_SYSTEM_WGAUSS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword WGAUSS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.WGAUSS_parameters')) + + +class x_cpmd_section_input_SYSTEM_ZFLEXIBLE_CELL(MSection): + ''' + Specifies a constraint on the super cell in constant pressure dynamics or geometry + optimizations. The supercell may only shrink or grow in z-direction. Should be very + useful for ``dense slab'' configurations, e.g. a water layer between solid slabs. + \\textbf{Please note:} this is by no means intended to give a statistically meaningful + ensemble, but merely to provide a tool for efficient equilibration of a specific class + of system. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.ZFLEXIBLE_CELL')) + + x_cpmd_input_SYSTEM_ZFLEXIBLE_CELL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ZFLEXIBLE_CELL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.ZFLEXIBLE_CELL_options')) + + x_cpmd_input_SYSTEM_ZFLEXIBLE_CELL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ZFLEXIBLE_CELL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM.ZFLEXIBLE_CELL_parameters')) + + +class x_cpmd_section_input_SYSTEM(MSection): + ''' + Simulation cell and plane wave parameters (\\textbf{required}). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM')) + + x_cpmd_input_SYSTEM_default_keyword = Quantity( + type=str, + shape=[], + description=''' + The parameters that are present in the section SYSTEM even without a keyword. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_SYSTEM_default_keyword')) + + x_cpmd_section_input_SYSTEM_ACCEPTOR = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_ACCEPTOR'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.ACCEPTOR')) + + x_cpmd_section_input_SYSTEM_ANGSTROM = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_ANGSTROM'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.ANGSTROM')) + + x_cpmd_section_input_SYSTEM_CELL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_CELL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.CELL')) + + x_cpmd_section_input_SYSTEM_CHARGE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_CHARGE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.CHARGE')) + + x_cpmd_section_input_SYSTEM_CHECK_SYMMETRY = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_CHECK_SYMMETRY'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.CHECK_SYMMETRY')) + + x_cpmd_section_input_SYSTEM_CLASSICAL_CELL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_CLASSICAL_CELL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.CLASSICAL_CELL')) + + x_cpmd_section_input_SYSTEM_CLUSTER = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_CLUSTER'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.CLUSTER')) + + x_cpmd_section_input_SYSTEM_CONSTANT_CUTOFF = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_CONSTANT_CUTOFF'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.CONSTANT_CUTOFF')) + + x_cpmd_section_input_SYSTEM_COUPLINGS_LINRES = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_COUPLINGS_LINRES'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.COUPLINGS_LINRES')) + + x_cpmd_section_input_SYSTEM_COUPLINGS_NSURF = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_COUPLINGS_NSURF'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.COUPLINGS_NSURF')) + + x_cpmd_section_input_SYSTEM_COUPLINGS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_COUPLINGS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.COUPLINGS')) + + x_cpmd_section_input_SYSTEM_CUTOFF = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_CUTOFF'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.CUTOFF')) + + x_cpmd_section_input_SYSTEM_DENSITY_CUTOFF = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_DENSITY_CUTOFF'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.DENSITY_CUTOFF')) + + x_cpmd_section_input_SYSTEM_DONOR = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_DONOR'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.DONOR')) + + x_cpmd_section_input_SYSTEM_DUAL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_DUAL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.DUAL')) + + x_cpmd_section_input_SYSTEM_ENERGY_PROFILE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_ENERGY_PROFILE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.ENERGY_PROFILE')) + + x_cpmd_section_input_SYSTEM_EXTERNAL_FIELD = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_EXTERNAL_FIELD'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.EXTERNAL_FIELD')) + + x_cpmd_section_input_SYSTEM_HFX_CUTOFF = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_HFX_CUTOFF'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.HFX_CUTOFF')) + + x_cpmd_section_input_SYSTEM_ISOTROPIC_CELL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_ISOTROPIC_CELL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.ISOTROPIC_CELL')) + + x_cpmd_section_input_SYSTEM_KPOINTS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_KPOINTS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.KPOINTS')) + + x_cpmd_section_input_SYSTEM_LOW_SPIN_EXCITATION_LSETS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_LOW_SPIN_EXCITATION_LSETS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.LOW_SPIN_EXCITATION_LSETS')) + + x_cpmd_section_input_SYSTEM_LOW_SPIN_EXCITATION = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_LOW_SPIN_EXCITATION'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.LOW_SPIN_EXCITATION')) + + x_cpmd_section_input_SYSTEM_LSE_PARAMETERS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_LSE_PARAMETERS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.LSE_PARAMETERS')) + + x_cpmd_section_input_SYSTEM_MESH = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_MESH'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.MESH')) + + x_cpmd_section_input_SYSTEM_MULTIPLICITY = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_MULTIPLICITY'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.MULTIPLICITY')) + + x_cpmd_section_input_SYSTEM_NSUP = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_NSUP'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.NSUP')) + + x_cpmd_section_input_SYSTEM_OCCUPATION = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_OCCUPATION'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.OCCUPATION')) + + x_cpmd_section_input_SYSTEM_POINT_GROUP = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_POINT_GROUP'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.POINT_GROUP')) + + x_cpmd_section_input_SYSTEM_POISSON_SOLVER = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_POISSON_SOLVER'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.POISSON_SOLVER')) + + x_cpmd_section_input_SYSTEM_POLYMER = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_POLYMER'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.POLYMER')) + + x_cpmd_section_input_SYSTEM_PRESSURE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_PRESSURE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.PRESSURE')) + + x_cpmd_section_input_SYSTEM_REFERENCE_CELL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_REFERENCE_CELL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.REFERENCE_CELL')) + + x_cpmd_section_input_SYSTEM_SCALE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_SCALE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.SCALE')) + + x_cpmd_section_input_SYSTEM_STATES = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_STATES'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.STATES')) + + x_cpmd_section_input_SYSTEM_SURFACE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_SURFACE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.SURFACE')) + + x_cpmd_section_input_SYSTEM_SYMMETRIZE_COORDINATES = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_SYMMETRIZE_COORDINATES'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.SYMMETRIZE_COORDINATES')) + + x_cpmd_section_input_SYSTEM_SYMMETRY = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_SYMMETRY'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.SYMMETRY')) + + x_cpmd_section_input_SYSTEM_TESR = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_TESR'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.TESR')) + + x_cpmd_section_input_SYSTEM_WCUT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_WCUT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.WCUT')) + + x_cpmd_section_input_SYSTEM_WGAUSS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_WGAUSS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.WGAUSS')) + + x_cpmd_section_input_SYSTEM_ZFLEXIBLE_CELL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM_ZFLEXIBLE_CELL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM.ZFLEXIBLE_CELL')) + + +class x_cpmd_section_input_TDDFT_DAVIDSON_RDIIS(MSection): + ''' + This keyword controls the residual DIIS method for TDDFT diagonalization. This method + is used at the end of a DAVIDSON diagonalization for roots that are not yet converged. + The first number gives the maxium iterations, the second the maximum allowed restarts, + and the third the maximum residual allowed when the method is invoked. + + \\textbf{Default} values are \\defaultvalue{20}, \\defaultvalue{3} and + \\defaultvalue{$10^{-3}$}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT.DAVIDSON_RDIIS')) + + x_cpmd_input_TDDFT_DAVIDSON_RDIIS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DAVIDSON_RDIIS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT.DAVIDSON_RDIIS_options')) + + x_cpmd_input_TDDFT_DAVIDSON_RDIIS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DAVIDSON_RDIIS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT.DAVIDSON_RDIIS_parameters')) + + +class x_cpmd_section_input_TDDFT_DIAGONALIZER(MSection): + ''' + Specify the iterative diagonalizer to be used. + + \\textbf{Defaults} are {\\sl DAVIDSON} for the Tamm--Dancoff method, {\\sl NONHERMIT} (a + non-hermitian Davidson method) for TDDFT LR and {\\sl PCG} (Conjugate gradients) for + the optimized subspace method. The additional keyword {\\sl MINIMIZE} applies to the + PCG method only. It forces a line minimization with quadratic search. + + \\textbf{Default} is \\defaultvalue{not to use line minimization}. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT.DIAGONALIZER')) + + x_cpmd_input_TDDFT_DIAGONALIZER_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword DIAGONALIZER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT.DIAGONALIZER_options')) + + x_cpmd_input_TDDFT_DIAGONALIZER_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword DIAGONALIZER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT.DIAGONALIZER_parameters')) + + +class x_cpmd_section_input_TDDFT_EXTPOT(MSection): + ''' + Non adiabatic (nonadiabatic, non-adiabatic) Tully's trajectory surface hopping + dynamics using TDDFT energies and forces, coupled with an external + field~\\cite{tavernelli2010}. To be used together with the keywords + \\refkeyword{MOLECULAR DYNAMICS} BO, \\refkeyword{TDDFT} in the \\&CPMD section, and + \\refkeyword{T-SHTDDFT} in the \\&TDDFT section. Do NOT use the keyword + \\refkeyword{T-SHTDDFT} together with the keyword \\refkeyword{SURFACE HOPPING} in + \\&CPMD, which invokes the SH scheme based on \\refkeyword{ROKS}~\\cite{surfhop} (see + \\refkeyword{SURFACE HOPPING}). This keyword follow the same principle as described for + the keyword \\refkeyword{T-SHTDDFT}, except that, in the present dynamics, the + trajectory starts on the ground state and is coupled with an external field through + the equations of motion for the amplitudes of Tully's trajectory surface hopping. + According to the evolution of the amplitudes of the different excited states, the + running trajectory can jump on an excited state. From there, deactivation through + nonradiative processes is possible, within the normal trajectory surface hopping + scheme. Parameter \\textit{aampl}, \\textit{adir}, \\textit{afreq}, and \\textit{apara1} + are read from the next line. The amplitude of the vector potential is provided in + \\textit{aampl} and its polarization is given in \\textit{adir} (1 = x-polarized, 2 = + y-polarized, 3 = z-polarized, 4 = all components). The keyword \\textit{afreq} gives + the frequency of the field and \\textit{apara1} is a free parameter for a specific + user-specified pulse. Important points: the applied electromagnetic field needs to be + hard coded in the subroutine sh\\_tddft.F, in the subroutine SH\\_EXTPOT. The vector + potential is used for the coupling with the amplitudes equations. Be careful to use a + time step small enough for a correct description of the pulse. The pulse is printed in + the file SH\\_EXTPT.dat (step, A(t), E(t)). + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT.EXTPOT')) + + x_cpmd_input_TDDFT_EXTPOT_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword EXTPOT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT.EXTPOT_options')) + + x_cpmd_input_TDDFT_EXTPOT_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword EXTPOT. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT.EXTPOT_parameters')) + + +class x_cpmd_section_input_TDDFT_FORCE_STATE(MSection): + ''' + The state for which the forces are calculated is read from the next line. Default is + for state 1. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT.FORCE_STATE')) + + x_cpmd_input_TDDFT_FORCE_STATE_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword FORCE_STATE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT.FORCE_STATE_options')) + + x_cpmd_input_TDDFT_FORCE_STATE_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword FORCE_STATE. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT.FORCE_STATE_parameters')) + + +class x_cpmd_section_input_TDDFT_LOCALIZATION(MSection): + ''' + Use localized orbitals in the TDDFT calculation. Default is to use canonical orbitals. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT.LOCALIZATION')) + + x_cpmd_input_TDDFT_LOCALIZATION_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword LOCALIZATION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT.LOCALIZATION_options')) + + x_cpmd_input_TDDFT_LOCALIZATION_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword LOCALIZATION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT.LOCALIZATION_parameters')) + + +class x_cpmd_section_input_TDDFT_MOLECULAR_STATES(MSection): + ''' + Calculate and group Kohn--Sham orbitals into molecular states for a TDDFT calculation. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT.MOLECULAR_STATES')) + + x_cpmd_input_TDDFT_MOLECULAR_STATES_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword MOLECULAR_STATES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT.MOLECULAR_STATES_options')) + + x_cpmd_input_TDDFT_MOLECULAR_STATES_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword MOLECULAR_STATES. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT.MOLECULAR_STATES_parameters')) + + +class x_cpmd_section_input_TDDFT_PCG_PARAMETER(MSection): + ''' + The parameters for the PCG diagonalization are read from the next line. If {\\sl + MINIMIZE} was used in the \\refkeyword{DIAGONALIZER} then the total number of steps + (default 100) and the convergence criteria (default $10^{-8}$) are read from the next + line. Without minimization in addition the step length (default 0.5) has also to be + given. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT.PCG_PARAMETER')) + + x_cpmd_input_TDDFT_PCG_PARAMETER_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword PCG_PARAMETER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT.PCG_PARAMETER_options')) + + x_cpmd_input_TDDFT_PCG_PARAMETER_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword PCG_PARAMETER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT.PCG_PARAMETER_parameters')) + + +class x_cpmd_section_input_TDDFT_PROPERTY(MSection): + ''' + Calculate properties of excited states at the end of an \\refkeyword{ELECTRONIC + SPECTRA} calculations. default is to calculate properties for all states. Adding the + keyword {\\bf STATE} allows to restrict the calculation to only one state. The number + of the state is read from the next line. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT.PROPERTY')) + + x_cpmd_input_TDDFT_PROPERTY_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword PROPERTY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT.PROPERTY_options')) + + x_cpmd_input_TDDFT_PROPERTY_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword PROPERTY. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT.PROPERTY_parameters')) + + +class x_cpmd_section_input_TDDFT_REORDER_LOCAL(MSection): + ''' + Reorder the localized states according to a distance criteria. The number of reference + atoms is read from the next line. On the following line the position of the reference + atoms within the set of all atoms has to be given. The keyword \\refkeyword{LOCALIZE} + is automatically set. The minimum distance of the center of charge of each state to + the reference atoms is calculated and the states are ordered with respect to + decreasing distance. Together with the {\\sl SUBSPACE} option in a \\refkeyword{TAMM- + DANCOFF} calculation this can be used to select specific states for a calculation. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT.REORDER_LOCAL')) + + x_cpmd_input_TDDFT_REORDER_LOCAL_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword REORDER_LOCAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT.REORDER_LOCAL_options')) + + x_cpmd_input_TDDFT_REORDER_LOCAL_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword REORDER_LOCAL. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT.REORDER_LOCAL_parameters')) + + +class x_cpmd_section_input_TDDFT_REORDER(MSection): + ''' + Reorder the canonical Kohn--Sham orbitals prior to a TDDFT calculation. The number of + states to be reordered is read from the next line. On the following line the final + rank of each states has to be given. The first number given corresponds to the HOMO, + the next to the HOMO - 1 and so on. All states down to the last one changed have to be + specified, no holes are allowed. This keyword can be used together with the {\\sl + SUBSPACE} option in a \\refkeyword{TAMM-DANCOFF} calculation to select arbitrary + states. Default is to use the ordering of states according to the Kohn--Sham + eigenvalues. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT.REORDER')) + + x_cpmd_input_TDDFT_REORDER_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword REORDER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT.REORDER_options')) + + x_cpmd_input_TDDFT_REORDER_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword REORDER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT.REORDER_parameters')) + + +class x_cpmd_section_input_TDDFT_ROTATION_PARAMETER(MSection): + ''' + The parameters for the orbital rotations in an optimized subspace calculation (see + \\refkeyword{TAMM-DANCOFF}) are read from the next line. The total number of iterations + (default 50), the convergence criteria (default $10^{-6}$) and the step size (default + 0.5) have to be given. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT.ROTATION_PARAMETER')) + + x_cpmd_input_TDDFT_ROTATION_PARAMETER_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword ROTATION_PARAMETER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT.ROTATION_PARAMETER_options')) + + x_cpmd_input_TDDFT_ROTATION_PARAMETER_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword ROTATION_PARAMETER. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT.ROTATION_PARAMETER_parameters')) + + +class x_cpmd_section_input_TDDFT(MSection): + ''' + Input for TDDFT calculations + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT')) + + x_cpmd_input_TDDFT_default_keyword = Quantity( + type=str, + shape=[], + description=''' + The parameters that are present in the section TDDFT even without a keyword. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_TDDFT_default_keyword')) + + x_cpmd_section_input_TDDFT_DAVIDSON_RDIIS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_TDDFT_DAVIDSON_RDIIS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT.DAVIDSON_RDIIS')) + + x_cpmd_section_input_TDDFT_DIAGONALIZER = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_TDDFT_DIAGONALIZER'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT.DIAGONALIZER')) + + x_cpmd_section_input_TDDFT_EXTPOT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_TDDFT_EXTPOT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT.EXTPOT')) + + x_cpmd_section_input_TDDFT_FORCE_STATE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_TDDFT_FORCE_STATE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT.FORCE_STATE')) + + x_cpmd_section_input_TDDFT_LOCALIZATION = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_TDDFT_LOCALIZATION'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT.LOCALIZATION')) + + x_cpmd_section_input_TDDFT_MOLECULAR_STATES = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_TDDFT_MOLECULAR_STATES'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT.MOLECULAR_STATES')) + + x_cpmd_section_input_TDDFT_PCG_PARAMETER = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_TDDFT_PCG_PARAMETER'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT.PCG_PARAMETER')) + + x_cpmd_section_input_TDDFT_PROPERTY = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_TDDFT_PROPERTY'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT.PROPERTY')) + + x_cpmd_section_input_TDDFT_REORDER_LOCAL = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_TDDFT_REORDER_LOCAL'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT.REORDER_LOCAL')) + + x_cpmd_section_input_TDDFT_REORDER = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_TDDFT_REORDER'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT.REORDER')) + + x_cpmd_section_input_TDDFT_ROTATION_PARAMETER = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_TDDFT_ROTATION_PARAMETER'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT.ROTATION_PARAMETER')) + + +class x_cpmd_section_input_VDW_VDW_PARAMETERS(MSection): + ''' + Parameters for empirical van der Waals correction schemes are set with the keyword. + This requires the \\refkeyword{VDW CORRECTION} keyword to be set in the \\&CPMD section. + For Grimme's {\\bf DFT-D2} type (see below) an automatic assignment of the parameters + can be requested by putting {\\bf ALL DFT-D2} on the next line. Otherwise the number of + pairs {\\itshape NVDW} is read from the next line and followed by {\\itshape NVDW} lines + of parameters: {\\itshape TYPE}, $\\alpha$, $\\beta$, $C_6^{\\alpha\\beta}$, + $R_0^{\\alpha\\beta}$, and $d$ for each pair of atom types $\\alpha$ and $\\beta$, where + $\\alpha$ and $\\beta$ are the indexes of pseudopotentials (and their associated groups + of atoms) in the order they are listed in the \\&ATOMS section. For type {\\bf DFT-D2} + only $\\alpha$ and $\\beta$ are required. If the other parameters are ommited the + internal table of parameters is used. % Note: References to two papers by R. LeSar + have % been removed from this entry because Elstner's % damping function is quite + different from LeSars, % Elstner does not reference LeSar's work, % and LeSar's + damping function was adopted from % earlier work (ie., LeSar was not the first to % + use such corrections.) It does appear that % LeSar's function may be in the CPMD + source code, % but it is commented out. A presently implemented damped dispersion + model, described by M. Elstner {\\itshape et al.}\\cite{Elstner}, having the same form + as that constructed by Mooij {\\itshape et al.}\\cite{mooij:99}, is activated by + specifying {\\bf C6} as {\\itshape TYPE}. This model is expressed as % Elstner's + Damping function: \\begin{equation} \\label{elstner-damping-function} %\\ref{elstner- + damping-function} E_{vdW} = \\sum_{ij} + \\frac{C_6^{\\alpha\\beta}}{{R^{\\alpha\\beta}_{ij}}^6} \\left(1 - \\exp{ \\left[-d + \\left(\\frac{R^{\\alpha\\beta}_{ij}}{R^{\\alpha\\beta}_0} \\right)^7 \\right]} \\right)^4. + \\end{equation} A table of parameters appropriate for this particular model, using the + PBE and BLYP functionals, is available \\cite{williams-vdw:06}. Alternatively Van der + Waals correction according to Grimme can be used \\cite{Grimme06} by selecting + {\\itshape TYPE} {\\bf DFT-D2}. \\begin{equation} E_{disp} = - s_6 \\sum_{i=1}^{N_{at} -1} + \\sum_{j=i+1}^{N_{at}} \\frac{C_6^{ij}}{R_{ij}^6} f_{dmp} (R_{ij}) \\end{equation} The + values of $C_6$ and $R_0$ are not specific that are used by this method are taken from + \\cite{Grimme06} and stored internally (see above for details). Namely, all elements + from H ($Z=1$) to Rn ($Z=86$) are available, whereas elements beyond Rn give by + default a zero contribution. Note that the parameter $s_6$ depends on the functional + used and has to be provided consistently with the DFT one chosen for the calculation. + The following line has to be added {S6GRIMME} and the type of functional is read from + the next line. One of the following labels has to be provided: {BP86, BLYP, B3LYP, + PBE, TPSS, REVPBE, PBE0}. Note that Grimme vdW does not support other functionals. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_VDW.VDW_PARAMETERS')) + + x_cpmd_input_VDW_VDW_PARAMETERS_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword VDW_PARAMETERS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_VDW.VDW_PARAMETERS_options')) + + x_cpmd_input_VDW_VDW_PARAMETERS_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword VDW_PARAMETERS. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_VDW.VDW_PARAMETERS_parameters')) + + +class x_cpmd_section_input_VDW_WANNIER_CORRECTION(MSection): + ''' + Between these opening and ending keywords, the partitioning of the system and the + calculation procedure must be selected. Three implementatons are available for + partitioning the system: (1) choosing a {\\it zlevel}, namely a z coordinate separating + the first fragment form the second (this is appropriate for cases where there are only + two fragments such as, for instance two graphene layers or adsorption of molecules on + surfaces); in this case the keyword FRAGMENT ZLEVEL must be used. (2) give reference + ion and a cut-off radius around which WFCs are supposed to belong to the given atom + or fragment; in this case the keyword FRAGMENT RADIUS must be used. (3) the system is + subdivided into fragments automatically detected by using predefined covalent bond + radii. in this case the keyword FRAGMENT BOND must be used. This is also the default + in case no specification is done. The syntax for the different options is: VERSION + iswitchvdw (method 1 \\cite{psil1} or 2 \\cite{psil2}) FRAGMENT ZLEVEL zlevel (in + a.u.) FRAGMENT RADIUS multifrag i radius(i) ... FRAGMENT BOND tollength + DAMPING a6 RESTART WANNIER ENERGY MONOMER enmonomer TOLERANCE WANNIER tolwann + TOLERANCE REFERENCE tolref CHANGE BONDS nboadwf i j $\\pm$ 1 CELL nxvdw nyvdw + nzvdw PRINT $[$INFO,FRAGMENT,C6,FORCES$]$ Note that the total number of WFCs in your + system depends on the spin description you use (1 for LSD, 2 for LDA). The coefficient + a6 is the smoothing parameter and the reference total energy intended as a sum of all + the total energies of your fragments (e.g. the ETOT you get by a standard calculation + not including vdW corrections). For a6 the suggested parameter is 20.0 \\cite{molphy}. + Note that the two possible vdW options, EMPIRICAL CORRECTION and WANNIER CORRECTION + are mutually exclusive. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_VDW.WANNIER_CORRECTION')) + + x_cpmd_input_VDW_WANNIER_CORRECTION_options = Quantity( + type=str, + shape=[], + description=''' + The options given for keyword WANNIER_CORRECTION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_VDW.WANNIER_CORRECTION_options')) + + x_cpmd_input_VDW_WANNIER_CORRECTION_parameters = Quantity( + type=str, + shape=[], + description=''' + The parameters for keyword WANNIER_CORRECTION. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_VDW.WANNIER_CORRECTION_parameters')) + + +class x_cpmd_section_input_VDW(MSection): + ''' + Empirical van der Waals correction or van der Waals interaction based on Wannier + functions + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input_VDW')) + + x_cpmd_input_VDW_default_keyword = Quantity( + type=str, + shape=[], + description=''' + The parameters that are present in the section VDW even without a keyword. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_VDW_default_keyword')) + + x_cpmd_section_input_VDW_VDW_PARAMETERS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_VDW_VDW_PARAMETERS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_VDW.VDW_PARAMETERS')) + + x_cpmd_section_input_VDW_WANNIER_CORRECTION = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_VDW_WANNIER_CORRECTION'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_VDW.WANNIER_CORRECTION')) + + +class x_cpmd_section_input(MSection): + ''' + Contains the CPMD input file contents. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_input')) + + x_cpmd_section_input_ATOMS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_ATOMS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_ATOMS')) + + x_cpmd_section_input_BASIS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_BASIS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_BASIS')) + + x_cpmd_section_input_CLASSIC = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CLASSIC'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CLASSIC')) + + x_cpmd_section_input_CPMD = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_CPMD'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_CPMD')) + + x_cpmd_section_input_DFT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_DFT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_DFT')) + + x_cpmd_section_input_EXTE = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_EXTE'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_EXTE')) + + x_cpmd_section_input_HARDNESS = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_HARDNESS'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_HARDNESS')) + + x_cpmd_section_input_INFO = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_INFO'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_INFO')) + + x_cpmd_section_input_LINRES = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_LINRES'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_LINRES')) + + x_cpmd_section_input_PATH = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PATH'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PATH')) + + x_cpmd_section_input_PIMD = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PIMD'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PIMD')) + + x_cpmd_section_input_PROP = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PROP'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PROP')) + + x_cpmd_section_input_PTDDFT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_PTDDFT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_PTDDFT')) + + x_cpmd_section_input_QMMM = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_QMMM'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_QMMM')) + + x_cpmd_section_input_RESP = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_RESP'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_RESP')) + + x_cpmd_section_input_SYSTEM = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_SYSTEM'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_SYSTEM')) + + x_cpmd_section_input_TDDFT = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_TDDFT'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_TDDFT')) + + x_cpmd_section_input_VDW = SubSection( + sub_section=SectionProxy('x_cpmd_section_input_VDW'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input_VDW')) + + +class section_run(public.section_run): + + m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_run')) + + x_cpmd_section_input = SubSection( + sub_section=SectionProxy('x_cpmd_section_input'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_input')) + + +m_package.__init_metainfo__() diff --git a/cpmdparser/metainfo/cpmd_general.py b/cpmdparser/metainfo/cpmd_general.py new file mode 100644 index 0000000000000000000000000000000000000000..2e8d1a3a7ca8de213e7c347aa22b6a67ec95e837 --- /dev/null +++ b/cpmdparser/metainfo/cpmd_general.py @@ -0,0 +1,927 @@ +import numpy as np # pylint: disable=unused-import +import typing # pylint: disable=unused-import +from nomad.metainfo import ( # pylint: disable=unused-import + MSection, MCategory, Category, Package, Quantity, Section, SubSection, SectionProxy, + Reference +) +from nomad.metainfo.legacy import LegacyDefinition + +from nomad.datamodel.metainfo import public + +m_package = Package( + name='cpmd_general_nomadmetainfo_json', + description='None', + a_legacy=LegacyDefinition(name='cpmd.general.nomadmetainfo.json')) + + +class x_cpmd_section_start_information(MSection): + ''' + Contains information about the starting conditions for this run + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_start_information')) + + x_cpmd_start_datetime = Quantity( + type=str, + shape=[], + description=''' + CPMD run start time and date + ''', + a_legacy=LegacyDefinition(name='x_cpmd_start_datetime')) + + x_cpmd_input_filename = Quantity( + type=str, + shape=[], + description=''' + CPMD input file name. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_input_filename')) + + x_cpmd_compilation_date = Quantity( + type=str, + shape=[], + description=''' + CPMD compilation date. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_compilation_date')) + + x_cpmd_process_id = Quantity( + type=np.dtype(np.int32), + shape=[], + description=''' + The process id for this calculation. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_process_id')) + + x_cpmd_run_user_name = Quantity( + type=str, + shape=[], + description=''' + The user who launched this calculation. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_run_user_name')) + + x_cpmd_run_host_name = Quantity( + type=str, + shape=[], + description=''' + The host on which this calculation was made on. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_run_host_name')) + + +class x_cpmd_section_run_type_information(MSection): + ''' + Contains information about the run type. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_run_type_information')) + + x_cpmd_time_step_ions = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The time step for ions. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_time_step_ions')) + + x_cpmd_time_step_electrons = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The time step for electrons. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_time_step_electrons')) + + x_cpmd_geo_opt_method = Quantity( + type=str, + shape=[], + description=''' + The geometry optimization method. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_geo_opt_method')) + + x_cpmd_max_steps = Quantity( + type=np.dtype(np.int32), + shape=[], + description=''' + The maximum number of steps requested. In MD, this is the number of MD steps, in + single point calculations this is the number of scf cycles, in geometry + optimization this is the number of optimization steps. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_max_steps')) + + x_cpmd_ion_temperature_control = Quantity( + type=str, + shape=[], + description=''' + The temperature control method for ion dynamics. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_ion_temperature_control')) + + +class x_cpmd_section_xc_information(MSection): + ''' + Contains information about the exchange-correlation functional. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_xc_information')) + + +class x_cpmd_section_system_information(MSection): + ''' + Contains information about the system. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_system_information')) + + +class x_cpmd_section_pseudopotential_information(MSection): + ''' + Contains information about the pseudopotentials. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_pseudopotential_information')) + + +class x_cpmd_section_atom_kinds(MSection): + ''' + Contains information about the atomic kinds present in the calculation. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_atom_kinds')) + + x_cpmd_section_atom_kind = SubSection( + sub_section=SectionProxy('x_cpmd_section_atom_kind'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_atom_kind')) + + +class x_cpmd_section_atom_kind(MSection): + ''' + Contains information about one atomic kind. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_atom_kind')) + + x_cpmd_atom_kind_label = Quantity( + type=str, + shape=[], + description=''' + The label of the atomic kind. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_atom_kind_label')) + + x_cpmd_atom_kind_mass = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The mass of the atomic kind. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_atom_kind_mass')) + + x_cpmd_atom_kind_raggio = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The width of the ionic charge distribution (RAGGIO) of the atomic kind. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_atom_kind_raggio')) + + x_cpmd_atom_kind_nlcc = Quantity( + type=str, + shape=[], + description=''' + The nonlinear core correction (NLCC) of the atomic kind. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_atom_kind_nlcc')) + + x_cpmd_atom_kind_pseudopotential_l = Quantity( + type=str, + shape=[], + description=''' + The angular part of the pseudopotential for the atomic kind. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_atom_kind_pseudopotential_l')) + + x_cpmd_atom_kind_pseudopotential_type = Quantity( + type=str, + shape=[], + description=''' + The type of the pseudopotential for the atomic kind. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_atom_kind_pseudopotential_type')) + + +class x_cpmd_section_supercell(MSection): + ''' + Contains information about the supercell. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_supercell')) + + x_cpmd_cell_symmetry = Quantity( + type=str, + shape=[], + description=''' + The symmetry of the cell. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_cell_symmetry')) + + x_cpmd_cell_lattice_constant = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The cell lattice constant. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_cell_lattice_constant')) + + x_cpmd_cell_volume = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The cell volume. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_cell_volume')) + + x_cpmd_cell_dimension = Quantity( + type=str, + shape=[], + description=''' + The cell dimension. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_cell_dimension')) + + x_cpmd_lattice_vector_A1 = Quantity( + type=str, + shape=[], + description=''' + Lattice vector A1 + ''', + a_legacy=LegacyDefinition(name='x_cpmd_lattice_vector_A1')) + + x_cpmd_lattice_vector_A2 = Quantity( + type=str, + shape=[], + description=''' + Lattice vector A2 + ''', + a_legacy=LegacyDefinition(name='x_cpmd_lattice_vector_A2')) + + x_cpmd_lattice_vector_A3 = Quantity( + type=str, + shape=[], + description=''' + Lattice vector A3 + ''', + a_legacy=LegacyDefinition(name='x_cpmd_lattice_vector_A3')) + + x_cpmd_reciprocal_lattice_vector_B1 = Quantity( + type=str, + shape=[], + description=''' + Reciprocal lattice vector B1 + ''', + a_legacy=LegacyDefinition(name='x_cpmd_reciprocal_lattice_vector_B1')) + + x_cpmd_reciprocal_lattice_vector_B2 = Quantity( + type=str, + shape=[], + description=''' + Reciprocal lattice vector B2 + ''', + a_legacy=LegacyDefinition(name='x_cpmd_reciprocal_lattice_vector_B2')) + + x_cpmd_reciprocal_lattice_vector_B3 = Quantity( + type=str, + shape=[], + description=''' + Reciprocal lattice vector B3 + ''', + a_legacy=LegacyDefinition(name='x_cpmd_reciprocal_lattice_vector_B3')) + + x_cpmd_real_space_mesh = Quantity( + type=str, + shape=[], + description=''' + Number of points in the real space mesh. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_real_space_mesh')) + + x_cpmd_wave_function_cutoff = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + Place wave cutoff energy for wave function. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_wave_function_cutoff')) + + x_cpmd_density_cutoff = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + Place wave cutoff energy for density. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_density_cutoff')) + + x_cpmd_number_of_planewaves_density = Quantity( + type=np.dtype(np.int32), + shape=[], + description=''' + Number of plane waves for density cutoff. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_number_of_planewaves_density')) + + x_cpmd_number_of_planewaves_wave_function = Quantity( + type=np.dtype(np.int32), + shape=[], + description=''' + Number of plane waves for wave_function cutoff. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_number_of_planewaves_wave_function')) + + +class x_cpmd_section_wave_function_initialization(MSection): + ''' + Contains information about the wave function initialization + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_wave_function_initialization')) + + +class x_cpmd_section_scf(MSection): + ''' + Contains information about self-consistent field calculation + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_scf')) + + x_cpmd_section_scf_iteration = SubSection( + sub_section=SectionProxy('x_cpmd_section_scf_iteration'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_scf_iteration')) + + +class x_cpmd_section_scf_iteration(MSection): + ''' + Contains information about the self-consistent field iteration within a wavefunction + optimization. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_scf_iteration')) + + x_cpmd_scf_nfi = Quantity( + type=np.dtype(np.int32), + shape=[], + description=''' + The scf step number (NFI). + ''', + a_legacy=LegacyDefinition(name='x_cpmd_scf_nfi')) + + x_cpmd_scf_gemax = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + Largest off-diagonal component (GEMAX) during SCF step. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_scf_gemax')) + + x_cpmd_scf_cnorm = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + Average of the off-diagonal components (CNORM) during SCF step. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_scf_cnorm')) + + x_cpmd_scf_etot = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The total energy (ETOT) during SCF step. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_scf_etot')) + + x_cpmd_scf_detot = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The difference in total energy to the previous SCF energy (DETOT). + ''', + a_legacy=LegacyDefinition(name='x_cpmd_scf_detot')) + + x_cpmd_scf_tcpu = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The CPU time used during SCF step (TCPU). + ''', + a_legacy=LegacyDefinition(name='x_cpmd_scf_tcpu')) + + +class x_cpmd_section_final_results(MSection): + ''' + The final results after a single point calculation. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_final_results')) + + +class x_cpmd_section_geo_opt_initialization(MSection): + ''' + Geometry optimization initialization information. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_geo_opt_initialization')) + + x_cpmd_total_number_of_molecular_structures = Quantity( + type=np.dtype(np.int32), + shape=[], + description=''' + Total number of molecular structures. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_total_number_of_molecular_structures')) + + x_cpmd_initialized_positions = Quantity( + type=np.dtype(np.float64), + shape=['number_of_atoms', 3], + description=''' + The initialized positions for geometry optimization. The ith row corresponds to + the position for atom number i. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_initialized_positions')) + + x_cpmd_initialized_forces = Quantity( + type=np.dtype(np.float64), + shape=['number_of_atoms', 3], + description=''' + The initialized forces for geometry optimization. The ith row corresponds to the + force for atom number i. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_initialized_forces')) + + x_cpmd_geo_opt_initialization_time = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + Time for initialization. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_geo_opt_initialization_time')) + + +class x_cpmd_section_geo_opt_step(MSection): + ''' + Contains information for a single geometry optimization step. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_geo_opt_step')) + + x_cpmd_geo_opt_step_positions = Quantity( + type=np.dtype(np.float64), + shape=['number_of_atoms', 3], + description=''' + The positions from a geometry optimization step. The ith row corresponds to the + position for atom number i. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_geo_opt_step_positions')) + + x_cpmd_geo_opt_step_forces = Quantity( + type=np.dtype(np.float64), + shape=['number_of_atoms', 3], + description=''' + The forces from a geometry optimization step. The ith row corresponds to the force + for atom number i. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_geo_opt_step_forces')) + + x_cpmd_geo_opt_step_total_number_of_scf_steps = Quantity( + type=np.dtype(np.int32), + shape=[], + description=''' + Total number of SCF steps at the end of this geometry optimization step. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_geo_opt_step_total_number_of_scf_steps')) + + x_cpmd_geo_opt_step_number = Quantity( + type=np.dtype(np.int32), + shape=[], + description=''' + Geometry optimization step number. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_geo_opt_step_number')) + + x_cpmd_geo_opt_step_gnmax = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The largest absolute component of the force on any atom (GNMAX). + ''', + a_legacy=LegacyDefinition(name='x_cpmd_geo_opt_step_gnmax')) + + x_cpmd_geo_opt_step_gnorm = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + Average force on the atoms (GNORM). + ''', + a_legacy=LegacyDefinition(name='x_cpmd_geo_opt_step_gnorm')) + + x_cpmd_geo_opt_step_cnstr = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The largest absolute component of a constraint force on the atoms (CNSTR). + ''', + a_legacy=LegacyDefinition(name='x_cpmd_geo_opt_step_cnstr')) + + x_cpmd_geo_opt_step_etot = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The total energy at the end of a geometry optimization step (ETOT). + ''', + a_legacy=LegacyDefinition(name='x_cpmd_geo_opt_step_etot')) + + x_cpmd_geo_opt_step_detot = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The difference in total energy to the previous geometry optimization step (DETOT). + ''', + a_legacy=LegacyDefinition(name='x_cpmd_geo_opt_step_detot')) + + x_cpmd_geo_opt_step_tcpu = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The CPU time used during geometry optimization step (TCPU). + ''', + a_legacy=LegacyDefinition(name='x_cpmd_geo_opt_step_tcpu')) + + x_cpmd_section_geo_opt_scf_iteration = SubSection( + sub_section=SectionProxy('x_cpmd_section_geo_opt_scf_iteration'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_geo_opt_scf_iteration')) + + +class x_cpmd_section_geo_opt_scf_iteration(MSection): + ''' + Contains information about the self-consistent field iteration within a geometry + optimization step. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_geo_opt_scf_iteration')) + + x_cpmd_geo_opt_scf_nfi = Quantity( + type=np.dtype(np.int32), + shape=[], + description=''' + The scf step number (NFI) within geometry optimization step. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_geo_opt_scf_nfi')) + + x_cpmd_geo_opt_scf_gemax = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + Largest off-diagonal component (GEMAX) during SCF step within geometry + optimization step. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_geo_opt_scf_gemax')) + + x_cpmd_geo_opt_scf_cnorm = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + Average of the off-diagonal components (CNORM) during SCF step within geometry + optimization step. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_geo_opt_scf_cnorm')) + + x_cpmd_geo_opt_scf_etot = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The total energy (ETOT) during SCF step within geometry optimization step. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_geo_opt_scf_etot')) + + x_cpmd_geo_opt_scf_detot = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The difference in total energy to the previous SCF energy (DETOT) within geometry + optimization step. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_geo_opt_scf_detot')) + + x_cpmd_geo_opt_scf_tcpu = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The CPU time used during SCF step (TCPU) within geometry optimization step. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_geo_opt_scf_tcpu')) + + +class x_cpmd_section_md_initialization(MSection): + ''' + Molecular dynamics initialization information. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_md_initialization')) + + +class x_cpmd_section_md_averaged_quantities(MSection): + ''' + Averaged quantities from a MD calculation. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_md_averaged_quantities')) + + x_cpmd_electron_kinetic_energy_mean = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The mean electron kinetic energy. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_electron_kinetic_energy_mean')) + + x_cpmd_electron_kinetic_energy_std = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The standard deviation of electron kinetic energy. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_electron_kinetic_energy_std')) + + x_cpmd_ionic_temperature_mean = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The mean ionic temperature. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_ionic_temperature_mean')) + + x_cpmd_ionic_temperature_std = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The standard deviation of ionic temperature. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_ionic_temperature_std')) + + x_cpmd_density_functional_energy_mean = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The mean density functional energy. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_density_functional_energy_mean')) + + x_cpmd_density_functional_energy_std = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The standard deviation of density functional energy. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_density_functional_energy_std')) + + x_cpmd_classical_energy_mean = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The mean classical energy. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_classical_energy_mean')) + + x_cpmd_classical_energy_std = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The standard deviation of classical energy. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_classical_energy_std')) + + x_cpmd_conserved_energy_mean = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The mean conserved energy. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_conserved_energy_mean')) + + x_cpmd_conserved_energy_std = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The standard deviation of conserved energy. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_conserved_energy_std')) + + x_cpmd_nose_energy_electrons_mean = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The mean Nosé energy for electrons. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_nose_energy_electrons_mean')) + + x_cpmd_nose_energy_electrons_std = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The standard deviation of Nosé energy for elctrons. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_nose_energy_electrons_std')) + + x_cpmd_nose_energy_ions_mean = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The mean Nosé energy for ions. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_nose_energy_ions_mean')) + + x_cpmd_nose_energy_ions_std = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The standard deviation of Nosé energy for ions. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_nose_energy_ions_std')) + + x_cpmd_constraints_energy_mean = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The mean constrains energy. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_constraints_energy_mean')) + + x_cpmd_constraints_energy_std = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The standard deviation of constraints energy. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_constraints_energy_std')) + + x_cpmd_restraints_energy_mean = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The mean restraints energy. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_restraints_energy_mean')) + + x_cpmd_restraints_energy_std = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The standard deviation of restraints energy. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_restraints_energy_std')) + + x_cpmd_ion_displacement_mean = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The mean ion displacement. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_ion_displacement_mean')) + + x_cpmd_ion_displacement_std = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The standard deviation of ion displacement. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_ion_displacement_std')) + + x_cpmd_cpu_time_mean = Quantity( + type=np.dtype(np.float64), + shape=[], + description=''' + The mean cpu time. + ''', + a_legacy=LegacyDefinition(name='x_cpmd_cpu_time_mean')) + + +class x_cpmd_section_timing(MSection): + ''' + Contains information about the timings. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_timing')) + + +class x_cpmd_section_end_information(MSection): + ''' + Contains information printed at the end of a calculation. + ''' + + m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cpmd_section_end_information')) + + +class section_run(public.section_run): + + m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_run')) + + x_cpmd_section_start_information = SubSection( + sub_section=SectionProxy('x_cpmd_section_start_information'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_start_information')) + + x_cpmd_section_run_type_information = SubSection( + sub_section=SectionProxy('x_cpmd_section_run_type_information'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_run_type_information')) + + x_cpmd_section_system_information = SubSection( + sub_section=SectionProxy('x_cpmd_section_system_information'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_system_information')) + + x_cpmd_section_supercell = SubSection( + sub_section=SectionProxy('x_cpmd_section_supercell'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_supercell')) + + x_cpmd_section_wave_function_initialization = SubSection( + sub_section=SectionProxy('x_cpmd_section_wave_function_initialization'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_wave_function_initialization')) + + x_cpmd_section_md_initialization = SubSection( + sub_section=SectionProxy('x_cpmd_section_md_initialization'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_md_initialization')) + + x_cpmd_section_md_averaged_quantities = SubSection( + sub_section=SectionProxy('x_cpmd_section_md_averaged_quantities'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_md_averaged_quantities')) + + x_cpmd_section_timing = SubSection( + sub_section=SectionProxy('x_cpmd_section_timing'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_timing')) + + x_cpmd_section_end_information = SubSection( + sub_section=SectionProxy('x_cpmd_section_end_information'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_end_information')) + + +class section_method(public.section_method): + + m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_method')) + + x_cpmd_section_xc_information = SubSection( + sub_section=SectionProxy('x_cpmd_section_xc_information'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_xc_information')) + + x_cpmd_section_pseudopotential_information = SubSection( + sub_section=SectionProxy('x_cpmd_section_pseudopotential_information'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_pseudopotential_information')) + + x_cpmd_section_atom_kinds = SubSection( + sub_section=SectionProxy('x_cpmd_section_atom_kinds'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_atom_kinds')) + + +class section_single_configuration_calculation(public.section_single_configuration_calculation): + + m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_single_configuration_calculation')) + + x_cpmd_section_scf = SubSection( + sub_section=SectionProxy('x_cpmd_section_scf'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_scf')) + + x_cpmd_section_final_results = SubSection( + sub_section=SectionProxy('x_cpmd_section_final_results'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_final_results')) + + +class section_frame_sequence(public.section_frame_sequence): + + m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_frame_sequence')) + + x_cpmd_section_geo_opt_initialization = SubSection( + sub_section=SectionProxy('x_cpmd_section_geo_opt_initialization'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_geo_opt_initialization')) + + x_cpmd_section_geo_opt_step = SubSection( + sub_section=SectionProxy('x_cpmd_section_geo_opt_step'), + repeats=True, + a_legacy=LegacyDefinition(name='x_cpmd_section_geo_opt_step')) + + +m_package.__init_metainfo__() diff --git a/cpmdparser/versions/cpmd41/mdparser.py b/cpmdparser/versions/cpmd41/mdparser.py index b029247a4ae78afe5e7b6ae4dd3a39c887572363..6b341ca00e1c0fd996522c073bf6ce1e3f13aad5 100644 --- a/cpmdparser/versions/cpmd41/mdparser.py +++ b/cpmdparser/versions/cpmd41/mdparser.py @@ -1,11 +1,11 @@ # Copyright 2016-2018 Lauri Himanen, Fawzi Mohamed, Ankit Kariryaa -# +# # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# +# # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -208,7 +208,7 @@ class CPMDMDParser(MainHierarchicalParser): self.backend.addArrayValues("atom_velocities", velocities, unit="bohr/(hbar/hartree)") forces = values[:, 7:10] - self.backend.addArrayValues("atom_forces", forces, unit="forceAu") + self.backend.addArrayValues("atom_forces", forces, unit="hartree / bohr") if trajec_file_iterator is None: pos = values[:, 1:4] diff --git a/regtests/regtests.py b/regtests/regtests.py index 34c2067876a1d04794104872256c41b2d4a36fd3..392721145377c058afd66b1ddd66a125c224b4d1 100644 --- a/regtests/regtests.py +++ b/regtests/regtests.py @@ -1,11 +1,11 @@ # Copyright 2016-2018 Lauri Himanen, Fawzi Mohamed, Ankit Kariryaa -# +# # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# +# # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -474,14 +474,14 @@ class TestMD(unittest.TestCase): [0.15293653991241, -0.00036559789218, -0.00039617900820], [-0.15293653991238, 0.00036559789217, 0.00039617900820], ]), - "forceAu" + "hartree / bohr" ) expected_end = convert_unit( np.array([ [-0.03595092814462, -0.00079338139843, -0.00085974499854], [0.03595092814462, 0.00079338139843, 0.00085974499854], ]), - "forceAu" + "hartree / bohr" ) self.assertTrue(np.array_equal(result[0, :], expected_start))