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

Description

Material implementation based on refractive coefficiencts (valid for one wavelength value only)

Definition at line 29 of file RefractiveMaterialImpl.h.

Inheritance diagram for RefractiveMaterialImpl:
[legend]
Collaboration diagram for RefractiveMaterialImpl:
[legend]

Public Member Functions

 ~RefractiveMaterialImpl () override=default
 
RefractiveMaterialImplclone () const override
 Returns pointer to a copy of material. More...
 
MagneticMaterialImplinverted () const override
 Constructs a material with inverted magnetization. More...
 
bool isMagneticMaterial () const override
 
bool isScalarMaterial () const override
 Indicates whether the interaction with the material is scalar. This means that different polarization states will be diffracted equally. More...
 
R3 magnetization () const override
 Returns the magnetization (in A/m) More...
 
complex_t materialData () const override
 Returns underlying material data. More...
 
const std::string & matName () const
 Returns name of the material. More...
 
SpinMatrix polarizedSubtrSLD (const WavevectorInfo &wavevectors) const override
 Returns ( $ \pi/\lambda^2 $ - sld) matrix with magnetization corrections. More...
 
std::string print () const override
 Prints object data. More...
 
complex_t refractiveIndex (double wavelength) const override
 Returns refractive index For this particular implementation returned value does not depend on passed wavelength. More...
 
complex_t refractiveIndex2 (double wavelength) const override
 Returns squared refractive index. For this particular implementation returned value does not depend on passed wavelength. More...
 
MagneticMaterialImplrotatedMaterial (const RotMatrix &transform) const override
 
complex_t scalarSubtrSLD (double lambda0) const override
 Returns ( $ \pi/\lambda^2 $ - sld), sld (in $nm^{-2}$) being the scattering length density. If the wavelength associated with passed wavevector is different from the one associated with refractive coefficients used during the object construction, provided result is inconsistent. More...
 
MATERIAL_TYPES typeID () const override
 Returns type of material implementation. More...
 

Private Member Functions

 RefractiveMaterialImpl (const std::string &name, double delta, double beta, R3 magnetization)
 
void setMagnetization (R3 magnetization)
 

Private Attributes

const double m_beta
 $\beta$ coefficient for refractive index $n = 1 - \delta + i \beta$ More...
 
const double m_delta
 $\delta$ coefficient for refractive index $n = 1 - \delta + i \beta$ More...
 
R3 m_magnetization
 magnetization More...
 
const std::string m_name
 

Friends

Material RefractiveMaterial (const std::string &, double, double, R3)
 

Constructor & Destructor Documentation

◆ ~RefractiveMaterialImpl()

RefractiveMaterialImpl::~RefractiveMaterialImpl ( )
overridedefault

◆ RefractiveMaterialImpl()

RefractiveMaterialImpl::RefractiveMaterialImpl ( const std::string &  name,
double  delta,
double  beta,
R3  magnetization 
)
private

Definition at line 19 of file RefractiveMaterialImpl.cpp.

22  , m_delta(delta)
23  , m_beta(beta < 0. ? throw std::runtime_error(
24  "The imaginary part of the refractive index must be greater or equal zero")
25  : beta)
26 {
27 }
MagneticMaterialImpl(const std::string &name, R3 magnetization)
Constructs basic material with name and magnetization.
R3 magnetization() const override
Returns the magnetization (in A/m)
const double m_delta
coefficient for refractive index
const double m_beta
coefficient for refractive index
double beta(double z, double w)

Referenced by clone().

Member Function Documentation

◆ clone()

RefractiveMaterialImpl * RefractiveMaterialImpl::clone ( ) const
overridevirtual

Returns pointer to a copy of material.

Implements MagneticMaterialImpl.

Definition at line 29 of file RefractiveMaterialImpl.cpp.

30 {
31  return new RefractiveMaterialImpl(*this);
32 }
RefractiveMaterialImpl(const std::string &name, double delta, double beta, R3 magnetization)

References RefractiveMaterialImpl().

Here is the call graph for this function:

◆ inverted()

MagneticMaterialImpl * MagneticMaterialImpl::inverted ( ) const
overridevirtualinherited

Constructs a material with inverted magnetization.

Implements BaseMaterialImpl.

Definition at line 48 of file MagneticMaterialImpl.cpp.

49 {
50  std::string name = isScalarMaterial() ? matName() : matName() + "_inv";
51  MagneticMaterialImpl* result = this->clone();
52  result->setMagnetization(-magnetization());
53  return result;
54 }
const std::string & matName() const
Returns name of the material.
Basic implementation for magnetized material. Inherited by RefractiveMaterialImpl and MaterialBySLDIm...
bool isScalarMaterial() const override
Indicates whether the interaction with the material is scalar. This means that different polarization...
MagneticMaterialImpl * clone() const override=0
Returns pointer to a copy of material.
void setMagnetization(R3 magnetization)

