pyiron.interactive.activation_relaxation_technique module¶
-
class
pyiron.interactive.activation_relaxation_technique.
ART
(project, job_name)[source]¶ Bases:
pyiron.atomistics.job.interactivewrapper.InteractiveWrapper
Apply an artificial force according to the Activation Relaxation Technique (ART) DOI:https://doi.org/10.1103/PhysRevE.57.2419
The applied force f_art is calculated from the original force f by:
f_art = f-(1+gamma)*np.dot(n,f)*n
where gamma is a parameter to be determined in the input (default: 0.1) and n is the direction along which the force is reversed (3d-vector). In order to homogenize the total force in the system, f_art is distributed among atoms specified by non_art_id (default: all atoms), or if fix_layer is defined, the forces acting on all the other atoms along the direction n are cancelled. Note: Since the energy is not compatible with the forces anymore, structure optimization methods which rely on the energy variation (such as conjugate gradient) cannot/should not be used.
- Input:
art_id (int): atom id on which ART force is applied
direction (list/numpy.ndarray): direction along which force is reversed
gamma (float): prefactor for force inversion. v.s.
non_art_id (list/numpy.ndarray): list of atoms to be used for the force cancellation
- fix_layer (bool): whether or not to fix all other atoms on the layer perpendicular
to the direction along which force is reversed.
Example
# Structure creation >>> vacancy_position = structure.positions[0] >>> del structure[0] >>> neighbors = structure.get_neighborhood(vacancy_position) >>> direction = neighbors.vecs[0] >>> art_id = neighbors.indices[0] >>> structure.positions[art_id] -= 0.5*direction
# Job creation >>> some_atomistic_job.structure = structure >>> art = ART(job_name=’art’) >>> art.ref_job = some_atomistic_job >>> art.input.art_id = art_id >>> art.input.direction = direction >>> some_minimizer.ref_job = art >>> some_minimizer.run()
-
property
art
¶
-
run_if_interactive
()[source]¶ For jobs which executables are available as Python library, those can also be executed with a library call instead of calling an external executable. This is usually faster than a single core python job.
-
class
pyiron.interactive.activation_relaxation_technique.
ARTIntOutput
(job)[source]¶ Bases:
pyiron.atomistics.job.interactivewrapper.ReferenceJobOutput
-
property
forces
¶
-
property