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
interactive_close()[source]

interactive close is not implemtned for MetaJobs

interactive_forces_getter()[source]
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.

set_input_to_read_only()[source]

This function enforces read-only mode for the input classes, but it has to be implement in the individual classes.

validate_ready_to_run()[source]

check whether art_id and direction are set

class pyiron.interactive.activation_relaxation_technique.ARTIntOutput(job)[source]

Bases: pyiron.atomistics.job.interactivewrapper.ReferenceJobOutput

property forces
class pyiron.interactive.activation_relaxation_technique.ARTInteractive(art_id, direction, gamma=0.1, fix_layer=False, non_art_id=None)[source]

Bases: object

get_forces(f_in)[source]