References MagneticMaterialImpl::clone(), MagneticMaterialImpl::isScalarMaterial(), MagneticMaterialImpl::magnetization(), BaseMaterialImpl::matName(), and MagneticMaterialImpl::setMagnetization().

Here is the call graph for this function:

◆ isMagneticMaterial()

bool MagneticMaterialImpl::isMagneticMaterial ( ) const
overridevirtualinherited

Implements BaseMaterialImpl.

Definition at line 61 of file MagneticMaterialImpl.cpp.

62 {
63  return !isScalarMaterial();
64 }

References MagneticMaterialImpl::isScalarMaterial().

Here is the call graph for this function:

◆ isScalarMaterial()

bool MagneticMaterialImpl::isScalarMaterial ( ) const
overridevirtualinherited

Indicates whether the interaction with the material is scalar. This means that different polarization states will be diffracted equally.

Implements BaseMaterialImpl.

Definition at line 56 of file MagneticMaterialImpl.cpp.

57 {
58  return m_magnetization == R3{};
59 }
R3 m_magnetization
magnetization

References MagneticMaterialImpl::m_magnetization.

Referenced by MagneticMaterialImpl::inverted(), and MagneticMaterialImpl::isMagneticMaterial().

◆ magnetization()

R3 MagneticMaterialImpl::magnetization ( ) const
overridevirtualinherited

Returns the magnetization (in A/m)

Implements BaseMaterialImpl.

Definition at line 66 of file MagneticMaterialImpl.cpp.

67 {
68  return m_magnetization;
69 }

References MagneticMaterialImpl::m_magnetization.

Referenced by MagneticMaterialImpl::inverted(), MaterialBySLDImpl::print(), print(), and MagneticMaterialImpl::setMagnetization().

◆ materialData()

complex_t RefractiveMaterialImpl::materialData ( ) const
overridevirtual

Returns underlying material data.

Implements BaseMaterialImpl.

Definition at line 45 of file RefractiveMaterialImpl.cpp.

46 {
47  return complex_t(m_delta, m_beta);
48 }

References m_beta, and m_delta.

◆ matName()

const std::string& BaseMaterialImpl::matName ( ) const
inlineinherited

Returns name of the material.

Definition at line 85 of file BaseMaterialImpl.h.

85 { return m_name; }
const std::string m_name

References BaseMaterialImpl::m_name.

Referenced by MagneticMaterialImpl::inverted(), MaterialBySLDImpl::print(), and print().

◆ polarizedSubtrSLD()

SpinMatrix MagneticMaterialImpl::polarizedSubtrSLD ( const WavevectorInfo wavevectors) const
overridevirtualinherited

Returns ( $ \pi/\lambda^2 $ - sld) matrix with magnetization corrections.

Implements BaseMaterialImpl.

Definition at line 71 of file MagneticMaterialImpl.cpp.

72 {
73  C3 mag_ortho = OrthogonalToBaseVector(wavevectors.getQ(), m_magnetization);
74  complex_t unit_factor = scalarSubtrSLD(wavevectors.vacuumLambda());
75  return MaterialUtils::MagnetizationCorrection(unit_factor, magnetization_prefactor, mag_ortho);
76 }
virtual complex_t scalarSubtrSLD(double lambda0) const =0
Returns ( - sld), sld being the scattering length density.
double vacuumLambda() const
C3 getQ() const
SpinMatrix MagnetizationCorrection(complex_t unit_factor, double magnetic_factor, Vec3< T > polarization)

References WavevectorInfo::getQ(), MagneticMaterialImpl::m_magnetization, MaterialUtils::MagnetizationCorrection(), BaseMaterialImpl::scalarSubtrSLD(), and WavevectorInfo::vacuumLambda().

Here is the call graph for this function:

◆ print()

std::string RefractiveMaterialImpl::print ( ) const
overridevirtual

Prints object data.

Implements BaseMaterialImpl.

Definition at line 55 of file RefractiveMaterialImpl.cpp.

56 {
57  std::stringstream s;
58  s << "RefractiveMaterial:" << matName() << "<" << this << ">{ "
59  << "delta=" << m_delta << ", beta=" << m_beta << ", B=" << magnetization() << "}";
60  return s.str();
61 }

References m_beta, m_delta, MagneticMaterialImpl::magnetization(), and BaseMaterialImpl::matName().

Here is the call graph for this function:

◆ refractiveIndex()

