BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
MagneticMaterialImpl Class Referenceabstract
Inheritance diagram for MagneticMaterialImpl:
Collaboration diagram for MagneticMaterialImpl:

Public Member Functions

 MagneticMaterialImpl (const std::string &name, kvector_t magnetization)
 
virtual ~MagneticMaterialImpl ()=default
 
MagneticMaterialImplclone () const override=0
 
MagneticMaterialImplinverted () const override final
 
bool isScalarMaterial () const override final
 
bool isMagneticMaterial () const override final
 
kvector_t magnetization () const override final
 
Eigen::Matrix2cd polarizedSubtrSLD (const WavevectorInfo &wavevectors) const override final
 
MagneticMaterialImplrotatedMaterial (const Transform3D &transform) const override final
 
virtual complex_t refractiveIndex (double wavelength) const =0
 
virtual complex_t refractiveIndex2 (double wavelength) const =0
 
virtual complex_t materialData () const =0
 
virtual MATERIAL_TYPES typeID () const =0
 
virtual complex_t scalarSubtrSLD (const WavevectorInfo &wavevectors) const =0
 
virtual void print (std::ostream &ostr) const =0
 
const std::string & getName () const
 

Private Member Functions

void setMagnetization (kvector_t magnetization)
 

Private Attributes

kvector_t m_magnetization
 
const std::string m_name
 

Detailed Description

Basic implementation for magnetized material.

Inherited by RefractiveMaterialImpl and MaterialBySLDImpl. Incorporates data and methods required to handle material magnetization.

Definition at line 28 of file MagneticMaterialImpl.h.

Constructor & Destructor Documentation

◆ MagneticMaterialImpl()

MagneticMaterialImpl::MagneticMaterialImpl ( const std::string &  name,
kvector_t  magnetization 
)

Constructs basic material with name and magnetization.

Definition at line 39 of file MagneticMaterialImpl.cpp.

41 {
42 }
BaseMaterialImpl(const std::string &name)
Constructs basic material with name.
kvector_t magnetization() const override final
Returns the magnetization (in A/m)
kvector_t m_magnetization
magnetization

◆ ~MagneticMaterialImpl()

virtual MagneticMaterialImpl::~MagneticMaterialImpl ( )
virtualdefault

Member Function Documentation

◆ clone()

MagneticMaterialImpl* MagneticMaterialImpl::clone ( ) const
overridepure virtual

Returns pointer to a copy of material.

Implements BaseMaterialImpl.

Implemented in RefractiveMaterialImpl, and MaterialBySLDImpl.

Referenced by inverted(), and rotatedMaterial().

◆ inverted()

MagneticMaterialImpl * MagneticMaterialImpl::inverted ( ) const
finaloverridevirtual

Constructs a material with inverted magnetization.

Implements BaseMaterialImpl.

Definition at line 44 of file MagneticMaterialImpl.cpp.

45 {
46  std::string name = isScalarMaterial() ? getName() : getName() + "_inv";
47  MagneticMaterialImpl* result = this->clone();
48  result->setMagnetization(-magnetization());
49  return result;
50 }
const std::string & getName() const
Returns name of the material.
Basic implementation for magnetized material.
void setMagnetization(kvector_t magnetization)
MagneticMaterialImpl * clone() const override=0
Returns pointer to a copy of material.
bool isScalarMaterial() const override final
Indicates whether the interaction with the material is scalar.

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

Here is the call graph for this function:

◆ isScalarMaterial()

bool MagneticMaterialImpl::isScalarMaterial ( ) const
finaloverridevirtual

Indicates whether the interaction with the material is scalar.

This means that different polarization states will be diffracted equally

Implements BaseMaterialImpl.

Definition at line 52 of file MagneticMaterialImpl.cpp.

53 {
54  return m_magnetization == kvector_t{};
55 }

References m_magnetization.

Referenced by inverted(), and isMagneticMaterial().

◆ isMagneticMaterial()

bool MagneticMaterialImpl::isMagneticMaterial ( ) const
finaloverridevirtual

Implements BaseMaterialImpl.

Definition at line 57 of file MagneticMaterialImpl.cpp.

58 {
59  return !isScalarMaterial();
60 }

References isScalarMaterial().

Here is the call graph for this function:

◆ magnetization()

kvector_t MagneticMaterialImpl::magnetization ( ) const
finaloverridevirtual

Returns the magnetization (in A/m)

Implements BaseMaterialImpl.

Definition at line 62 of file MagneticMaterialImpl.cpp.

