PLUGINS/FORCE AND STRESS: Difference between revisions

From VASP Wiki
Line 45: Line 45:
Modify the quantities listed in additions by adding to them. For example, if you wanted to add one to the forces
Modify the quantities listed in additions by adding to them. For example, if you wanted to add one to the forces
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
import numpy as np
def force_and_stress(constants, additions)
def force_and_stress(constants, additions)
     additions.forces += np.ones((constants.number_ions,3))
     additions.forces += np.ones((constants.number_ions,3))

Revision as of 13:45, 16 October 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

   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]
   POMASS: NDArray[np.float64]
   forces: NDArray[np.float64]
   stress: NDArray[np.float64]
   charge_density: NDArray[np.float64]

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

   total_energy: float
   forces: NDArray[np.float64]
   stress: NDArray[np.float64]

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