def test_array_equal(a, b, rtol, atol): assert a is not b assert equal(a, b, rtol=rtol, atol=atol) assert equal({'size': a, 'gamma': True}, {'size': b, 'gamma': True}, rtol=rtol, atol=atol) assert not equal({'size': a, 'gamma': True}, {'size': b, 'gamma': False}, rtol=rtol, atol=atol) assert not equal({'size': a}, b, rtol=rtol, atol=atol) assert not equal(a, {'size': b}, rtol=rtol, atol=atol)
def check_state(self, atoms, tol=1e-15): """Check for system changes since last calculation.""" from ase.calculators.calculator import all_changes, equal if self.atoms is None: system_changes = all_changes[:] else: system_changes = [] if not equal(self.atoms.positions, atoms.positions, atol=tol): system_changes.append('positions') if not equal(self.atoms.numbers, atoms.numbers): system_changes.append('numbers') if not equal(self.atoms.cell, atoms.cell, atol=tol): system_changes.append('cell') if not equal(self.atoms.pbc, atoms.pbc): system_changes.append('pbc') if not equal(self.atoms.get_initial_magnetic_moments(), atoms.get_initial_magnetic_moments(), atol=tol): system_changes.append('initial_magmoms') if not equal(self.atoms.get_initial_charges(), atoms.get_initial_charges(), atol=tol): system_changes.append('initial_charges') return system_changes
def set(self, **kwargs): """Set all parameters. Parameters: -kwargs : Dictionary containing the keywords defined in OpenMXParameters. """ for key, value in kwargs.items(): if key not in self.default_parameters.keys(): raise KeyError('Unkown keyword "%s" and value "%s".' % (key, value)) if key == 'xc' and value not in self.default_parameters.allowed_xc: raise KeyError('Given xc "%s" is not allowed' % value) if key in ['dat_arguments'] and isinstance(value, dict): # For values that are dictionaries, verify subkeys, too. default_dict = self.default_parameters[key] for subkey in kwargs[key]: if subkey not in default_dict: allowed = ', '.join(list(default_dict.keys())) raise TypeError('Unknown subkeyword "{0}" of keyword ' '"{1}". Must be one of: {2}'.format( subkey, key, allowed)) # Find out what parameter has been changed changed_parameters = {} for key, value in kwargs.items(): oldvalue = self.parameters.get(key) if key not in self.parameters or not equal(value, oldvalue): changed_parameters[key] = value self.parameters[key] = value # Set the parameters for key, value in kwargs.items(): # print(' Setting the %s as %s'%(key, value)) self.parameters[key] = value # If Changed Parameter is Critical, we have to reset the results for key, value in changed_parameters.items(): if key in ['xc', 'kpts', 'energy_cutoff']: self.results = {} value = kwargs.get('energy_cutoff') if value is not None and not (isinstance(value, (float, int)) and value > 0): mess = "'%s' must be a positive number(in eV), \ got '%s'" % ('energy_cutoff', value) raise ValueError(mess) atoms = kwargs.get('atoms') if atoms is not None and self.atoms is None: self.atoms = atoms.copy()
def my_set(self, **kwargs): """Set parameters like set(key1=value1, key2=value2, ...). A dictionary containing the parameters that have been changed is returned. Subclasses must implement a set() method that will look at the chaneged parameters and decide if a call to reset() is needed. If the changed parameters are harmless, like a change in verbosity, then there is no need to call reset(). The special keyword 'parameters' can be used to read parameters from a file.""" from ase.calculators.calculator import equal with open('ts_data_EPB.txt', 'a') as tempText: tempText.write('\n Entering my Vasp.set() method. - EPB') if 'parameters' in kwargs: filename = kwargs.pop('parameters') parameters = Parameters.read(filename) parameters.update(kwargs) kwargs = parameters changed_parameters = {} for key, value in kwargs.items(): oldvalue = self.parameters.get(key) with open('ts_data_EPB.txt', 'a') as tempText: tempText.write( f" self.parameters['{key}'] = {oldvalue}; new value = {value}\n" ) if key not in self.parameters or not equal(value, oldvalue): changed_parameters[key] = value self.parameters[key] = value if self.discard_results_on_any_change and changed_parameters: self.reset() with open('ts_data_EPB.txt', 'a') as tempText: tempText.write('\n Exiting my Vasp.set() method. - EPB') return changed_parameters
def get_terminations(self, slab, layers): ''' determine how many terminations for a surface index for a slab with SrO, TiO2, SrO, TiO2 ... ordering, there will be two terminations 'SrO' and 'TiO2' Search from the top to the bottom ''' from ase.build import minimize_rotation_and_translation from ase.calculators.calculator import compare_atoms, equal import pprint nlayer = max(layers) + 1 terminations = {} natoms = len(slab) for i in range(nlayer - 2, 0, -1): atoms = slab[layers == i] formula = atoms.get_chemical_formula(mode='hill') print(formula) inds = [ j for j in range(natoms) if layers[j] in range(i, i - self.nlayer, -1) ] atoms = slab[inds] atoms.wrap() if not terminations: terminations['%s-%s' % (formula, i)] = atoms.copy() else: flag = True atoms1 = atoms.copy() for ter, atoms2 in terminations.items(): if len(atoms1) != len(atoms2): flag = False else: minimize_rotation_and_translation(atoms2, atoms1) if equal(atoms1.arrays, atoms2.arrays, tol=0.1): flag = False if flag: terminations['%s-%s' % (formula, i)] = atoms.copy() print(formula, ter) # view([atoms1, atoms2]) pprint.pprint(terminations) # view(terminations.values()) return terminations
def set(self, **kwargs): """Set all parameters. Parameters: kwargs : Dictionary containing the keywords for deMon """ # Put in the default arguments. kwargs = self.default_parameters.__class__(**kwargs) if 'parameters' in kwargs: filename = kwargs.pop('parameters') parameters = Parameters.read(filename) parameters.update(kwargs) kwargs = parameters changed_parameters = {} for key, value in kwargs.items(): oldvalue = self.parameters.get(key) if key not in self.parameters or not equal(value, oldvalue): changed_parameters[key] = value self.parameters[key] = value return changed_parameters
def set(self, **kwargs): """Set all parameters. Parameters: kwargs : Dictionary containing the keywords for deMon """ # Put in the default arguments. kwargs = self.default_parameters.__class__(**kwargs) if 'parameters' in kwargs: filename = kwargs.pop('parameters') parameters = Parameters.read(filename) parameters.update(kwargs) kwargs = parameters changed_parameters = {} for key, value in kwargs.items(): oldvalue = self.parameters.get(key) if key not in self.parameters or not equal(value, oldvalue): changed_parameters[key] = value self.parameters[key] = value return changed_parameters
def set(self, **kwargs): """Sets parameters list and determines if calculation needs to be reset *for now it is reset if any parameters change* """ # Read parameters from file if 'parameters' in kwargs: filename = kwargs.pop('parameters') parameters = Parameters.read(filename) parameters.update(kwargs) kwargs = parameters changed_parameters = {} for key, value in kwargs.items(): oldvalue = self.parameters.get(key) if key not in self.parameters or not equal(value, oldvalue): changed_parameters[key] = value self.parameters[key] = value if changed_parameters: self.reset() return changed_parameters
def check_state(self, atoms, tol=1e-15): """Check for system changes since last calculation.""" from ase.calculators.calculator import all_changes, equal if self.atoms is None: system_changes = all_changes[:] else: system_changes = [] if not equal(self.atoms.positions, atoms.positions, tol): system_changes.append('positions') if not equal(self.atoms.numbers, atoms.numbers): system_changes.append('numbers') if not equal(self.atoms.cell, atoms.cell, tol): system_changes.append('cell') if not equal(self.atoms.pbc, atoms.pbc): system_changes.append('pbc') if not equal(self.atoms.get_initial_magnetic_moments(), atoms.get_initial_magnetic_moments(), tol): system_changes.append('initial_magmoms') if not equal(self.atoms.get_initial_charges(), atoms.get_initial_charges(), tol): system_changes.append('initial_charges') return system_changes
def test_array_almost_equal(a, b, rtol, atol): assert a is not b assert equal(a, b, rtol=rtol, atol=atol) assert equal({'size': a, 'gamma': True}, {'size': b, 'gamma': True}, rtol=rtol, atol=atol)
def test_single_value(a, b, rtol, atol): assert equal(a, b, rtol=rtol, atol=atol)