Hello,
I have been using sfepy to simulate charge currents with Poisson's equation and I would like to add in spin dependence using Valet-Fert theory.
The strong form of the continuity equations are
charge: \Delta(\sigma_{up} \mu{up} + \sigma_{down} \mu{down} ) = 0
spin: \Delta(\mu{up} - \mu{down} ) = (\mu{up} - \mu{down}) / \lambda
where \mu_{up} and \mu_{down} are the chemical potentials for spin up and spin down electrons, \sigma_{up} and \sigma_{down} are the spin dependent conductivities and \lambda is a material constant.
The problem I am looking at is a charge current being driven from a magnetic metal to a non-magnetic metal. My issue is with the Neumann BCs, the spin current is defined as Js = \sigma_{up} grad \mu_{up} - \sigma_{down} grad \mu_{down} which has to be continuous across the interface. I do not know how to implement this in sfepy as I do not know what the fluxes at the interface will be before running the simulation in order to add them as material parameters as in the examples.
Should I define the continuity of spin fluxes at the interface as a separate equation? is this something achievable in sfepy?
Many thanks,
Joe
Hello Joe,
On 07/20/2014 11:55 PM, Joseph Batley wrote:
Hello,
I have been using sfepy to simulate charge currents with Poisson's equation and I would like to add in spin dependence using Valet-Fert theory.
The strong form of the continuity equations are
charge: \Delta(\sigma_{up} \mu{up} + \sigma_{down} \mu{down} ) = 0
spin: \Delta(\mu{up} - \mu{down} ) = (\mu{up} - \mu{down}) / \lambda
where \mu_{up} and \mu_{down} are the chemical potentials for spin up and spin down electrons, \sigma_{up} and \sigma_{down} are the spin dependent conductivities and \lambda is a material constant.
The problem I am looking at is a charge current being driven from a magnetic metal to a non-magnetic metal. My issue is with the Neumann BCs, the spin current is defined as Js = \sigma_{up} grad \mu_{up} - \sigma_{down} grad \mu_{down} which has to be continuous across the interface. I do not know how to implement this in sfepy as I do not know what the fluxes at the interface will be before running the simulation in order to add them as material parameters as in the examples.
Maybe you can use some kind of fixed-point iteration, taking the known fluxes from the previous step?
Should I define the continuity of spin fluxes at the interface as a separate equation? is this something achievable in sfepy?
Yes, that might work. Could you send here the whole system + continuity of fluxes in the weak form? I think a new term might be needed for the continuity.
r.
Many thanks,
Joe
Thanks for the response, here goes
Charge:
$\int_{\Omega} (\sigma_{\uparrow} \nabla \mu_{\uparrow} \nabla \nu + \sigma_{\downarrow} \nabla \mu_{\downarrow} \nabla \delta ) - \int_{\Gamma} (\sigma_{\uparrow} \nu (\nabla \mu_{\uparrow} \cdot n) + \sigma_{\downarrow} \delta (\nabla \mu_{\downarrow} \cdot n) = 0$
This is just conservation of charge. I think I have implimented the weak form correctly by choosing a different test function for each variable $\mu_{\uparrow/\downarrow}$?
Spin:
$\int_{\Omega} (\nabla \mu_{\uparrow} \nabla \nu + \nabla \mu_{\downarrow} \nabla \delta ) - \int_{\Gamma}(\nu (\nabla \mu_{\uparrow} \cdot n) + \delta (\nabla \mu_{\downarrow} \cdot n) = \frac{1}{\lambda} \int_{\Omega} (\mu_{\uparrow} \nu + \mu_{\downarrow} \delta )$
I do not really know how to implement the surface terms here. I can define a current for each spin as: $j_{\uparrow} = \sigma_{\uparrow}(\nabla \mu_{\uparrow} \cdot n)$, $j_{\downarrow} = \sigma_{\downarrow}(\nabla \mu_{\downarrow} \cdot n)$
but the BCs are combinations of these. charge current $j_c = j_{\uparrow} + j_{\downarrow}$ spin current $j_s = j_{\uparrow} - j_{\downarrow}$
I want to make sure these are continuous at the interface between the magnet and non-magnetic metals and I want to be able to set the charge current at one side to be $j_c = 1e^{-8}$
I have attached the problem file I have come up with. I took the surface terms out of the two PDEs and have created two new equations for the BCs. Unfortunately this hasn't worked.
I hope I have given you the information you wanted.
Thanks
Joe
On 07/21/2014 08:22 PM, Joseph Batley wrote:
Thanks for the response, here goes
Charge:
$\int_{\Omega} (\sigma_{\uparrow} \nabla \mu_{\uparrow} \nabla \nu + \sigma_{\downarrow} \nabla \mu_{\downarrow} \nabla \delta ) - \int_{\Gamma} (\sigma_{\uparrow} \nu (\nabla \mu_{\uparrow} \cdot n) + \sigma_{\downarrow} \delta (\nabla \mu_{\downarrow} \cdot n) = 0$
This is just conservation of charge. I think I have implimented the weak form correctly by choosing a different test function for each variable $\mu_{\uparrow/\downarrow}$?
By using two different test functions you solve in fact:
$\Delta(\sigma_{up} \mu_{up}) = 0$ $\Delta(\sigma_{down} \mu_{down}) = 0$
- two independent equations - probably not what you want. It is not the same as your original system.
Spin:
$\int_{\Omega} (\nabla \mu_{\uparrow} \nabla \nu + \nabla \mu_{\downarrow} \nabla \delta ) - \int_{\Gamma}(\nu (\nabla \mu_{\uparrow} \cdot n) + \delta (\nabla \mu_{\downarrow} \cdot n) = \frac{1}{\lambda} \int_{\Omega} (\mu_{\uparrow} \nu + \mu_{\downarrow} \delta )$
Same here. You have two equations in strong form, so use one test function of the first one and another for the second one.
I do not really know how to implement the surface terms here. I can define a current for each spin as: $j_{\uparrow} = \sigma_{\uparrow}(\nabla \mu_{\uparrow} \cdot n)$, $j_{\downarrow} = \sigma_{\downarrow}(\nabla \mu_{\downarrow} \cdot n)$
but the BCs are combinations of these. charge current $j_c = j_{\uparrow} + j_{\downarrow}$ spin current $j_s = j_{\uparrow} - j_{\downarrow}$
I want to make sure these are continuous at the interface between the magnet and non-magnetic metals and I want to be able to set the charge current at one side to be $j_c = 1e^{-8}$
Do the two domains have the same equations? They differ in material parameters only, right?
I have attached the problem file I have come up with. I took the surface terms out of the two PDEs and have created two new equations for the BCs. Unfortunately this hasn't worked.
I hope I have given you the information you wanted.
Pretty much, yes. Could you try reformulating the equations/problem file as recommended above (if you agree with my interpretation of what you wrote :))? I will then try running the file.
Cheers, r.
Ah, thanks you Robert, It appears I did not quite understand the conversion from strong to weak. I have made the changes and attached the problem file.
It looks promising, the post process shows \mu_{c} = \mu_{\uparrow} + \mu_{\downarrow} looks correct so the normal charge current side works, the \mu_{s} = \mu_{\uparrow} - \mu_{\downarrow} which is the spin accumulation however should simply show a peak around the interface which decays with different lengths in each domain.
And yes you're correct, the equations oars the same in both domains, it is only the material parameters that change.
Thanks
Joe
On 07/22/2014 08:08 PM, Joseph Batley wrote:
Ah, thanks you Robert, It appears I did not quite understand the conversion from strong to weak. I have made the changes and attached the problem file.
I have found a thesis "THEORY BASED DESIGN AND OPTIMIZATION OF MATERIALS FOR SPINTRONICS APPLICATIONS", where the same equations are solved by FEM, and it seems to me that what is in the attached file (*) is ok. Have a look at it as well, please.
(*) updates:
- fixed dw_surface_flux material parameter shape (needs a tensor - compile sfepy with -DDEBUG_FMF in site_cfg.py to catch that)
- fixed the Jc boundary condition (not sure about sign...)
- fixed/simplified interface_FM, interface_NM region definitions - now their faces have opposite normals (is that ok?)
- added more things to output for debugging
It looks promising, the post process shows \mu_{c} = \mu_{\uparrow} + \mu_{\downarrow} looks correct so the normal charge current side works, the \mu_{s} = \mu_{\uparrow} - \mu_{\downarrow} which is the spin accumulation however should simply show a peak around the interface which decays with different lengths in each domain.
After the above changes I still do not see a peak. Instead, mu_up and mu_down are the same, so \mu_{s} is zero.
You have more debugging ahead :)
r. PS: you may need to tweak the mesh filename. PPS: one.val material is not needed, you can use simply dw_laplace.i.Omega(d, mu_up)...
And yes you're correct, the equations oars the same in both domains, it is only the material parameters that change.
participants (2)
-
Joseph Batley -
Robert Cimrman