1 The model
Equilibrium condition in the Stoner-Wohlfarth model In its simplest form, theStoner-Wohlfarth model  deals with the calculus of the equilibrium state of the total magnetic moment of a single-domain ferromagnetic particle with uniaxial anisotropy. The model assumes that all the magnetic moments in the particle are always parallel. The magnetisation processes of the “Stoner-Wohlfarth particle” are done through coherent rotation of all these moments. At any time the directions of the magnetic moments within the particle are parallel. The magneto-crystalline free energy density is, for a single-domain uniaxial crystal, given by: (1) where is the angle between the easy axis (OZ axis) of the particle and the saturation polarisation moment of theparticle (see Figure 1).
The magnetostatic free energy density maybe written as:
where the vectors (saturation polarisation of the particle) and (applied field vector) were expressed in spherical co-ordinates: and , respectively.
Introducing the anisotropy field, defined as: (3) the total free energy density for one single-domain particle may be written as:
From the minimum condition for the j co-ordinate,that is:
one obtains: (6) with the solution: . So, at the equilibrium, the polarisation vector, , will be in the same plane as the applied field. Without restricting the generality of the discussion we shall take as the plan where all the vectors are. Taking that into account, the total freeenergy becomes: (7) and making the following notations:, (8) one may transform the expression of W, as: (9)
The stable equilibrium conditions are givenby:
and after simple calculations one obtainsthe system in the form:
The system of equations which results byreplacing in(s) the sign “>” with “=” has as solution the parametricequations and of the geometrical locus of the critical fields which separates in the plane the region where the free energy function has two minima as a function of from theregion where this function has only one minimum.
They may be written as: (14) and if one eliminates the parameter one obtains: (15) which is an astroid in the plane (see Figure 3). Inside the astroid W has two minima as a function of , while outside there is only one. To prove that, we may write the (e) and (s) equations
which represents two lines in the plane. These lines have properties which shall be used in the calculus of the equilibrium state:
1. The line (e) is tangent to the astroidin the point determined by the angle (17) which is the slope of the (e) line.
2. The line (s) is perpendicular on the (e) line due to the fact that their slope product is –1. The (s) line divides the plane into two half-planes. In one the equilibrium is stable while in the other is unstable. We noted the line region within the stable half-plane isnoted with (es).
3. Analysing the (es) lines we obtain the configuration presented in the Figure 5. If the point of the vector is within the hashed region there will be with certainty an equilibrium solution between 0° and 90°. The region for is presented in the Figure 6.
In conclusion, when the field is applied and its point is inside the astroid, there are two equilibrium solutions (inside the astroid we have two hashed regions corresponding to differente quilibrium orientations, see Figure 7); outside the astroid it is possible only one equilibrium solution.
In many real cases, one may consider more then one anisotropy source.
Let’s see if we can still use the geometrical method we developed previously in the calculus of the equilibrium state. For example, let’s consider that there is another anisotropy source of magneto-elastic type. The magneto-elastic free energy density is given by:
where is the saturation magnetostriction coefficient and is the mechanical stress vector which makes the angle with the magneto-crystallineanisotropy axis.
The total free energy density is in thiscase: (19)
If we are making the notations: (20) the expression for W becomes: (21) or (22), where (23) and may be transformed as: (24)
If one chooses so (25) one obtains: (26) and with (27) after simple algebra, (28) where is an equivalent total anisotropy field and is the angle between the easy axis of the particle and its magneto-crystalline easy axis.
The total free energy density may bewritten in the terms of equivalent anisotropy, as:
and the stable equilibrium condition is given by:
which may be written as:
Replacing the sign “>” with “=” in (s) we are obtaining a system of equations whose solution is the critical curve with the same physical signification the astroid in the absence of the magneto-elastic term. The parametric equations of this critical curve are:
To provide an easier explanation we transform these equations in a system rotated with respect to the system withthe angle : (35) which may be transformed in the simple form: (36) which represents in the system the equations of an astroid.
|Run the following Maple program in order to get familiar with the calculus of the critical curves. The program contains animated representation of the (e) and (s) curves as a function of the angle.|
# Stoner-Wohlfarth model
> restart: with(plots):
> w:=(h, theta, theta0)->-cos(theta)^2-2*h*cos(theta-theta0):
> w_d1:=(h, theta, theta0)->diff(w(h, theta, theta0), theta):
> w_zx:=(hz, hx, theta)->-cos(theta)^2-2*hx*sin(theta)-2*hz*cos(theta):
> w_zx_d1:=(hz, hx, theta)->diff(w_zx(hz, hx, theta), theta):
> w_zx_d2:=(hz, hx, theta)-> diff(w_zx_d1(hz, hx, theta), theta):
> hx_c:=sin(theta)^3: hz_c := -cos(theta)^3:
> astro_plot:=plot([hz_c, hx_c, theta=0..2*Pi], color=black, thickness=3):
> hx_e := (hz, theta)-> hz*tan(theta) + sin(theta):
> hx_s := (hz, theta)->-hz/tan(theta) -cos(2*theta)/sin(theta):
> ech_anim:=animate(hx_e(hz, theta), hz=-10..10, theta=0..2*Pi, view=[-1..1, -1..1], color=blue, numpoints=200, frames=100):
> stb_anim:=animate(hx_s(hz, theta), hz=-10..10, theta=0..2*Pi, view=[-1..1, -1..1], color=red, numpoints=200, frames=100):
> display([astro_plot, ech_anim, stb_anim]);
> theta_s := (1/2)*arctan(hs*sin(2*psi)/(1+hs*cos(2*psi))):
> hk_s := sqrt(1+hs^2+2*hs*cos(2*psi)):
> hz_c := -hk_s*((1/2)*sin(2*(theta-theta_s))*sin(theta)+cos(2*(theta-theta_s))*cos(theta)):
> hx_c := hk_s*((1/2)*sin(2*(theta-theta_s))*cos(theta)- cos(2*(theta-theta_s))*sin(theta)):
> animate([hz_c, hx_c, theta=0..2*Pi], hs=0..2, color=black): psi := 1/8 Pi;
> hs:=2: astro_plot_s := plot([hz_c, hx_c, theta=0..2*Pi], color=black, thickness=3 ):
> hx_e_s := (hz, theta) -> hz*tan(theta) + hk_s*sin(2*(theta-theta_s))/2/cos(theta):
> hx_s_s := (hz, theta) -> -hz/tan(theta) - hk_s*cos(2*(theta-theta_s))/sin(theta):
> ech_anim_s := animate(hx_e_s(hz, theta), hz=-10..10, theta=0..2*Pi, view=[-hk_s..hk_s, -hk_s..hk_s], color=black, numpoints=200, frames=100):
> stb_anim_s := animate(hx_s_s(hz, theta), hz=-10..10, theta=0..2*Pi, view=[-hk_s..hk_s, -hk_s..hk_s], color=blue, numpoints=200, frames=100):
> display([astro_plot_s, ech_anim_s, stb_anim_s]);
2 Magnetisation processes in the Stoner-Wohlfarth model
The most common hysteresis loop which maybe calculated represents the magnetic moment vector projection on the fielddirection as a function of the applied field: (see Figure 9). The next Maple program implements the algorithm for the calculus of hysteresis loops using the Stoner-Wohlfarth model. It may be used to calculate the loops for between 0° and 90°.
> restart; with(plots): with(plottools):
> w := -Ps/2*(Hk*cos(theta)^2+2*H*cos(theta-psi));
> dw := diff(w, theta);
> equ := dw=0;
> g := (sin(psi)^(2/3) + cos(psi)^(2/3))^(-3/2);
> psi := 35.0*Pi/180.0; H := 0.1; Ps := 1.0; Hk := 1.0;
> Hc := evalf(Hk * g); theta := 'theta';
> theta_s := evalf(Pi - arctan( tan(psi)^(1/3) ));
> equ; > H := 'H'; np := 100; H_max := 1.0;
> h_p := array(1..np); > h_n := array(1..np);
> m_p := array(1..np); > m_n := array(1..np);
> h_p := 0.0; m_p := cos(psi);
> for i from 2 to np do
> h_n := 0.0; m_n := cos(Pi-psi);
> for i from 2 to np-1 do
> h_n[np] := Hc; m_n[np] := cos(theta_s-psi);
> pl_pp := array(1..np);
> pl_pn := array(1..np);
> pl_np := array(1..np);
> pl_nn := array(1..np);
> for i from 1 to np do
> display([seq(pl_pp[i], i=1..np) seq(pl_np[i], i=1..np), seq(pl_pn[i], i=1..np), seq(pl_nn[i], i=1..np)]);