Cartesius Library
moessbauer Module Reference

Contains functions for calculations of Moessbauer spectra parameters. More...

Data Types

type  moessbauer_d_density
 

Functions/Subroutines

subroutine moessbauer_extract_data (system, m_atom, l_dens, s_dens, p_dens, atoms_array, unit_cell)
 Given the system node, the metal atom and the ligand density matrix, optionally returns the following data: More...
 
real function moessbauer_is (s_dens)
 Calculate Moessbauer isomer shift The unversal formula for IS reads as follows. More...
 
real function moessbauer_qs_from_efg (efg)
 Calculates Moessbauer quadrupole splitting. More...
 
real function, dimension(6) moessbauer_p_atom_efg (p_dens)
 Calculates the p-electron contribution to the EFG tensor for the given atom based on the provided p density matrix. Returns the EFG tensor values in the order xx, yy, zz, xy, xz, yz. More...
 
real function, dimension(6) moessbauer_d_atom_efg (d_dens)
 Calculates the d-electron contribution to the EFG tensor for the given atom based on the provided d density matrix. Returns the EFG tensor values in the order xx, yy, zz, xy, xz, yz. More...
 
real function, dimension(6) moessbauer_ligand_efg (unit_cell, atom, atoms_array)
 Calculates the ligand contribution to the EFG tensor for the given atom based on the provided effective charges. Returns the EFG tensor values in the order xx, yy, zz, xy, xz, yz. More...
 
real function, dimension(6) moessbauer_quadrupole_potential (r)
 Returns the values \( V_{ab} = \frac{3 r_a r_b - δ_{ab} * r^2}{r^5} \) as an array, in the order xx, yy, zz, xy, xz, yz. More...
 
real function, dimension(:), allocatable moessbauer_qs_temperature_dependence (m_atom, p_dens, d_energies, d_densities, atoms_array, unit_cell, t_start, t_end, t_step)
 Returns an array values of quadrupole splitting on the given atom in the given temperature range. More...
 

Variables

real, parameter, private sf_sp = 0.68
 
real, parameter, private sf_d = 0.68
 
real, parameter, private sf_g = 10.1
 
real, parameter, private fe57m_gamma = 14413 / AtomicUnitOfEnergy2EV
 
real, parameter, private fe57nuc_delr_over_r = -1.8e-3
 
real, parameter, private fe57nuc_r = 3.75e-5 / Bohr2Angstrom
 
real, parameter, private fe57nuc_q = 0.160
 
real, parameter, private fe_z = 26
 
real, parameter, private fe_4s_0 = 6.2501
 
real, parameter, private fe_rm3_3d = 4.978801 / Bohr2Angstrom**3
 
real, parameter, private fe_rm3_4p = 1.697 / Bohr2Angstrom**3
 
real, parameter, private fe_is_coef = 0.8 * Pi * (1e3*speedOfLightmpsec / Fe57m_gamma) * Fe_Z * (Fe57nuc_R**2) * Fe57nuc_delR_over_R*(Fe_4s_0**2)
 
real, parameter, private fe_qs_coef = 0.5 * (1e3*speedOfLightmpsec / Fe57m_gamma) * Bohr2Angstrom * (1e-8 * Fe57nuc_Q)
 

Detailed Description

Contains functions for calculations of Moessbauer spectra parameters.

Warning
Currently works only if the metal atom supplied is Fe
Author
Dmitrii Raenko
Date
Mar 2023
Todo:
Add printing of EFG tensors from different sources.

Function/Subroutine Documentation

◆ moessbauer_d_atom_efg()

real function, dimension(6) moessbauer::moessbauer_d_atom_efg ( type(oneelectronicelement), dimension(5,5), intent(in)  d_dens)

Calculates the d-electron contribution to the EFG tensor for the given atom based on the provided d density matrix. Returns the EFG tensor values in the order xx, yy, zz, xy, xz, yz.

◆ moessbauer_extract_data()

subroutine moessbauer::moessbauer_extract_data ( type(node), intent(inout)  system,
type(particle), intent(in), pointer  m_atom,
type(oneelectronicelement), dimension(:,:), intent(in), allocatable  l_dens,
real, intent(out), optional  s_dens,
type(oneelectronicelement), dimension(3,3), intent(out), optional  p_dens,
type(particle_ptr), dimension(:), intent(out), optional, allocatable  atoms_array,
type(unitcell), intent(out), optional, pointer  unit_cell 
)

Given the system node, the metal atom and the ligand density matrix, optionally returns the following data:

Parameters
[out,optional]s_dens Density matrix element on the s-orbital of the given atom
[out,optional]p_dens The density matrix on the p-orbitals of the given atom
[out,optional]atoms_array The array of all the atoms in the system
[out,optional]unit_cell pointer to the unit cell of the system
Here is the call graph for this function:

◆ moessbauer_is()

real function moessbauer::moessbauer_is ( real, intent(in)  s_dens)

Calculate Moessbauer isomer shift The unversal formula for IS reads as follows.

\[ IS = \frac{4\pi}{5} Z e^2 R^2 \frac{\Delta R}{R} \left| \Psi (0) \right|^2 \]

Since \( \left| \Psi (0) \right|^2 = ( \frac{1}{2 \sqrt{\pi}} R(0) )^2 * P_{4s} \) , the \( 4\pi \) cancels, and we are left only with 1/5 in the following formula:

