PLUGINS/LOCAL POTENTIAL: Difference between revisions
No edit summary |
No edit summary |
||
Line 34: | Line 34: | ||
==Modifying quantities== | ==Modifying quantities== | ||
Modify the quantities listed in additions by adding to them. For example, if you wanted to add one to every real space local potential grid point, | |||
import numpy as np | |||
def local_potential(constants, additions) | |||
additions.total_potential += np.ones(constants.shape_grid) | |||
{{NB| mind | You may not make modifications to quantities in <code>constants</code>}} | |||
Revision as of 07:38, 11 June 2024
PLUGINS/LOCAL_POTENTIAL = .TRUE. | .FALSE.
Description: PLUGINS/LOCAL_POTENTIAL calls the Python plugin for the local potential interface for each SCF step
When PLUGINS/LOCAL_POTENTIAL=.TRUE., VASP calls the local_potential
Python function at the end of each SCF step.
See here for details on how to setup your Python script such that VASP can recognize it.
The primary use-case of this tag is to add a quantity on the real space grid to the local potential and a scalar quantity to the total energy of a VASP calculation through a Python plugin.
Expected Inputs
The local_potential
Python function expects the following inputs,
def local_potential(constants, additions):
where constants
and additions
and Python dataclasses.
The constants
dataclass consists of the following inputs, listed here with their associated datatypes
ENCUT: float NELECT: float shape_grid: NDArray[np.int32] number_ions: int number_ion_types: int ion_types: NDArray[np.int32] atomic_numbers: NDArray[np.int32] lattice_vectors: NDArray[np.float64] positions: NDArray[np.float64] ZVAL: NDArray[np.float64] charge_density: NDArray[np.float64] hartree_potential: NDArray[np.float64] ion_potential: NDArray[np.float64] dipole_moment: NDArray[np.float64]
Mind: The dipole moment is provided only if LDIPOL=.TRUE. |
The additions
dataclass consists of the following modifiable outputs
total_energy: float total_potential: NDArray[np.float64]
Modifying quantities
Modify the quantities listed in additions by adding to them. For example, if you wanted to add one to every real space local potential grid point,
import numpy as np def local_potential(constants, additions) additions.total_potential += np.ones(constants.shape_grid)
Mind: You may not make modifications to quantities in constants
|