PLUGINS/FORCE AND STRESS: Difference between revisions
m (Schlipf moved page Construction:PLUGINS/FORCE AND STRESS to PLUGINS/FORCE AND STRESS) |
|||
Line 15: | Line 15: | ||
where <code>constants</code> and <code>additions</code> and [https://docs.python.org/3/library/dataclasses.html Python dataclasses]. | where <code>constants</code> and <code>additions</code> and [https://docs.python.org/3/library/dataclasses.html Python dataclasses]. | ||
The <code>constants</code> dataclass consists of the following inputs, listed here with their associated [https://numpy.org/doc/stable/user/basics.types.html datatypes] | The <code>constants</code> dataclass consists of the following inputs, listed here with their associated [https://numpy.org/doc/stable/user/basics.types.html datatypes] | ||
<syntaxhighlight lang="python" line> | |||
@dataclass(frozen=True) | |||
shape_grid: | class ConstantsForceAndStress: | ||
ENCUT: float | |||
NELECT: float | |||
shape_grid: IntArray | |||
number_ions: int | number_ions: int | ||
number_ion_types: int | number_ion_types: int | ||
ion_types: | ion_types: IndexArray | ||
atomic_numbers: | atomic_numbers: IntArray | ||
lattice_vectors: | lattice_vectors: DoubleArray | ||
positions: | positions: DoubleArray | ||
ZVAL: DoubleArray | |||
POMASS: DoubleArray | |||
forces: | forces: DoubleArray | ||
stress: | stress: DoubleArray | ||
charge_density: | charge_density: Optional[DoubleArray] = None | ||
</syntaxhighlight> | |||
Note that the {{FILE|INCAR}} tags are capitalized. | Note that the {{FILE|INCAR}} tags are capitalized. | ||
<code>shape_grid</code> is a three dimensional integer array which stores the shape of the real space grid, {{TAG|NGXF}}, {{TAG|NGYF}} and {{TAG|NGZF}}, | <code>shape_grid</code> is a three dimensional integer array which stores the shape of the real space grid, {{TAG|NGXF}}, {{TAG|NGYF}} and {{TAG|NGZF}}, | ||
Line 38: | Line 42: | ||
<code>forces</code> and <code>stress</code> are the computed forces and stress tensor and <code>charge_density</code> contains the charge density on the real space grid. | <code>forces</code> and <code>stress</code> are the computed forces and stress tensor and <code>charge_density</code> contains the charge density on the real space grid. | ||
The <code>additions</code> dataclass consists of the following modifiable outputs | The <code>additions</code> dataclass consists of the following modifiable outputs | ||
<syntaxhighlight lang="python" line> | |||
@dataclass | |||
class AdditionsForceAndStress: | |||
total_energy: float | total_energy: float | ||
forces: | forces: DoubleArray | ||
stress: | stress: DoubleArray | ||
</syntaxhighlight> | |||
==Modifying quantities== | ==Modifying quantities== |
Revision as of 10:22, 18 December 2024
PLUGINS/FORCE_AND_STRESS = .True. | .False.
Default: PLUGINS/FORCE_AND_STRESS = .False.
Description: PLUGINS/FORCE_AND_STRESS calls the Python plugin for the force and stress interface for each ionic relaxation step
When PLUGINS/FORCE_AND_STRESS=.TRUE., VASP calls the force_and_stress
Python function at the end of each ionic relaxation step.
The primary use-case of this tag is to modify forces and the stress tensor to be consistent with modifications to the potential performed with PLUGINS/LOCAL_POTENTIAL
Expected inputs
The force_and_stress
Python function expects the following inputs,
def force_and_stress(constants, additions):
where constants
and additions
and Python dataclasses.
The constants
dataclass consists of the following inputs, listed here with their associated datatypes
@dataclass(frozen=True)
class ConstantsForceAndStress:
ENCUT: float
NELECT: float
shape_grid: IntArray
number_ions: int
number_ion_types: int
ion_types: IndexArray
atomic_numbers: IntArray
lattice_vectors: DoubleArray
positions: DoubleArray
ZVAL: DoubleArray
POMASS: DoubleArray
forces: DoubleArray
stress: DoubleArray
charge_density: Optional[DoubleArray] = None
Note that the INCAR tags are capitalized.
shape_grid
is a three dimensional integer array which stores the shape of the real space grid, NGXF, NGYF and NGZF,
number_ions
is the total number of ions listed in the POSCAR file,
number_ion_types
is the number of ion corresponding to each ion type in the convention of the POSCAR file,
ion_types
stores the total number of ion types,
atomic_numbers
contains the atomic number for each atom type,
lattice_vectors
and positions
contain the lattice vectors and positions of the current SCF step
forces
and stress
are the computed forces and stress tensor and charge_density
contains the charge density on the real space grid.
The additions
dataclass consists of the following modifiable outputs
@dataclass
class AdditionsForceAndStress:
total_energy: float
forces: DoubleArray
stress: DoubleArray
Modifying quantities
Modify the quantities listed in additions by adding to them. For example, if you wanted to add one to the forces
import numpy as np
def force_and_stress(constants, additions)
additions.forces += np.ones((constants.number_ions,3))
Mind: You may not make modifications to quantities in constants
|