MagneticSimulation / MicroMagnetic.jl

MIT License
30 stars 5 forks source link

Ask for help about adding interfacial dmi function. #1

Open bowenphys opened 9 months ago

bowenphys commented 9 months ago

JuMag.cuda_using_double(true)

mesh = CubicMeshGPU(nx=150, ny=50, nz=1, pbc="xy")

function m0_fun(i,j,k, dx, dy, dz) r2 = (i-70)^2 + (j-25)^2 if r2 < 10^2 return (0.01, 0, -1) end return (0,0,1) end

function relax_system() sim = Sim(mesh, driver="SD", name="skx") set_mu_s(sim, mu_s_1) init_m0(sim, m0_fun)

J = 50 k_B add_exch(sim, J, name="exch") add_dmi(sim, 0.5J, name="dmi", type = "bulk")

Hz = 0.2 * J / mu_s_1 add_zeeman(sim, (0,0,Hz))

relax(sim, maxsteps=2000, stopping_dmdt=0.01)

save_vtk(sim, "skx", fields=["exch", "dmi"])

end

relax_system()

- i get a error:ERROR: MethodError: no method matching add_dmi(::JuMag.AtomicSimGPU{Float64}, ::Float64; type::String)

Closest candidates are: add_dmi(::JuMag.AtomicSimGPU, ::Real; name) got unsupported keyword argument "type" @ JuMag C:\Users\11302.julia\packages\JuMag\yH1A2\src\atomistic\sim.jl:212 add_dmi(::JuMag.AbstractSim, ::Real; name, type) @ JuMag C:\Users\11302.julia\packages\JuMag\yH1A2\src\add_field.jl:263 add_dmi(::JuMag.AbstractSim, ::Any) got unsupported keyword argument "type" @ JuMag C:\Users\11302.julia\packages\JuMag\yH1A2\src\add_field.jl:297 ...

Stacktrace: [1] kwerr(::@NamedTuple{type::String}, ::Function, ::JuMag.AtomicSimGPU{Float64}, ::Float64) @ Base .\error.jl:165 [2] relax_system() @ Main c:\Users\11302\Desktop\Code\Julia\JuMag\test.jl:24 [3] top-level scope @ c:\Users\11302\Desktop\Code\Julia\JuMag\test.jl:35


it is also error for    add_dmi(sim, D, type="interfacial")  add_dmi(sim, D, type="bulk")
my julia version is 1.10rc.
ww1g11 commented 9 months ago

I checked the source codes and found that the atomistic part only support the bulk dmi.

function relax_system()
  sim = Sim(mesh, driver="SD", name="skx")
  set_mu_s(sim, mu_s_1)
  init_m0(sim, m0_fun)

  J = 50 * k_B
  add_exch(sim, J, name="exch")
  add_dmi(sim, 0.5*J, name="dmi")

  Hz = 0.2 * J / mu_s_1
  add_zeeman(sim, (0,0,Hz))

  relax(sim, maxsteps=2000, stopping_dmdt=0.1)

  save_vtk(sim, "skx", fields=["exch", "dmi"])
end

A possible solution for the interfacial dmi is to use the micromagnetic code by mapping the parameters from atomistic model to micromagnetic model using A=J/2a and D=D_0^2/a^2.

We will tidy up JuMag code soon and add the interfacial dmi for atomistic part then.