Exemple #1
0
    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()
Exemple #2
0
    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()
Exemple #3
0
    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()
Exemple #4
0
    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
Exemple #5
0
    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()
Exemple #6
0
# 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