Calculating magnetic moment and magnetic susceptibility

EasySpin can calculate magnetic moments and magnetic susceptibilities for arbitrary spin systems. Experimentally, these are obtained using a SQUID magnetometer. This user guide explains how to calculate these quantities.

The following topics are covered:

Running the calculation

To calculate magnetic moments and magnetic susceptibilities, you need to provide information on the sample (spin system) and the fields and temperatures used in the SQUID measurement. With these, you then call the function curry. Depending on what quantity you want to calculate, you ask for a different number of outputs from curry:

muz = curry(Sys,Exp);
[muz,chizz] = curry(Sys,Exp);

Sys contains the spin system, and Exp contains the experimental parameters. muz is the z component of the magnetic dipole moment, and chizz is the zz component of the magnetic susceptibility.

Additionally, you can provide a third input argument, Opt that contains some calculation options. For example,

muz = curry(Sys,Exp,Opt);
The spin system

To calculate magnetic moment and magnetic susceptibility, first of all you need to provide the system of spins and the parameters of the associated spin Hamiltonian as a spin system structure. Here is a simple example of two coupled spins-1/2 with isotropic g factors and strong exchange coupling:

Sys.S = [1/2 1/2];
Sys.g = [2 2];
Sys.J = -2*-10*29.98e3;   % MHz

Be mindful that EasySpin's isotropic electron-electron coupling term Sys.J uses the convention H = +J S1S2. Other conventions are often used in the literature. See here for details.

Also, EasySpin expects all couplings in units of MHz. Very often, exchange couplings are given in cm-1. To convert cm-1 to MHz use

J_cm = 5;              % value in cm^-1
J_MHz = J_cm*29.98e3;  % cm^-1 -> MHz conversion
Sys.J = J_MHz;        % for H = +J*S1*S2

Sys.J = 5 * 29.98e3;  % all in one line

You can also give antisymmetric and symmetric coupling terms, in Sys.dvec and Sys.eeD.

As with the rest of EasySpin, there is in principle no limit on the number of spins you can specify or on how they can be coupled. The only limit is the computer memory required to hold the spin Hamiltonian and operator matrices.

Experimental parameters

For SQUID magnetometry, you only need two basis experimental settings: the magnetic field values and the temperatures at which you measure the magnetic moment and the magnetic susceptibility.

Give the temperature in Exp.Temperature, in units of K. You can provide either a single temperature or an array of temperatures.

Exp.Temperature = 298;    % room temperature
Exp.Temperature = 4:300;  % large temperature range

For the magnetic field, use Exp.Field and provide the field values in units of mT. Again, you can give either a single value, or an array of values. If the experiment is run at zero magnetic field, you can omit Exp.Field.

Exp.Field = 3000;       % 3000 mT = 3 T
Exp.Field = 0:10:6000;  % 0 t 6T range

If you give a single value for both the temperature and the field, curry calculates single values for the outputs. If you provide a single value for one of the parameters and an array for the other, you get an array of results. For example, providing Exp.Field = 1000; and Exp.Temperature = 4:300 will yield curves as a function of temperature. Finally, if you provide arrays for both field and temperature, curry returns 2D arrays for the results.


curry returns the calculated magnetic moments in what might be called "natural units". The numerical value returned by curry can be taken either as the molecular magnetic moment μz (magnetic moment per molecule) in units of Bohr magnetons (μB), or as the molar magnetic moment μmol,z (magnetic moment per mole) in "molar Bohr magnetons" (NAμB). These two are numerically identical. For example, muz = 0.53 means the molecular magnetic moment μz is 0.53 μB and the molar magnetic moment μmol,z is 0.53 NAμB.

The SI units for these two magnetic moment quantities are J T-1 and J T-1 mol-1. To convert from the natural units to the SI units, use EasySpin's functions for the Avogadro number (avogadro) and the Bohr magneton (bmagn):

muz_SI = muz*bmagn;              % molecular magnetic moment, natural units to SI units
muzmol_SI = muz*avogadro*bmagn;  % molar magnetic moment, natural units to SI units

The molar magnetic susceptibility χzz is returned in SI units of m3 mol-1. Often, the susceptibility is given in the old CGS units of cm3 mol-1. To convert the SI susceptibility to the corresponding CGS quantity, use

chizz_cgs = chizz_SI/(4*pi*1e-6);     % unit conversion from SI to CGS units
Single crystals

curry can also calculate magnetic moment and molar magnetic susceptibility of single crystals. For this, you need to provide three things: (a) the orientation of the crystal in the spectrometer in Exp.CrystalOrientation, (b) the space group of the crystal in Exp.CrystalSymmetry, and (c) the orientation of the molecular frame relative to the crystal frame in Exp.MolFrame. You can omit the latter two, in which case the space group is assumed to be P1, and the molecular frame is assumed to be aligne with the crystal frame.

For more information on the various frames and how to specify the relative orientations, see here.

Here are some examples on how to use this.

Exp.CrystalSymmetry = 'P212121';        % space group symbol

Exp.CrystalOrientation = [0 0 0];       % magnetic field along crystal z axis 
Exp.CrystalOrientation = [0 pi/2 0];    % magnetic field along crystal x axis 
Exp.CrystalOrientation = [pi/2 pi/2 0]; % magnetic field along crystal y axis 
Calculation options

Without information about a crystal (Exp.CrystalOrientation, Exp.CrystalSymmetry), curry assumes the sample is a powder and performs a powder average. The powder average involves evaluating many orientations of the paramagnetic center with respect to the magnetic field, and then averaging them. To adjust the number of orientations included in the powder average, use Opt.nKnots. The higher the number, the more orientations are included.

Opt.nKnots = 10;   % 10° increments
Opt.nKnots = 19;   % 5° increments
Opt.nKnots = 31;   % 3° increments

A sufficient number of orientations is necessary to obtain correct data. If you are not sure whether you have enough orientations, increase Opt.nKnots until the calculated data do not change any more.

Of course, if the spin Hamiltonian is isotropic, you do not have to run a powder average.

Least-squares fitting

You can use EasySpin's least-squares fitting tool esfit to fit magnetometry data using curry.

However, the order and nature of curry's output arguments is different from the main EasySpin simulation functions pepper, garlic, chili, etc. By default, esfit is set up for these latter functions. To make esfit work for curry, you need to provide information about the type of output arguments via the fitting option FitOpt.OutArg.

FitOpt.OutArg should be an array of two numbers, for example FitOpt.OutArg = [3 2]. The first number indicates how many output arguments esfit should ask for when calling the simulation function. The second number indicates which output argument to use for fitting. So, FitOpt.OutArg = [3 2] indicates to call the simulation function with three outputs, and then use the second to fit to the data.

For curry, you need to use the following settings, depending on what you want to fit. For fitting the magnetic moment, have curry be called only with one output and use it:

FitOpt.OutArg = [1 1];   % to fit the magnetic moment muz (first output)

The magnetic susceptibility χzz is the second output argument of curry. To fit it, have curry be called with 2 outputs and use the second:

FitOpt.OutArg = [2 2];   % to fit the magnetic susceptibility chizz (second output)

For more details on least-squares fitting, see the corresponding user guide and the reference page on esfit.