BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
MaterialUtils Namespace Reference

Description

A number of materials-related helper functions for internal use.

Functions

MATERIAL_TYPES checkMaterialTypes (const std::vector< const Material * > &materials)
 Checks if all non-default materials in materials are of the same type and returns this type. If several types of materials are involved, InvalidMaterialType identifier is returned. More...
 
template<typename T >
SpinMatrix MagnetizationCorrection (complex_t unit_factor, double magnetic_factor, Vec3< T > polarization)
 
SpinMatrix PolarizedReducedPotential (complex_t n, R3 b_field, R3 k, double n_ref)
 Function for calculating the reduced potential, used for obtaining the Fresnel coefficients (polarized material case) More...
 
complex_t ScalarReducedPotential (complex_t n, R3 k, double n_ref)
 Function for calculating the reduced potential, used for obtaining the Fresnel coefficients (non-polarized material case) More...
 

Function Documentation

◆ checkMaterialTypes()

MATERIAL_TYPES MaterialUtils::checkMaterialTypes ( const std::vector< const Material * > &  materials)

Checks if all non-default materials in materials are of the same type and returns this type. If several types of materials are involved, InvalidMaterialType identifier is returned.

Definition at line 64 of file MaterialUtils.cpp.

65 {
67  bool isDefault = true;
68  for (const Material* mat : materials) {
69  if (isDefault) {
70  result = mat->typeID();
71  isDefault = mat->isDefaultMaterial();
72  continue;
73  }
74  if (mat->typeID() != result && !mat->isDefaultMaterial())
76  }
77  return result;
78 }
MATERIAL_TYPES
A wrapper for underlying material implementation.
Definition: Material.h:35

References InvalidMaterialType, and RefractiveMaterial.

Referenced by SampleUtils::Multilayer::ContainsCompatibleMaterials().

◆ MagnetizationCorrection()

template<typename T >
SpinMatrix MaterialUtils::MagnetizationCorrection ( complex_t  unit_factor,
double  magnetic_factor,
Vec3< T >  polarization 
)

Definition at line 36 of file MaterialUtils.cpp.

38 {
39  SpinMatrix result = unit_factor * SpinMatrix::One()
40  + magnetic_factor
41  * (Pauli_X * polarization.x() + Pauli_Y * polarization.y()
42  + Pauli_Z * polarization.z());
43  return result;
44 }
static SpinMatrix One()
Definition: SpinMatrix.cpp:36

References SpinMatrix::One().

Referenced by PolarizedReducedPotential(), and MagneticMaterialImpl::polarizedSubtrSLD().

Here is the call graph for this function:

◆ PolarizedReducedPotential()

SpinMatrix MaterialUtils::PolarizedReducedPotential ( complex_t  n,
R3  b_field,
R3  k,
double  n_ref 
)

Function for calculating the reduced potential, used for obtaining the Fresnel coefficients (polarized material case)

Definition at line 57 of file MaterialUtils.cpp.

58 {
59  double factor = magnetic_prefactor / k.mag2();
60  complex_t unit_factor = ScalarReducedPotential(n, k, n_ref);
61  return MagnetizationCorrection(unit_factor, factor, b_field);
62 }
constexpr double magnetic_prefactor
complex_t ScalarReducedPotential(complex_t n, R3 k, double n_ref)
Function for calculating the reduced potential, used for obtaining the Fresnel coefficients (non-pola...
SpinMatrix MagnetizationCorrection(complex_t unit_factor, double magnetic_factor, Vec3< T > polarization)

References magnetic_prefactor, MagnetizationCorrection(), and ScalarReducedPotential().

Referenced by Slice::polarizedReducedPotential().

Here is the call graph for this function:

◆ ScalarReducedPotential()

complex_t MaterialUtils::ScalarReducedPotential ( complex_t  n,
R3  k,
double  n_ref 
)

Function for calculating the reduced potential, used for obtaining the Fresnel coefficients (non-polarized material case)

Definition at line 52 of file MaterialUtils.cpp.

53 {
54  return n * n - n_ref * n_ref * R3Util::sin2Theta(k);
55 }

Referenced by PolarizedReducedPotential(), and Slice::scalarReducedPotential().