63 {
64  return m_magnetization;
65 }

References m_magnetization.

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

◆ polarizedSubtrSLD()

Eigen::Matrix2cd MagneticMaterialImpl::polarizedSubtrSLD ( const WavevectorInfo wavevectors) const
finaloverridevirtual

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

Implements BaseMaterialImpl.

Definition at line 67 of file MagneticMaterialImpl.cpp.

68 {
69  cvector_t mag_ortho = OrthogonalToBaseVector(wavevectors.getQ(), m_magnetization);
70  complex_t unit_factor = scalarSubtrSLD(wavevectors);
72 }
std::complex< double > complex_t
Definition: Complex.h:20
constexpr double magnetization_prefactor
virtual complex_t scalarSubtrSLD(const WavevectorInfo &wavevectors) const =0
Returns ( - sld), sld being the scattering length density.
cvector_t getQ() const
Eigen::Matrix2cd MagnetizationCorrection(complex_t unit_factor, double magnetic_factor, BasicVector3D< T > polarization)
cvector_t OrthogonalToBaseVector(cvector_t base, const kvector_t vector)

References WavevectorInfo::getQ(), m_magnetization, magnetization_prefactor, MaterialUtils::MagnetizationCorrection(), anonymous_namespace{MagneticMaterialImpl.cpp}::OrthogonalToBaseVector(), and BaseMaterialImpl::scalarSubtrSLD().

Here is the call graph for this function:

◆ rotatedMaterial()

MagneticMaterialImpl * MagneticMaterialImpl::rotatedMaterial ( const Transform3D transform) const
finaloverridevirtual

Implements BaseMaterialImpl.

Definition at line 74 of file MagneticMaterialImpl.cpp.

75 {
76  kvector_t transformed_field = transform.transformed(m_magnetization);
77  MagneticMaterialImpl* result = this->clone();
78  result->setMagnetization(transformed_field);
79  return result;
80 }
ivector_t transformed(const ivector_t &v) const
Return transformed vector v.

References clone(), m_magnetization, setMagnetization(), and Transform3D::transformed().

Here is the call graph for this function:

◆ setMagnetization()

void MagneticMaterialImpl::setMagnetization ( kvector_t  magnetization)
inlineprivate

Definition at line 57 of file MagneticMaterialImpl.h.

References m_magnetization, and magnetization().

Referenced by inverted(), and rotatedMaterial().

Here is the call graph for this function:

◆ refractiveIndex()

virtual complex_t BaseMaterialImpl::refractiveIndex ( double  wavelength) const
pure virtualinherited

Returns refractive index.

Implemented in RefractiveMaterialImpl, and MaterialBySLDImpl.

◆ refractiveIndex2()

virtual complex_t BaseMaterialImpl::refractiveIndex2 ( double  wavelength) const
pure virtualinherited

Returns squared refractive index.

Implemented in RefractiveMaterialImpl, and MaterialBySLDImpl.

◆ materialData()

virtual complex_t BaseMaterialImpl::materialData ( ) const
pure virtualinherited

Returns underlying material data.

Implemented in RefractiveMaterialImpl, and MaterialBySLDImpl.

◆ typeID()

virtual MATERIAL_TYPES BaseMaterialImpl::typeID ( ) const
pure virtualinherited

Returns type of material implementation.

Implemented in RefractiveMaterialImpl, and MaterialBySLDImpl.

◆ scalarSubtrSLD()

virtual complex_t BaseMaterialImpl::scalarSubtrSLD ( const WavevectorInfo wavevectors) const
pure virtualinherited

Returns ( $ \pi/\lambda^2 $ - sld), sld being the scattering length density.

Implemented in RefractiveMaterialImpl, and MaterialBySLDImpl.

Referenced by polarizedSubtrSLD().

◆ print()

virtual void BaseMaterialImpl::print ( std::ostream &  ostr) const
pure virtualinherited

Prints object data.

Implemented in RefractiveMaterialImpl, and MaterialBySLDImpl.

◆ getName()

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

Returns name of the material.

Definition at line 78 of file BaseMaterialImpl.h.

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

References BaseMaterialImpl::m_name.

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

Member Data Documentation

◆ m_magnetization

kvector_t MagneticMaterialImpl::m_magnetization
private

◆ m_name

const std::string BaseMaterialImpl::m_name
privateinherited

Definition at line 81 of file BaseMaterialImpl.h.

Referenced by BaseMaterialImpl::getName().


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