Actual magnetization

44 views
Skip to first unread message

tom.chau...@gmail.com

unread,
Jul 1, 2024, 11:05:20 AMJul 1
to Vampire Users
Hello, 

Is there a way to compute the actual magnetization (meaning not normalized) ? Seems to me that magnetisation-length or mean-magnetisation-length computes the normalized magnetization.  

I've read in the code however that there are some functions such as mean-height-magnetisation-length but I don't understand how it works ? I've got an output such as : 
Temperature h0M_mean_l  h1M_mean_l  h2M_mean_l  h3M_mean_l  h4M_mean_l  h5M_mean_l  h6M_mean_l  h7M_mean_l  h8M_mean_l  h9M_mean_l  h10M_mean_l
0           640         1152        0           640         1152        0           640         1152        0           640         1152    
... 
Does it reflect the actual magnetization ?

If the output of actual magnetization is possible, what would be the unit ?

Thanks in advance for your help 

Tom

gabo...@gmail.com

unread,
Jul 2, 2024, 2:13:06 AMJul 2
to Vampire Users
As far as I know, VAMPIRE does not output the actual magnetization.

A hysteresis loop for example has a saturation magnetization Ms and a remanent magnetization Mr:

Hysteresis Loop.jpg
Figure from [1]

A hysteresis loop with actual magnetization for example has Ms = 5.6 emu/g and Mr = 1.14 em/g:

Actual Hysteresis.jpg
Figure from [2]

If we normalize the magnetization, we would have to divide by Ms:

At saturation magnetization Ms: M/Ms = (5.6 emu/g)/(5.6 emu/g) = 1

At remanent magnetization Mr: M/Ms = (1.14 emu/g)/(5.6 emu/g) = 0.204

At any other point another point: M/Ms

Now, to go from normalized to non-normalized, we would have to do the opposite and multiple by Ms:

At saturation magnetization Ms: M/Ms*Ms = 1*5.6 emu/g = 5.6 emu/g

At remanent magnetization Mr: M/Ms*Ms = 0.204*5.6 emu/g = 1.14 emu/g

At any other point another point: M/Ms*Ms

In literature, particle (powder) samples often times use units with mass of emu/g for the magnetization.  On the other hand, film samples often times use units with volume of emu/cm^3 (or emu/cc) for the magnetization. Though, a conversion can be made between emu/g and emu/cm^3 if the material's density (g/cm^3) [3] is known.  The raw data measured from a VSM (Vibrating Sample Magnetometer) is actually in emu [4].  However, by measuring the weight of the same on a scale (g) or by measuring the dimensions of the film (cm^3), those can be inputted in the VSM software and a calculation is used to compute emu/g or emu/cm^3, respectively.

Hopefully that's helpful.


Kind Regards,
Gavin
VAMPIRE user

tom.chau...@gmail.com

unread,
Jul 2, 2024, 4:51:29 AMJul 2
to Vampire Users
Hi, 
I looked up in the code of VAMPIRE and saw in the magnetization.cpp file that there is a loop that calculates length and normalize to Ms, lines 156-168 : 

// Calculate magnetisation length and normalize
for(int mask_id=0; mask_id<mask_size; ++mask_id){
double msat = magnetization[4*mask_id + 3];
double magm = sqrt(magnetization[4*mask_id + 0]*magnetization[4*mask_id + 0] +
magnetization[4*mask_id + 1]*magnetization[4*mask_id + 1] +
magnetization[4*mask_id + 2]*magnetization[4*mask_id + 2]);

// normalize to msat // this is what we want std_dev of in time - AJN
magnetization[4*mask_id + 0] = magnetization[4*mask_id + 0]/magm; // unit vector // x - AJN
magnetization[4*mask_id + 1] = magnetization[4*mask_id + 1]/magm; // y
magnetization[4*mask_id + 2] = magnetization[4*mask_id + 2]/magm; // z
magnetization[4*mask_id + 3] = magm/msat; // m/m_s // m
}

Would it be ok to compute magm instead of magm/msat in the last line to make such an output ?

Thank you

gabo...@gmail.com

unread,
Jul 2, 2024, 8:31:08 AMJul 2
to Vampire Users
Looks like you could try that.  The potential issue I see is that it doesn't look like the units aren't given.  Are they in magnetization units or in moment units? That could be something that you would have to figure out.

 Kind Regards,
Gavin
VAMPIRE user

tom.chau...@gmail.com

unread,
Jul 2, 2024, 4:35:46 PMJul 2
to Vampire Users
I will look into that ! 

I tried to do the hysteresis curves meanwhile. However, depending on maximum-applied-field-strength and applied-field-strength-increment, I don't get the same results. I am looking especially on the value of Hs as show in the figure you sent earlier from [1]. 

