Example #1
0
def test_compare_energies():
    ref = np.loadtxt(os.path.join(MODULE_DIR, "energies_ref.txt"))
    if not os.path.isfile(os.path.join(MODULE_DIR, "energies.txt")) \
       or (os.path.getctime(os.path.join(MODULE_DIR, "energies.txt")) <
           os.path.getctime(os.path.abspath(__file__))):
        run_finmag()

    computed = np.loadtxt(os.path.join(MODULE_DIR, "energies.txt"))
    assert np.size(ref) == np.size(computed), "Compare number of energies."

    vol = mesh_volume(mesh) * unit_length**mesh.topology().dim()
    #30x30x100nm^3 = 30x30x100=9000

    # Compare exchange energy...
    exch = computed[:, 0] / vol  # <-- ... density!
    exch_nmag = ref[:, 0]

    diff = abs(exch - exch_nmag)
    rel_diff = np.abs(diff / max(exch))
    print "Exchange energy, max relative error:", max(rel_diff)
    assert max(rel_diff) < 0.002, \
        "Max relative error in exchange energy = {} is larger than " \
        "tolerance (= {})".format(max(rel_diff), REL_TOLERANCE)

    # Compare demag energy
    demag = computed[:, 1] / vol
    demag_nmag = ref[:, 1]

    diff = abs(demag - demag_nmag)
    rel_diff = np.abs(diff / max(demag))
    print "Demag energy, max relative error:", max(rel_diff)
    # Don't really know why this is ten times higher than everyting else.
    assert max(rel_diff) < REL_TOLERANCE*10, \
        "Max relative error in demag energy = {} is larger than " \
        "tolerance (= {})".format(max(rel_diff), REL_TOLERANCE)

    # Plot
    p.plot(exch_nmag, 'o', mfc='w', label='nmag')
    p.plot(exch, label='finmag')
    p.xlabel("time step")
    p.ylabel("$e_\mathrm{exch}\, (\mathrm{Jm^{-3}})$")
    p.legend()
    p.savefig(os.path.join(MODULE_DIR, "exchange_energy.pdf"))
    p.savefig(os.path.join(MODULE_DIR, "exchange_energy.png"))
    p.close()

    p.plot(demag_nmag, 'o', mfc='w', label='nmag')
    p.plot(demag, label='finmag')
    p.xlabel("time step")
    p.ylabel("$e_\mathrm{demag}\, (\mathrm{Jm^{-3}})$")
    p.legend()
    p.savefig(os.path.join(MODULE_DIR, "demag_energy.pdf"))
    p.savefig(os.path.join(MODULE_DIR, "demag_energy.png"))
    #p.show()
    p.close()
    print "Energy plots written to exchange_energy.pdf and demag_energy.pdf"
Example #2
0
    def set_default_values(self):
        self.Ms = Field(df.FunctionSpace(self.mesh, 'DG', 0),
                        8.6e5)  # A/m saturation magnetisation
        self._pins = np.array([], dtype="int")
        self.volumes = df.assemble(
            df.dot(df.TestFunction(self.S3), df.Constant([1, 1, 1])) *
            df.dx).array()
        self.Volume = mesh_volume(self.mesh)
        self.real_volumes = self.volumes * self.unit_length**3

        self.m_pred = np.zeros(self.m.shape)

        self.integrator = native_llb.StochasticSLLGIntegrator(
            self.m, self.m_pred, self._Ms, self._T, self.real_volumes,
            self._alpha, self.stochastic_update_field, self.method)

        self.alpha = 0.1
        self._gamma = consts.gamma
        self._seed = np.random.random_integers(4294967295)
        self.dt = 1e-13
        self.T = 0
