def set_variable(self, varname, value): """Set a the value of a variable.""" # Check if varname is in the internal database. if not is_abivar(varname): raise self.Error("%s is not a valid ABINIT variable." % varname) if varname in self: try: iseq = (self[varname] == value) iseq = np.all(iseq) except ValueError: # array like. iseq = np.allclose(self[varname], value) except: iseq = False if not iseq: msg = "%s is already defined with a different value:\nOLD:\n %s,\nNEW\n %s" % ( varname, str(self[varname]), str(value)) warnings.warn(msg) self[varname] = value # Handle no_multi variables. if varname in _ABINIT_NO_MULTI and self.index != 0: if varname in self.dt0: glob_value = np.array(self.dt0[varname]) isok = np.all(glob_value == np.array(value)) if not isok: err_msg = "NO_MULTI variable: dataset 0: %s, dataset %d: %s" % ( str(glob_value), self.index, str(value)) raise self.Error(err_msg) else: self.dt0.set_variable(varname, value)
def is_abivar(self, varname): """True if varname is a valid Abinit variable.""" return is_abivar(varname)