\[ IS (\frac{\mathrm{mm}}{\mathrm{sec}}) = \frac{1}{5} \frac{c}{E_{\gamma}} Z e^2 R^2 \frac{\Delta R}{R} \left| \Psi (0) \right|^2 \]

Furthermore, we calculate the IS with respect to the free Fe atom \( 4s^2 3d^6 \), so the 4s density is shifted by -2.0

◆ moessbauer_ligand_efg()

real function, dimension(6) moessbauer::moessbauer_ligand_efg ( type(unitcell), intent(in), pointer  unit_cell,
type(particle), intent(in), pointer  atom,
type(particle_ptr), dimension(:), intent(in), allocatable  atoms_array 
)

Calculates the ligand contribution to the EFG tensor for the given atom based on the provided effective charges. Returns the EFG tensor values in the order xx, yy, zz, xy, xz, yz.

Here is the call graph for this function:

◆ moessbauer_p_atom_efg()

real function, dimension(6) moessbauer::moessbauer_p_atom_efg ( type(oneelectronicelement), dimension(3,3), intent(in)  p_dens)

Calculates the p-electron contribution to the EFG tensor for the given atom based on the provided p density matrix. Returns the EFG tensor values in the order xx, yy, zz, xy, xz, yz.

◆ moessbauer_qs_from_efg()

real function moessbauer::moessbauer_qs_from_efg ( real, dimension(6), intent(in)  efg)

Calculates Moessbauer quadrupole splitting.

Parameters
[in]EFGElectric field gradient tensor, in the form of an array corresponding to components xx, yy, zz, xy, xz, yz The formula for QS reads as follows:

\[ QS (\frac{\mathrm{mm}}{\mathrm{sec}}) = \frac{c}{E_{\gamma}} \frac{eQV_{zz}}{2} \sqrt{1+\frac{\eta^2}{3}} \]

where \( \eta = \frac{|V_{xx}| - |V_{yy}|}{V_{zz}} \) and \( |V_{yy}| \leq |V_{xx}| \leq |V_{zz}| \) are are the main components of the EFG tensor

◆ moessbauer_qs_temperature_dependence()

real function, dimension(:), allocatable moessbauer::moessbauer_qs_temperature_dependence ( type(particle), intent(in), pointer  m_atom,
type(oneelectronicelement), dimension(3,3), intent(in)  p_dens,
real, dimension(:), intent(in)  d_energies,
type(moessbauer_d_density), dimension(:), intent(in)  d_densities,
type(particle_ptr), dimension(:), intent(in), allocatable  atoms_array,
type(unitcell), intent(in), pointer  unit_cell,
real, intent(in)  t_start,
real, intent(in)  t_end,
real, intent(in)  t_step 
)

Returns an array values of quadrupole splitting on the given atom in the given temperature range.

Parameters
[in]m_atomPointer to atom on which QS is calculated
[in]p_densDensity matrix of the d-atom's p-shell
[in]d_energiesEnergies of the d-shell states on m_atom
[in]d_densitiesOne-electronic density matrices correspoding to d_energies
[in]atoms_arrayparticle_ptr array of all unit cell atoms
[in]unit_cellThe system's unit cell
[in]t_start,t_end,t_stepTemperature range parameters
Here is the call graph for this function:

◆ moessbauer_quadrupole_potential()

real function, dimension(6) moessbauer::moessbauer_quadrupole_potential ( type(vector), intent(in)  r)

Returns the values \( V_{ab} = \frac{3 r_a r_b - δ_{ab} * r^2}{r^5} \) as an array, in the order xx, yy, zz, xy, xz, yz.

Variable Documentation

◆ fe57m_gamma

real, parameter, private moessbauer::fe57m_gamma = 14413 / AtomicUnitOfEnergy2EV
private

◆ fe57nuc_delr_over_r

real, parameter, private moessbauer::fe57nuc_delr_over_r = -1.8e-3
private

◆ fe57nuc_q

real, parameter, private moessbauer::fe57nuc_q = 0.160
private

◆ fe57nuc_r

real, parameter, private moessbauer::fe57nuc_r = 3.75e-5 / Bohr2Angstrom
private

◆ fe_4s_0

real, parameter, private moessbauer::fe_4s_0 = 6.2501
private

◆ fe_is_coef

real, parameter, private moessbauer::fe_is_coef = 0.8 * Pi * (1e3*speedOfLightmpsec / Fe57m_gamma) * Fe_Z * (Fe57nuc_R**2) * Fe57nuc_delR_over_R*(Fe_4s_0**2)
private

◆ fe_qs_coef

real, parameter, private moessbauer::fe_qs_coef = 0.5 * (1e3*speedOfLightmpsec / Fe57m_gamma) * Bohr2Angstrom * (1e-8 * Fe57nuc_Q)
private

◆ fe_rm3_3d

real, parameter, private moessbauer::fe_rm3_3d = 4.978801 / Bohr2Angstrom**3
private

◆ fe_rm3_4p

real, parameter, private moessbauer::fe_rm3_4p = 1.697 / Bohr2Angstrom**3
private

◆ fe_z

real, parameter, private moessbauer::fe_z = 26
private

◆ sf_d

real, parameter, private moessbauer::sf_d = 0.68
private

◆ sf_g

real, parameter, private moessbauer::sf_g = 10.1
private

◆ sf_sp

real, parameter, private moessbauer::sf_sp = 0.68
private