Example #3
0
def test_cubic_anisotropy_energy():
    mesh = df.BoxMesh(df.Point(0, 0, 0), df.Point(1, 1, 40), 1, 1, 40)
    volume = mesh_volume(mesh) * unit_length**3
    S3 = df.VectorFunctionSpace(mesh, "Lagrange", 1)
    S1 = df.FunctionSpace(mesh, "Lagrange", 1)

    m = Field(S3)
    m.set((0, 0, 1))

    Ms_dg = Field(df.FunctionSpace(mesh, 'DG', 0), Ms)

    ca = CubicAnisotropy(u1, u2, K1, K2, K3)
    ca.setup(m, Ms_dg, unit_length)

    energy = ca.compute_energy()
    # energy_expected = 8.3e-20  # oommf cubicEight_100pc.mif -> ErFe2.odt
    energy_expected = compute_cubic_energy() * volume
    print "cubic anisotropy energy = {}, expected {}.".format(
        energy, energy_expected)

    rel_diff = abs(energy - energy_expected) / abs(energy_expected)
    assert rel_diff < 1e-10
def test_compare_energies():
    #Dictionary for finmag exchange results
    exch = {}
    #Dictionary for finmag demag results
    demag = {}
    for demagsolver in demagsolvers:
        ref = np.loadtxt(
            os.path.join(MODULE_DIR, demagsolver + "energies_ref.txt"))
        if not os.path.isfile(os.path.join(MODULE_DIR, demagsolver+"energies.txt")) \
           or (os.path.getctime(os.path.join(MODULE_DIR, demagsolver+"energies.txt")) <
               os.path.getctime(os.path.abspath(__file__))):
            run_finmag(demagsolver)

        computed = np.loadtxt(
            os.path.join(MODULE_DIR, demagsolver + "energies.txt"))
        assert np.size(ref) == np.size(computed), "Compare number of energies."

        vol = mesh_volume(mesh) * unit_length**mesh.topology().dim()
        #30x30x100nm^3 = 30x30x100=9000

        # Compare exchange energy
        exch[demagsolver] = computed[:, 0] / vol
        exch_nmag = ref[:, 0]

        diff = abs(exch[demagsolver] - exch_nmag)
        rel_diff = np.abs(diff / max(exch[demagsolver]))
        print "Exchange energy Finmag %s Nmag , max relative error:" % demagsolver, max(
            rel_diff)
        assert max(rel_diff) < REL_TOLERANCE, \
                "Max relative error in Finmag %s Nmag exchange energy is %g"%(demagsolver, max(rel_diff))

        # Compare demag energy
        demag[demagsolver] = computed[:, 1] / vol
        demag_nmag = ref[:, 1]

        diff = abs(demag[demagsolver] - demag_nmag)
        rel_diff = np.abs(diff / max(demag[demagsolver]))
        print "Finmag %s Nmag Demag energy, max relative error: %g" % (
            demagsolver, max(rel_diff))
        # Don't really know why this is ten times higher than everyting else.
        assert max(rel_diff) < REL_TOLERANCE*10, \
                "Max relative error in Finmag %s Nmag demag energy is %g" %(demagsolver,max(rel_diff))

    # Plot both FK and GCR demags on the same plot.
    p.title("Finmag vs Nmag Exchange energy")
    p.plot(exch_nmag, 'o', mfc='w', label='Nmag')
    p.plot(exch["FK"], label='Finmag FK')
    p.plot(exch["GCR"], label='Finmag GCR')
    p.xlabel("Time step")
    p.ylabel("$\mathsf{E_{exch}}$")
    p.legend()
    p.savefig(os.path.join(MODULE_DIR, "exchange_energy.png"))
    p.close()

    p.plot(demag_nmag, 'o', mfc='w', label='Nmag')
    p.plot(demag, label='Finmag')
    p.xlabel("Time step")
    p.ylabel("$\mathsf{E_{demag}}$")
    p.legend()
    p.savefig(os.path.join(MODULE_DIR, "demag_energy.png"))
    #p.show()%
    p.close()
    print "Energy plots written to exchange_energy.png and demag_energy.png"
Example #5
0
 def setup(self, S3, m, Ms, unit_length=1):
     mesh = S3.mesh()
     n_dim = mesh.topology().dim()
     self.V = mesh_volume(mesh=mesh) * unit_length**n_dim
     self.Ms = Ms
     self.output_shape = df.Function(S3).vector().array().shape
Example #6
0
def normalise_phi(phi, mesh):
    volume = mesh_volume(mesh)
    average = df.assemble(phi * df.dx)
    phi.vector()[:] = phi.vector().array() - average / volume