BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
MagneticMaterialImpl Class Referenceabstract

Basic implementation for magnetized material. More...

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

Public Member Functions

 MagneticMaterialImpl (const std::string &name, kvector_t magnetization)
 Constructs basic material with name and magnetization. More...
 
virtual ~MagneticMaterialImpl ()=default
 
MagneticMaterialImplclone () const override=0
 Returns pointer to a copy of material. More...
 
const std::string & getName () const
 Returns name of the material. More...
 
MagneticMaterialImplinverted () const final
 Constructs a material with inverted magnetization. More...
 
bool isMagneticMaterial () const final
 
bool isScalarMaterial () const final
 Indicates whether the interaction with the material is scalar. More...
 
kvector_t magnetization () const final
 Returns the magnetization (in A/m) More...
 
virtual complex_t materialData () const =0
 Returns underlying material data. More...
 
Eigen::Matrix2cd polarizedSubtrSLD (const WavevectorInfo &wavevectors) const final
 Returns ( $ \pi/\lambda^2 $ - sld) matrix with magnetization corrections. More...
 
virtual void print (std::ostream &ostr) const =0
 Prints object data. More...
 
virtual complex_t refractiveIndex (double wavelength) const =0
 Returns refractive index. More...
 
virtual complex_t refractiveIndex2 (double wavelength) const =0
 Returns squared refractive index. More...
 
MagneticMaterialImplrotatedMaterial (const Transform3D &transform) const final
 
virtual complex_t scalarSubtrSLD (const WavevectorInfo &wavevectors) const =0
 Returns ( $ \pi/\lambda^2 $ - sld), sld being the scattering length density. More...
 
virtual MATERIAL_TYPES typeID () const =0
 Returns type of material implementation. More...
 

Private Member Functions

void setMagnetization (kvector_t magnetization)
 

Private Attributes

kvector_t m_magnetization
 magnetization More...
 
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 33 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 38 of file MagneticMaterialImpl.cpp.

40 {
41 }
BaseMaterialImpl(const std::string &name)
Constructs basic material with name.
kvector_t magnetization() const final
Returns the magnetization (in A/m)
kvector_t m_magnetization
magnetization
QString const & name(EShape k)
Definition: particles.cpp:21

◆ ~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().

◆ getName()

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

Returns name of the material.

Definition at line 81 of file BaseMaterialImpl.h.

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

References BaseMaterialImpl::m_name.

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

◆ inverted()

MagneticMaterialImpl * MagneticMaterialImpl::inverted ( ) const
finalvirtual

Constructs a material with inverted magnetization.

Implements BaseMaterialImpl.

Definition at line 43 of file MagneticMaterialImpl.cpp.

44 {
45  std::string name = isScalarMaterial() ? getName() : getName() + "_inv";
46  MagneticMaterialImpl* result = this->clone();
47  result->setMagnetization(-magnetization());
48  return result;
49 }
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 final
Indicates whether the interaction with the material is scalar.

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

Here is the call graph for this function:

◆ isMagneticMaterial()

bool MagneticMaterialImpl::isMagneticMaterial ( ) const
finalvirtual

Implements BaseMaterialImpl.

Definition at line 56 of file MagneticMaterialImpl.cpp.

57 {
58  return !isScalarMaterial();
59 }

References isScalarMaterial().

Here is the call graph for this function:

◆ isScalarMaterial()

bool MagneticMaterialImpl::isScalarMaterial ( ) const
finalvirtual

Indicates whether the interaction with the material is scalar.

This means that different polarization states will be diffracted equally

Implements BaseMaterialImpl.

Definition at line 51 of file MagneticMaterialImpl.cpp.

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

References m_magnetization.

Referenced by inverted(), and isMagneticMaterial().

◆ magnetization()

kvector_t MagneticMaterialImpl::magnetization ( ) const
finalvirtual

Returns the magnetization (in A/m)

Implements BaseMaterialImpl.

Definition at line 61 of file MagneticMaterialImpl.cpp.

62 {
63  return m_magnetization;
64 }

References m_magnetization.

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

◆ materialData()

virtual complex_t BaseMaterialImpl::materialData ( ) const
pure virtualinherited

Returns underlying material data.

Implemented in RefractiveMaterialImpl, and MaterialBySLDImpl.

◆ polarizedSubtrSLD()

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

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

Implements BaseMaterialImpl.

Definition at line 66 of file MagneticMaterialImpl.cpp.

67 {
68  cvector_t mag_ortho = OrthogonalToBaseVector(wavevectors.getQ(), m_magnetization);
69  complex_t unit_factor = scalarSubtrSLD(wavevectors);
71 }
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)

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

Here is the call graph for this function:

◆ print()

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

Prints object data.

Implemented in RefractiveMaterialImpl, and MaterialBySLDImpl.

◆ 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.

◆ rotatedMaterial()

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

Implements BaseMaterialImpl.

Definition at line 73 of file MagneticMaterialImpl.cpp.

74 {
75  kvector_t transformed_field = transform.transformed(m_magnetization);
76  MagneticMaterialImpl* result = this->clone();
77  result->setMagnetization(transformed_field);
78  return result;
79 }
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:

◆ 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().

◆ setMagnetization()

void MagneticMaterialImpl::setMagnetization ( kvector_t  magnetization)
inlineprivate

Definition at line 61 of file MagneticMaterialImpl.h.

References m_magnetization, and magnetization().

Referenced by inverted(), and rotatedMaterial().

Here is the call graph for this function:

◆ typeID()

virtual MATERIAL_TYPES BaseMaterialImpl::typeID ( ) const
pure virtualinherited

Returns type of material implementation.

Implemented in RefractiveMaterialImpl, and MaterialBySLDImpl.

Member Data Documentation

◆ m_magnetization

kvector_t MagneticMaterialImpl::m_magnetization
private

◆ m_name

const std::string BaseMaterialImpl::m_name
privateinherited

Definition at line 84 of file BaseMaterialImpl.h.

Referenced by BaseMaterialImpl::getName().


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