def __init__(self, mesh, name='unnamed'): self.mesh = mesh self.name = name self.n = mesh.n self.n_nonzero = self.n self.ngbs = mesh.neighbours self._mu_s = np.zeros(self.n, dtype=np.float) self.spin = np.ones(3 * self.n, dtype=np.float) self.spin_last = np.ones(3 * self.n, dtype=np.float) self.random_spin = np.zeros(3 * self.n, dtype=np.float) self._H = np.zeros(3 * self.n, dtype=np.float) self._skx_number = np.zeros(self.n, dtype=np.float) self.interactions = [] self.create_tablewriter() self.vtk = SaveVTK(self.mesh, name=name) self.hexagonal_mesh = False if mesh.mesh_type == 'hexagonal': self.hexagonal_mesh = True #FIX ME !!!! self.nngbs = np.copy(mesh.neighbours) else: self.nngbs = mesh.next_neighbours self.step = 0 self.skx_num = 0 self.mc = clib.monte_carlo() self.set_options()
def __init__(self, mesh, name='unnamed'): self.mesh = mesh self.name = name self.n = mesh.n self.n_nonzero = self.n self.ngbs = mesh.neighbours self._mu_s = np.zeros(self.n, dtype=np.float) self.spin = np.ones(3 * self.n, dtype=np.float) self.spin_last = np.ones(3 * self.n, dtype=np.float) self.random_spin = np.zeros(3 * self.n, dtype=np.float) self._H = np.zeros(3 * self.n, dtype=np.float) self._skx_number = np.zeros(self.n, dtype=np.float) self.interactions = [] self.create_tablewriter() self.vtk = SaveVTK(self.mesh, name=name) self.step = 0 self.skx_num = 0 self.set_options()
def __init__(self, mesh, name='unnamed', integrator='sundials'): """Simulation object. *Arguments* name : the Simulation name (used for writing data files, for examples) """ self.t = 0 self.name = name self.mesh = mesh self.n = mesh.n self.n_nonzero = mesh.n self.unit_length = mesh.unit_length self._alpha = np.zeros(self.n, dtype=np.float) self._Ms = np.zeros(self.n, dtype=np.float) self._Ms_inv = np.zeros(self.n, dtype=np.float) self.spin = np.ones(3 * self.n, dtype=np.float) self.spin_last = np.ones(3 * self.n, dtype=np.float) self._pins = np.zeros(self.n, dtype=np.int32) self.field = np.zeros(3 * self.n, dtype=np.float) self.dm_dt = np.zeros(3 * self.n, dtype=np.float) self._skx_number = np.zeros(self.n, dtype=np.float) self.interactions = [] self.pin_fun = None self.integrator_tolerances_set = False self.step = 0 if integrator == "sundials": self.integrator = SundialsIntegrator(self.spin, self.sundials_rhs) elif integrator == "euler" or integrator == "rk4": self.integrator = StepIntegrator(self.spin, self.step_rhs, integrator) else: raise NotImplemented("integrator must be sundials, euler or rk4") self.saver = DataSaver(self, name + '.txt') self.saver.entities['E_total'] = { 'unit': '<J>', 'get': lambda sim: sim.compute_energy(), 'header': 'E_total'} self.saver.entities['m_error'] = { 'unit': '<>', 'get': lambda sim: sim.compute_spin_error(), 'header': 'm_error'} self.saver.entities['skx_num'] = { 'unit': '<>', 'get': lambda sim: sim.skyrmion_number(), 'header': 'skx_num'} self.saver.entities['rhs_evals'] = { 'unit': '<>', 'get': lambda sim: self.integrator.rhs_evals, 'header': 'rhs_evals'} self.saver.entities['real_time'] = { 'unit': '<s>', 'get': lambda _: time.time(), # seconds since epoch 'header': 'real_time'} self.saver.update_entity_order() # This is for old C files codes using the xperiodic variables self.xperiodic, self.yperiodic, self.zperiodic = mesh.periodicity self.vtk = SaveVTK(self.mesh, name=name) self.set_default_options()
def __init__(self, mesh, name='unnamed', use_jac=False): """Simulation object. *Arguments* name : the Simulation name (used for writing data files, for examples) """ self.t = 0 self.name = name self.mesh = mesh self.n = mesh.n self.n_nonzero = mesh.n self.unit_length = mesh.unit_length self._alpha = np.zeros(self.n, dtype=np.float) self._mu_s = np.zeros(self.n, dtype=np.float) self._mu_s_inv = np.zeros(self.n, dtype=np.float) self.spin = np.ones(3 * self.n, dtype=np.float) self.spin_last = np.ones(3 * self.n, dtype=np.float) self._pins = np.zeros(self.n, dtype=np.int32) self.field = np.zeros(3 * self.n, dtype=np.float) self.dm_dt = np.zeros(3 * self.n, dtype=np.float) self._skx_number = np.zeros(self.n, dtype=np.float) self.interactions = [] self.pin_fun = None self.step = 0 self.saver = DataSaver(self, name + '.txt') self.saver.entities['E_total'] = { 'unit': '<J>', 'get': lambda sim: sim.compute_energy(), 'header': 'E_total' } self.saver.entities['m_error'] = { 'unit': '<>', 'get': lambda sim: sim.compute_spin_error(), 'header': 'm_error' } self.saver.entities['skx_num'] = { 'unit': '<>', 'get': lambda sim: sim.skyrmion_number(), 'header': 'skx_num' } self.saver.update_entity_order() # This is only for old C files using the xperiodic variable self.xperiodic, self.yperiodic = mesh.periodicity[0], mesh.periodicity[ 1] self.vtk = SaveVTK(self.mesh, name=name) if use_jac is not True: self.vode = cvode.CvodeSolver(self.spin, self.sundials_rhs) else: self.vode = cvode.CvodeSolver(self.spin, self.sundials_rhs, self.sundials_jtn) self.set_default_options() self.set_tols() # When initialising the integrator in the self.vode call, the CVOde # class calls the set_initial_value function (with flag_m=0), which # initialises a new integrator and allocates memory in this process. # Now, when we set the magnetisation, we will use the same memory # setting this flag_m to 1, so instead of calling CVodeInit we call # CVodeReInit. If don't, memory is allocated in every call of set_m self.flag_m = 1
def __init__(self, mesh, name='unnamed', use_jac=False): """Simulation object. *Arguments* name : the Simulation name (used for writing data files, for examples) """ self.t = 0 self.name = name self.mesh = mesh self.n = mesh.n self.n_nonzero = mesh.n self.unit_length = mesh.unit_length self._alpha = np.zeros(self.n, dtype=np.float) self._mu_s = np.zeros(self.n, dtype=np.float) self._mu_s_inv = np.zeros(self.n, dtype=np.float) self.spin = np.ones(3 * self.n, dtype=np.float) self.spin_last = np.ones(3 * self.n, dtype=np.float) self._pins = np.zeros(self.n, dtype=np.int32) self.field = np.zeros(3 * self.n, dtype=np.float) self.dm_dt = np.zeros(3 * self.n, dtype=np.float) self._skx_number = np.zeros(self.n, dtype=np.float) self.interactions = [] self.pin_fun = None self.step = 0 self.saver = DataSaver(self, name + '.txt') self.saver.entities['E_total'] = { 'unit': '<J>', 'get': lambda sim: sim.compute_energy(), 'header': 'E_total' } self.saver.entities['m_error'] = { 'unit': '<>', 'get': lambda sim: sim.compute_spin_error(), 'header': 'm_error' } self.saver.entities['skx_num'] = { 'unit': '<>', 'get': lambda sim: sim.skyrmion_number(), 'header': 'skx_num' } self.saver.update_entity_order() # This is only for old C files using the xperiodic variable self.xperiodic, self.yperiodic = mesh.periodicity[0], mesh.periodicity[ 1] self.vtk = SaveVTK(self.mesh, name=name) if use_jac is not True: self.vode = cvode.CvodeSolver(self.spin, self.sundials_rhs) else: self.vode = cvode.CvodeSolver(self.spin, self.sundials_rhs, self.sundials_jtn) self.set_default_options() self.set_tols()
# Number of images to be generated number_images = 19 # ----------------------------------------------------------------------------- mu_s = 0.846 * const.mu_B a = 0.125 nx = 320 ny = 185 # MESH mesh = HexagonalMesh(a, nx, ny, alignment='square', unit_length=1e-9) vtk_saver = SaveVTK(mesh, name='sk_displ') centre_x = (np.max(mesh.coordinates[:, 0]) + np.min(mesh.coordinates[:, 0])) * 0.5 centre_y = (np.max(mesh.coordinates[:, 1]) + np.min(mesh.coordinates[:, 1])) * 0.5 lx = (np.max(mesh.coordinates[:, 0]) - np.min(mesh.coordinates[:, 0])) ly = (np.max(mesh.coordinates[:, 1]) - np.min(mesh.coordinates[:, 1])) # Create a simulation for the FM state and one for the skyrmion sim = Sim(mesh, name='sk_displ') sim.mu_s = mu_s sim_sk = Sim(mesh) sim_sk.mu_s = mu_s