complex_t RefractiveMaterialImpl::refractiveIndex ( double  wavelength) const
overridevirtual

Returns refractive index For this particular implementation returned value does not depend on passed wavelength.

Implements BaseMaterialImpl.

Definition at line 34 of file RefractiveMaterialImpl.cpp.

35 {
36  return complex_t(1.0 - m_delta, m_beta);
37 }

References m_beta, and m_delta.

◆ refractiveIndex2()

complex_t RefractiveMaterialImpl::refractiveIndex2 ( double  wavelength) const
overridevirtual

Returns squared refractive index. For this particular implementation returned value does not depend on passed wavelength.

Implements BaseMaterialImpl.

Definition at line 39 of file RefractiveMaterialImpl.cpp.

40 {
41  complex_t result(1.0 - m_delta, m_beta);
42  return result * result;
43 }

References m_beta, and m_delta.

Referenced by scalarSubtrSLD().

◆ rotatedMaterial()

MagneticMaterialImpl * MagneticMaterialImpl::rotatedMaterial ( const RotMatrix transform) const
overridevirtualinherited

Implements BaseMaterialImpl.

Definition at line 78 of file MagneticMaterialImpl.cpp.

79 {
80  R3 transformed_field = transform.transformed(m_magnetization);
81  MagneticMaterialImpl* result = this->clone();
82  result->setMagnetization(transformed_field);
83  return result;
84 }
T transformed(const T &v) const
Return transformed vector v.
Definition: RotMatrix.cpp:76

References MagneticMaterialImpl::clone(), MagneticMaterialImpl::m_magnetization, MagneticMaterialImpl::setMagnetization(), and RotMatrix::transformed().

Here is the call graph for this function:

◆ scalarSubtrSLD()

complex_t RefractiveMaterialImpl::scalarSubtrSLD ( double  lambda0) const
overridevirtual

Returns ( $ \pi/\lambda^2 $ - sld), sld (in $nm^{-2}$) being the scattering length density. If the wavelength associated with passed wavevector is different from the one associated with refractive coefficients used during the object construction, provided result is inconsistent.

Implements BaseMaterialImpl.

Definition at line 50 of file RefractiveMaterialImpl.cpp.

51 {
52  return M_PI / lambda0 / lambda0 * refractiveIndex2(lambda0);
53 }
#define M_PI
Definition: Constants.h:44
complex_t refractiveIndex2(double wavelength) const override
Returns squared refractive index. For this particular implementation returned value does not depend o...

References M_PI, and refractiveIndex2().

Here is the call graph for this function:

◆ setMagnetization()

void MagneticMaterialImpl::setMagnetization ( R3  magnetization)
inlineprivateinherited

Definition at line 61 of file MagneticMaterialImpl.h.

References MagneticMaterialImpl::m_magnetization, and MagneticMaterialImpl::magnetization().

Referenced by MagneticMaterialImpl::inverted(), and MagneticMaterialImpl::rotatedMaterial().

Here is the call graph for this function:

◆ typeID()

MATERIAL_TYPES RefractiveMaterialImpl::typeID ( ) const
inlineoverridevirtual

Returns type of material implementation.

Implements BaseMaterialImpl.

Definition at line 52 of file RefractiveMaterialImpl.h.

References RefractiveMaterial.

Friends And Related Function Documentation

◆ RefractiveMaterial

Material RefractiveMaterial ( const std::string &  ,
double  ,
double  ,
R3   
)
friend

Definition at line 28 of file MaterialFactoryFuncs.cpp.

29 {
30  std::unique_ptr<RefractiveMaterialImpl> mat_impl(
31  new RefractiveMaterialImpl(name, delta, beta, magnetization));
32  return Material(std::move(mat_impl));
33 }
A wrapper for underlying material implementation.
Definition: Material.h:35

Member Data Documentation

◆ m_beta

const double RefractiveMaterialImpl::m_beta
private

$\beta$ coefficient for refractive index $n = 1 - \delta + i \beta$

Definition at line 69 of file RefractiveMaterialImpl.h.

Referenced by materialData(), print(), refractiveIndex(), and refractiveIndex2().

◆ m_delta

const double RefractiveMaterialImpl::m_delta
private

$\delta$ coefficient for refractive index $n = 1 - \delta + i \beta$

Definition at line 67 of file RefractiveMaterialImpl.h.

Referenced by materialData(), print(), refractiveIndex(), and refractiveIndex2().

◆ m_magnetization

◆ m_name

const std::string BaseMaterialImpl::m_name
privateinherited

Definition at line 88 of file BaseMaterialImpl.h.

Referenced by BaseMaterialImpl::matName().


The documentation for this class was generated from the following files: