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

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.

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

Public Member Functions

 MagneticMaterialImpl (const std::string &name, R3 magnetization)
 Constructs basic material with name and magnetization. More...
 
 ~MagneticMaterialImpl () override=default
 
MagneticMaterialImplclone () const override=0
 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...
 
virtual complex_t materialData () const =0
 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...
 
virtual std::string print () 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 RotMatrix &transform) const override
 
virtual complex_t scalarSubtrSLD (double lambda0) 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 (R3 magnetization)
 

Private Attributes

R3 m_magnetization
 magnetization More...
 
const std::string m_name
 

Constructor & Destructor Documentation

◆ MagneticMaterialImpl()

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

Constructs basic material with name and magnetization.

Definition at line 42 of file MagneticMaterialImpl.cpp.

43  : BaseMaterialImpl(name)
45 {
46 }
BaseMaterialImpl(const std::string &name)
Constructs basic material with name.
R3 m_magnetization
magnetization
R3 magnetization() const override
Returns the magnetization (in A/m)

◆ ~MagneticMaterialImpl()

MagneticMaterialImpl::~MagneticMaterialImpl ( )
overridedefault

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
overridevirtual

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 clone(), isScalarMaterial(), magnetization(), BaseMaterialImpl::matName(), and setMagnetization().

Here is the call graph for this function:

◆ isMagneticMaterial()

bool MagneticMaterialImpl::isMagneticMaterial ( ) const
overridevirtual

Implements BaseMaterialImpl.

Definition at line 61 of file MagneticMaterialImpl.cpp.

62 {
63  return !isScalarMaterial();
64 }

References isScalarMaterial().

Here is the call graph for this function:

◆ isScalarMaterial()

bool MagneticMaterialImpl::isScalarMaterial ( ) const
overridevirtual

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 }

References m_magnetization.

Referenced by inverted(), and isMagneticMaterial().

◆ magnetization()

R3 MagneticMaterialImpl::magnetization ( ) const
overridevirtual

Returns the magnetization (in A/m)

Implements BaseMaterialImpl.

Definition at line 66 of file MagneticMaterialImpl.cpp.

67 {
68  return m_magnetization;
69 }

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.

◆ 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 inverted(), MaterialBySLDImpl::print(), and RefractiveMaterialImpl::print().

◆ polarizedSubtrSLD()

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

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(), m_magnetization, MaterialUtils::MagnetizationCorrection(), BaseMaterialImpl::scalarSubtrSLD(), and WavevectorInfo::vacuumLambda().

Here is the call graph for this function:

◆ print()

virtual std::string BaseMaterialImpl::print ( ) 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 RotMatrix transform) const
overridevirtual

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 clone(), m_magnetization, setMagnetization(), and RotMatrix::transformed().

Here is the call graph for this function:

◆ scalarSubtrSLD()

virtual complex_t BaseMaterialImpl::scalarSubtrSLD ( double  lambda0) 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 ( R3  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

R3 MagneticMaterialImpl::m_magnetization
private

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