Coder Social home page Coder Social logo

Question on spin transfer torque about spirit HOT 6 OPEN

sfragkos avatar sfragkos commented on June 27, 2024
Question on spin transfer torque

from spirit.

Comments (6)

sfragkos avatar sfragkos commented on June 27, 2024

Can someone please tell me what are the units of spin transfer torque u, that I give as an input in the GUI???

from spirit.

GPMueller avatar GPMueller commented on June 27, 2024

Dear Sotirios, sorry for the late reply, but it's actually a feature we rarely used and don't know the units by heart. We obviously should have documented it better.

I believe this is the relevant equation
grafik
and you can read up on the details in this thesis. I hope that will allow you to figure out the correct units.


To make sure you have your units correct, I would suggest that you compare equation (10) from Phys. Rev. B 99, 224414 (2019) (arxiv version in case you don't have access to PRB) to the implementation,

if (a_j > 0)
{
if (parameters.stt_use_gradient)
{
auto& boundary_conditions = this->systems[0]->hamiltonian->boundary_conditions;
// Gradient approximation for in-plane currents
Vectormath::directional_gradient(image, geometry, boundary_conditions, je, s_c_grad); // s_c_grad = (j_e*grad)*S
Vectormath::add_c_a ( dtg * a_j * ( damping - beta ), s_c_grad, force_virtual); // TODO: a_j durch b_j ersetzen
Vectormath::add_c_cross( dtg * a_j * ( 1 + beta * damping ), s_c_grad, image, force_virtual); // TODO: a_j durch b_j ersetzen
// Gradient in current richtung, daher => *(-1)
}
else
{
// Monolayer approximation
Vectormath::add_c_a (-dtg * a_j * ( damping - beta ), s_c_vec, force_virtual);
Vectormath::add_c_cross(-dtg * a_j * ( 1 + beta * damping ), s_c_vec, image, force_virtual);
}
}

But note the corresponding factors and that the difference between STT and SOT, which is here expressed as gradient (i.e. bulk current) vs monolayer-approximation:

// STT
// - monolayer
scalar a_j = parameters.stt_magnitude;
Vector3 s_c_vec = parameters.stt_polarisation_normal;
// - gradient
scalar b_j = a_j; // pre-factor b_j = u*mu_s/gamma (see bachelorthesis Constantin)
scalar beta = parameters.beta; // non-adiabatic parameter of correction term
Vector3 je = s_c_vec;// direction of current

Note also figure 6 in the paper, which reproduces results from previous literature.

from spirit.

sfragkos avatar sfragkos commented on June 27, 2024

Dear G. P. Mueller,

Thank you for your answer.

In both Gradient and Monolayer method a_j seems to play key role in the implementation.

if (a_j > 0)
{
if (parameters.stt_use_gradient)
{
auto& boundary_conditions = this->systems[0]->hamiltonian->boundary_conditions;
// Gradient approximation for in-plane currents
Vectormath::directional_gradient(image, geometry, boundary_conditions, je, s_c_grad); // s_c_grad = (j_e*grad)*S
Vectormath::add_c_a ( dtg * a_j * ( damping - beta ), s_c_grad, force_virtual); // TODO: a_j durch b_j ersetzen
Vectormath::add_c_cross( dtg * a_j * ( 1 + beta * damping ), s_c_grad, image, force_virtual); // TODO: a_j durch b_j ersetzen
// Gradient in current richtung, daher => *(-1)
}
else
{
// Monolayer approximation
Vectormath::add_c_a (-dtg * a_j * ( damping - beta ), s_c_vec, force_virtual);
Vectormath::add_c_cross(-dtg * a_j * ( 1 + beta * damping ), s_c_vec, image, force_virtual);
}
}

In the implementation you also mention:

// STT 
// - monolayer 
scalar **a_j = parameters.stt_magnitude**; 
Vector3 s_c_vec = parameters.stt_polarisation_normal; 
// - gradient 
scalar **b_j = a_j**;    // pre-factor **b_j = u*mu_s/gamma** (see bachelorthesis Constantin) 
scalar beta = parameters.beta;  // non-adiabatic parameter of correction term 
Vector3 je = s_c_vec;// direction of current 

In the case of monolayer method, it seams that the stt_magnitude refers to a_j, which has units of magnetic field (Tesla) accoring to P. Chureemart et al. (PRB 83, 184416 (2011)).

But in gradient method you mention:

b_j = a_j;    // pre-factor b_j = u*mu_s/gamma 

Here b_j, according to b_j = u*mu_s/gamma, has units of EnergySpatial_dimensions (eV times meter???), which doesn't make sense.
According to Zhang-Li model and your paper P. Chureemart et al. (PRB 83, 184416 (2011)), STT is described by a_j which has units of Magnetic field and it's proportional to the injected current density , and not from some b_j which is equal to a_j = u
mu_s/gamma

In some line of the "Gradient method" you also comment: //replace a_j with b_j
But the only definition of b_j in the code is that it is equal to a_j, where a_j is just the stt_magnitude, probably with units of magnetic field. Is that correct?

Therefore, shouldn't this mean that the input parameter llg_stt_magnitude is actually in Tesla for both gradient and monolaer methods?

Thank you very much

PS: The thesis you are referring complicates things. It uses a lot the u*mu_s/gamma but doesnt use any clear definition (and also no units). Sometimes is referred as STT, or spin current, or current density, or as something proportional to STT or spin current.

from spirit.

sfragkos avatar sfragkos commented on June 27, 2024

I looked at it a little bit more at the code and I finally believe that:

For both Gradient and Monolayer, the input is a_j and has units of energy. The a_j in P. Chureemart et al. is in Tesla because it is devided by mu_B.

Now the question is: a_j is in eV or meV?

I guess it is in meV because the parameters in Hamiltonian are also set in meV.

Do you think this is correct?

from spirit.

GPMueller avatar GPMueller commented on June 27, 2024

dt is in picoseconds, gamma has units of rad/(ps * T) and mu_B has units of meV/T.
dtg = parameters.dt * Constants::gamma / Constants::mu_B / (1 + damping*damping) should therefore have units of rad/meV.

I believe the resulting force_virtual should have units of rad, which which brings me to the same conclusion you arrived at: that u is in meV.

Please note that I haven't worked on this topic in about 3 years, so please verify this yourself. In the end, the units should also match with the equation
grafik
which lets you calculate the current density |j_e| corresponding to your choice of u.

from spirit.

sfragkos avatar sfragkos commented on June 27, 2024

Thank you very much.

I have one last question. j_e is referring to electron current density or to spin current density?
If its electron current density, shouldn't Spin Hall angle be present in the equation below?
image

from spirit.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.