Se rendre au contenu

The Solution when you are struggling with MTJ

On this website you can download our solver and find explanations on how it works, 
all for free !!

Our Program

We are a team of 8 students that decided while they where working on a project based on MTJ that they would propose a universal solution through a solver running on Pyhton in order to solve the LLG equations for different applications. We are divided into 3 teams :

Do you want the best solver ?
Download it for free right here ! (NOT a scam) 

What's inside our program ?

  1. ​main.py1 : user's direct inputs
  2. main.py2 : parameters to modify within the main.py file
  3. heff.py : parameters to modify within the heff.py file
  4. coefficients.py : parameters to modify within the coefficients.py file
  5. Resolution & Plot : graphic parameters


main.py


It is the file to run when one wants to launch the program. It is used to set the parameters needed to perform the simulations, the user must input some values, e.g., when running the program:

First, you will be asked to enter the shape of the device (enter 1 if your MTJ is a cylinder) :

Welcome to the resolver of the LLG equation for STT, SOT and VCMA. Don't forget to comment/uncomment the part of the programme dedicated to your device and select your parameters relative or your device directly on the main and on Heff
Enter the shape of your device, put 1 if your MTJ is a cylinder :

​Then new instructions will appear :

Now we will define the parameters of the applied field thetaH and phiH
enter the value of the modulus of the applied field

enter the value of the angle thetaH in radian:

enter the value of the angle PhiH in radian:

Those lines allow you to define the applied field Hap (the value must be of the order of 10^7 and has to be changed in both main.py and heff.py) and the associated angles θh and φh.


​You will then be asked to define the initial magnetization :

Now you will define your initial magnetization
If you want to do the test by default, press 1, if not put 0:

You can either chose the default value, in that case :

Magn0 = np.array([0,1,0])
mz = 0

Otherwise you will have to input θm and φm :

enter the value of the angle thetam in radian:

enter the value of the angle Phim in radian:



​Next, you will have to implement your reference vector with θp and φp :

enter value of thetap

enter value of phip

Along with the anisotropic normalized vector through θUK and φUK :

enter value of thetaUK

enter value of phiUK



​The following instruction requires to enter the volume of the sample :

enter value of volume



​Finally you will be asked to input the temporal parameters for your resolution, the step value along with the total duration :

enter the value of the step resolution of the equation

enter the value of the time of your simulation



It is also possible to select the basic coefficients defined at 0K: the modulus of the anisotropic constant of the two layers KU, the modulus of the magnetization MS0, the value of the gyromagnetic coefficient γ, the damping coefficient α, the thickness of the ferromagnet, the Curie temperature of the material, the permittivity of the material ε, the thickness of the oxide layer and the value of the spin polarization factor η : 

#coefficients at 0K#
    

Ku = 2.1e-4 R = 25e-9 Ms = 0.9e6 thick = 1e-9 gamma = 1.760859e11 alpha = 0.01 Mso = 0.9e6 Tc = 1388 Ko = 0.420 tox = 0.5e-9 esp = 60e-15 ap0 = 0.5 hbar = (6.62e-34)*Pi/2 e = 1.6*10**(-19) heta = 0.7

#Basic coefficients#
    

Pi=math.pi µo=4*Pi*pow(10,-7)



For what concerns the three applications the program allows to set the value of the applied voltage Vcma for the VCMA and for the SOT the values of the values of the spin torque efficiency, the current and the thickness of the fixed layer : 

#STT Parameters#

Iapp=10e-4 JSTT=Iapp/stt.surfacelayer(R) Japp=Iapp/stt.surfacelayer(R)

# Vapp=stt.VoltageaplliedSTT (Mso,ap0,Tc,thick,heta,Temperature,Japp) #VCMA Parameters#

Vcma = -5 Ku2 = stt.KU(esp,Vcma,Ku,tox)

# Ku=stt.KU(Ko,Mso,Temperature,esp,tox,Vcma,Tc) #SOT parameters#

Theta0 = 0.5 JSOT=1e10 TF =2e-6 Sigma = np.array([0,1,0])



heff.py


This file allows to calculate the effective field, in order to solve the LLG equation.

First define the basic operations: the scalar and vectorial product, the vectors of the applied field Happ and of the magnetization M have been defined, in function of the given angles θ and φ. You also must define the VCMA parameters (be careful, VCMA must be defined in both heff.py & main.py

#basic parameters#

uk = np.array([0,0.017,0.998]) Pi=math.pi µo=4*Pi*pow(10,-7)

#VCMA parameters#

tox = 0.5e-9 esp = 60e-15 Vcma=-5

#Parameters of Happ, the applied field#

Hap=1e7 phiH=0 Ku=2.1e-4 Ku2 = stt.KU(esp,Vcma,Ku,tox) Ms=0.9e6

coefficients.py


This file allows to implement additional terms to integrate in the equation.

VCMA :  VCMA coefficients can be calculated by uncommenting the associated functions: Mt, Kv & for the voltage control : KU (independent of Temperature) or KUt (dependant).

STT :  can be calculated by uncommenting the appropriate functions, without taking the temperature into account : Aparallel0 & Heffstt. But it can also consider the temperature: Aparallel1, Aparallel & HeffsttT. The applied voltage can also be defined through VoltageappliedSTT as long as the surface & reference layer (surfacelayer & Referencelayer respectively).

SOT : 
SOT coefficients can be calculated by uncommenting the following functions : Taus, SOTcoefficient & Heffsot.

Resolution & Plot


At the end of the main.py file,the magnetization vector is defined, and a 2D\3D plot is performed, showing the change of the magnetization in time, taking in consideration the initial value and some successive calculated values, until the end of the loop. The user can modify the number of vectors, their color, and other parameters.

#plot of the magnetization#

fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.quiver(0, 0 ,0, M[0,0], M[0,1], M[0,2],color='red') ax.quiver(0, 0 ,0, M[3,0], M[3,1], M[3,2],color='green') ax.quiver(0, 0 ,0, M[12,0], M[12,1], M[12,2],color='green') ax.quiver(0, 0 ,0, M[36,0], M[30,1], M[36,2],color='green') ax.quiver(0, 0 ,0, M[60,0], M[60,1], M[60,2],color='green') ax.quiver(0, 0 ,0, M[70,0], M[70,1], M[70,2],color='green') ax.quiver(0, 0 ,0, M[400,0], M[400,1], M[400,2],color='blue') plt.show()

THE END

Thank you for using our software. It is recalled that you can improve it by adding new parameters or configurations !