In the first case : 
- sim:maximum-applied-field-strength = 1.3 !T
- sim:applied-field-strength-increment = 0.01 !T
In the second case : 
- sim:maximum-applied-field-strength = 2 !T
- sim:applied-field-strength-increment = 0.02 !T

In the first case, the value of Hs is greater than 0.5, and in the second lower than 0.5. Is there an explanation to the variation of the curve depending on the parameters ?

Also, there are some weird values at the beginning of the hysteresis program as you can see on the right in the Case1.png file. Is it normal ?

My input file is linked in case. 

Thank you, 

Tom 





input
Case2.png
Case1.png

gabo...@gmail.com

unread,
Jul 3, 2024, 12:53:17 AMJul 3
to Vampire Users
Is there an explanation to the variation of the curve depending on the parameters ?

Since your maximum-applied-field-strength is greater than Hs and Hc, I don't expect that to be significant in your case.

The applied-field-strength-increment in your case is what I would expect to be significant.  Since you're seeing large changes in Hc, the applied-field-strength-increment values are likely too large.  Ideally, you would want set the increment to a value infinity close to zero but not zero.

Not actual values and exaggerated, but say that with an applied-field-strength-increment = 1.0 that the total simulation time took 1 min, a value of 0.1 took 1 hr, 0.01 took 1 day, 0.01 takes 1 week, and 0.001 takes 1 month, and 0.0001 takes 1 year.

The 0.0001 would be expected usually to give you the best results, but are you going to let a calculation run for a year to get it, probably not.

With numerical simulations, what we do is something called a convergence test.

At the value of 1.0, we could call that diverged.  At 0.0001, we would call that well converged.

For the convergence test, we would perform multiple simulations for say applied-field-strength-increments of 0.01, 0.009, 0.008, 0.007, 0.006, 0.005, 0.004, 0.003, 0.002, and 0.001.  At 0.01 we might have found a Hc = 0.8, at 0.008 a Hc = 0.6, at 0.007 a Hc = 0.5, at 0.006 a Hc = 0.45, at 0.005 a Hc = 0.425, at 0.004 a Hc = 0.41, at 0.003 a Hc = 0.401, at 0.002 a Hc = 0.4001, and at 0.001 a Hc = 0.40001.  From the trend, it looks like it would be converging to Hc = 0.4.  At an applied-field-strength-increment of 0.002 you would probably say that the convergence looks good enough, but before that, Hc looked to still be fluctuating too much.

You don't show the material.mat file, where the damping-constant might also be important.  If that value is 1, I believe that could be when the spin moments are stiff (react slowly with the applied field).  On the other a hand, if 0.001 I believe this could be the case when the spin moments can react quickly (could make a good oscillator).  If you sweep the applied field slowly (small increment) or quickly (large applied-field-strength-increment), you might think about what you would expect to happen to the hysteresis loop.  With a small increment you kind of expect a gradual change in the magnetization, but with a large change it throws the magnetization perhaps leaving it unsettled before moving on to the next field point.

And, I don't think the complexity stops there, there is also the time step parameters that you might also find affecting the loop.  Smaller sim:time-step and more sim:loop-time-steps may give the magnetization more time to settle at each applied field step, but again at the cost of more computation time.  A possible opportunity to employ convergence testing.

If I've not explained the physics/mechanics of that right, feel free to correct it.  I'd certainly look at the outputs of the multiple simulations modeling the physics for what actually happens.

There are some weird values at the beginning of the hysteresis program

I think I've seen something like that happen before.  So, it is probably normal, but I don't remember when or why as I most likely fiddled with the simulation parameters until it disappeared.  One possibility might be the spin starting off in a random state.

As seen at [1], the material file does have an keyword  "initial-spin-direction=random" that could maybe have been used.


Hope that can be of some help to some degree in answer your questions.

Kind Regards,
Gavin
VAMPIRE user

gabo...@gmail.com

unread,
Jul 3, 2024, 1:38:41 AMJul 3
to Vampire Users
Something I forgot to mention related to your question.  In VAMPIRE, you have probably seen how you can start the applied field at say 2 T:

sim:maximum-applied-field-strength=2

and have it sweep to say -2 T:

sim:minimum-applied-field-strength=-2

with a step size of 0.5 T:

sim:applied-field-strength-increment=0.5

With other hysteresis loop programs (i.e., micromagnetic), it is common practice to have sections of the hysteresis simulated with different step sizes.  Above the Hc, say 2 T to -0.5 T a course step size 0.5 might be used.  From -0.5 to -1 T assuming the Hc happens there, a fine step size 0.001.  Then,  -1 to -2 T, below Hc, it is back to the step size 0.5.  Unfortunately, I haven't seen an example for doing that with VAMPIRE, such that I'm unsure if it can be done using a single input file. 

An idea I had for possible doing that would be to use sim:load-checkpoint [1] and multiple input files, but I've not tried it.


Kind Regards,
Gavin
VAMPIRE user

Reply all
Reply to author
Forward
0 new messages