Hi everyone!
My question is not so much about mumax, but rather on the principles of dynamic magnetization processes. I could not find a lot of information in publications
and literature, on this exact topic, so I figured I might as well give it a go here.
As I am sure many of you know, ferromagnetic resonance (FMR) refers to the absorption of part an external electromagnetic field's power by a FM sample (usually a thin film), when it is subject to a system of two external magnetic fields:
- a small alternating field H_alt of frequency f;
- a larger static field H_const;
These can be applied in a number of ways, but In my case they are both in the plane of the magnetic film I am modelling, as shown here:
If the frequency f of the alternating field is fixed, the power absorption factor P is dependent on the amplitude of the static field, and at a certain value resonance occurs, during which the absorption reaches a maximum:
I would like to model the curve from above, but I cannot figure out how P is related to m(t). Is there a general equation for this??
From what I have found, the FMR driving frequency f can be derived from the linearized LLG, which can then be used to calculate the dynamic susceptibility, but this is a math-intensive approach I would rather avoid, and one that is only applicable for homogeneous precession (if my understanding is correct). Instead, I would like to calculate the averaged magnetization dynamics m(t) using mumax for a number of different H_const amplitudes, and then calculate P(H_const).
Here is more information on what I have currently been able to do:
1. I have written a simple script that generates the m(t) data for a range of H_const amplitude values, resetting the initial magnetization at the start of each simulation:
start := now()
OutputFormat = OVF2_TEXT
// Material properties
Msat = 760000 // saturation magnetization (A/m)
Aex = 1.3e-11 // exchange constant (J/m)
alpha = 0.007 // Gilbert damping constant
// Magnetic anisotropy properties
Ku1.setregion(1, 95.456) // uniaxial anisotropy constant (J/m3)
anisU.setRegion(1, vector(0, 1, 0)) // anisotropy direction
// Mesh properties
cell_count_x := 128
cell_count_y := 256
cell_count_z := 1
d_cell := 5e-9 // cubic cell size (m)
// Constant field properties
angle_ext_const := pi/2 // angle of orientation of constant field in respect to the y axis (rad)
B_ext_const_amp_min := 0.003 // starting constant field amplitude (T)
B_ext_const_amp_max := 0.008 // ending constant field amplitude (T)
B_ext_const_amp_step := 0.0001 // constant field amplitude step (T)
// Alternating field properties
angle_ext_alt := 0 // angle of orientation of alternating field in respect to the y axis (rad)
B_ext_alt_amp := 0.0002 // alternating field amplitude (T)
f := 2e9 // alternating field frequency (Hz)
// Simulation time settings
total_time_for_single_f := 10e-9 // simulation time for single frequency value (s)
save_time_step := 1e-16 // time step for saving data (s)
tableautosave(save_time_step)
////////////////////////////////////////////////////////////////////////////////
// Generating film geometry
SetGridsize(cell_count_x, cell_count_y, cell_count_z)
SetCellsize(d_cell, d_cell, d_cell)
EdgeSmooth = 3
tableadd(B_ext)
count := 1 // counter to display progress
for B_ext_const_amp:=B_ext_const_amp_min; B_ext_const_amp<B_ext_const_amp_max+B_ext_const_amp_step; B_ext_const_amp+=B_ext_const_amp_step{
print("Calculating B_const step: ", count, "/", (B_ext_const_amp_max-B_ext_const_amp_min)/B_ext_const_amp_step + 1)
// Initializing magnetization
m = uniform(1, 0, 0)
// Updating total external field and calculating magnetization dynamics
B_ext = vector(B_ext_alt_amp*sin(2*pi*f*t)*sin(angle_ext_alt) + B_ext_const_amp*sin(angle_ext_const), B_ext_alt_amp*sin(2*pi*f*t)*cos(angle_ext_alt) + B_ext_const_amp*cos(angle_ext_const), 0)
run(total_time_for_single_f)
count += 1
}
total_run_time := since(start).Seconds()
print("Total run time: ", total_run_time)
2. I have checked whether logic is correct here, and as expected, for a resonant H_const field the averaged magnetization precession reaches a maximum amplitude (the purple dots):
3. I have tried applying the following equation from a
paper I found (only using the second half of
m(t), as not to take relaxation processes into account):
... but the results I get change a lot depending on what H_const sweep range I set :( Also, this equation does not depend on the size of the sample, which I expect should have a significant effect on the power absorbed, and It only sort of works for high frequencies (above 2 GHz).
I will be extremely grateful for any help on this topic. Maybe somebody here has performed similar studies, or could provide a link to a paper where this method is discussed. Thanks!