def from_atom_indices(cls, atoms, mask=None, list=None, force_fortran_indexing=True): """ Construct a new Table containing atomic indices from a list or mask The new table will include 4 integer columns, for indices plus shifts, and is suitable for passing to bfs_step, construct_hysteretic_region, etc. If force_fortran_indexing is True (the default), all atom indices are converted to Fortran 1-based indexing. """ orig_fortran_indexing = get_fortran_indexing() set_fortran_indexing(force_fortran_indexing) try: if mask is None and list is None: raise ValueError('Either mask or list must be present.') if list is not None and force_fortran_indexing and not orig_fortran_indexing: # we were given 0-based atom indices, convert to 1-based indices list = np.array(list) + 1 if mask is not None: if len(mask) != len(atoms): raise ValueError('size of mask must equal number of atoms') mask = mask.astype(bool) # use indexing style given by force_fortran_indexing list = atoms.indices[mask] self = cls(4, 0, 0, 0) self.append(blank_rows=len(list)) self.int[:, :] = 0 if get_fortran_indexing(): first_column = 1 else: first_column = 0 self.int[first_column, :] = list finally: set_fortran_indexing(orig_fortran_indexing) self.atoms = weakref.ref(atoms) return self
import argparse import numpy as np from ase.io.xyz import write_xyz from quippy import AtomsReader from quippy import set_fortran_indexing set_fortran_indexing(False) parser = argparse.ArgumentParser() parser.add_argument("-r", "--radius", default=40.0, type=float, help="radius around cracktip to cutout (default 40\A)") parser.add_argument("-i", "--input", default="crack_traj.xyz", help="trajectory file to cut crack tip from.") parser.add_argument("-o", "--output", default="cracktip_zone.xyz", help="trajectory file to write cracktip region to.") args = parser.parse_args() def append(ats, rr, initial_crack, output_file='joined.xyz'): num_images = len(ats) for i, at in enumerate(ats): print i + 1, '/', num_images, initial_crack fixed_mask = (np.sqrt(
from matscipy.socketcalc import VaspClient, SocketCalculator from simulate_crack import update_qm_region_context, fix_edges, set_qmmm_pot, pass_print_context,\ check_if_cracked_context, pass_trajectory_context from quippy import Atoms, set_fortran_indexing from quippy.io import AtomsWriter, AtomsReader from quippy.lotf import LOTFDynamics, update_hysteretic_qm_region from quippy.crack import get_strain, get_energy_release_rate,\ ConstantStrainRate, find_crack_tip_stress_field from quippy.clusters import HYBRID_NO_MARK, HYBRID_ACTIVE_MARK from quippy.potential import Potential, ForceMixingPotential from quippy.system import verbosity_set_minimum, verbosity_to_str set_fortran_indexing(False) VERBOSITY = 3 verbosity_set_minimum(VERBOSITY) print verbosity_to_str(VERBOSITY) def log_pred_corr_errors(dynamics, logfile): logline = '%s err %10.1f%12.6f%12.6f\n' % (dynamics.state_label, dynamics.get_time()/units.fs, dynamics.rms_force_error, dynamics.max_force_error) print logline logfile.write(logline) #lotf simulation parameters extrapolate_steps = 5 # Number of steps for predictor-corrector # interpolation and extrapolation
from ase.optimize import FIRE from ase.optimize.precon import PreconFIRE, Exp import argparse from distutils import spawn from imeall import app from ForceMixerCarver import ForceMixingCarvingCalculator from matscipy.socketcalc import VaspClient, SocketCalculator from quippy import AtomsReader, AtomsWriter from quippy import Potential, set_fortran_indexing from imeall.calc_elast_dipole import find_h_atom set_fortran_indexing(True) class NEBAnalysis(object): def __init__(self): pass def save_barriers(self, images, neb, prefix=""): """ Saves the NEB results and plots energy barrier. Arguments: images :: prefix :: neb :: :class:ase:`NEB` """ if not os.path.exists('NEB_images'): os.mkdir('NEB_images')