BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
anonymous_namespace{FeNiBilayerBuilder.cpp}::FeNiBilayer Class Reference
Collaboration diagram for anonymous_namespace{FeNiBilayerBuilder.cpp}::FeNiBilayer:

Public Member Functions

 FeNiBilayer (Options opt={})
 
MultiLayerrelease ()
 

Private Member Functions

std::unique_ptr< MultiLayerconstructSample ()
 

Private Attributes

int NBilayers
 
double angle
 
double magnetizationMagnitude
 
double thicknessFe
 
double thicknessNi
 
double sigmaRoughness
 
int effectiveSLD
 
RoughnessModel roughnessModel
 
kvector_t magnetizationVector
 
std::unique_ptr< MultiLayersample
 

Static Private Attributes

static constexpr auto sldFe = complex_t{8.02e-06, 0}
 
static constexpr auto sldAu = complex_t{4.6665e-6, 0}
 
static constexpr auto sldNi = complex_t{9.4245e-06, 0}
 

Detailed Description

Creates the sample demonstrating an Fe-Ni Bilayer with and without roughness.

Definition at line 85 of file FeNiBilayerBuilder.cpp.

Constructor & Destructor Documentation

◆ FeNiBilayer()

anonymous_namespace{FeNiBilayerBuilder.cpp}::FeNiBilayer::FeNiBilayer ( Options  opt = {})
inline

Definition at line 88 of file FeNiBilayerBuilder.cpp.

88  {})
89  : NBilayers(opt._NBilayers), angle(opt._angle),
90  magnetizationMagnitude(opt._magnetizationMagnitude), thicknessFe(opt._thicknessFe),
91  thicknessNi(opt._thicknessNi), sigmaRoughness(opt._sigmaRoughness),
92  effectiveSLD(opt._effectiveSLD), roughnessModel(opt._roughnessModel)
93  {
94  if (angle != 0. && effectiveSLD != 0.)
95  throw std::runtime_error("Cannot perform scalar computation "
96  "for non-colinear magnetization");
97 
99  magnetizationMagnitude * std::cos(angle), 0);
101  }
BasicVector3D< double > kvector_t
Definition: Vectors3D.h:21

Member Function Documentation

◆ release()

MultiLayer* anonymous_namespace{FeNiBilayerBuilder.cpp}::FeNiBilayer::release ( )
inline

Definition at line 103 of file FeNiBilayerBuilder.cpp.

103 { return sample.release(); }

◆ constructSample()

std::unique_ptr< MultiLayer > FeNiBilayer::constructSample ( )
private

Definition at line 132 of file FeNiBilayerBuilder.cpp.

133 {
134  auto sample = std::make_unique<MultiLayer>();
135 
136  auto m_ambient = MaterialBySLD("Ambient", 0.0, 0.0);
137  auto m_Fe =
138  effectiveSLD == 0
139  ? MaterialBySLD("Fe", sldFe.real(), sldFe.imag(), magnetizationVector)
141  sldFe.imag(), kvector_t{0, 0, 0});
142 
143  auto m_Ni = MaterialBySLD("Ni", sldNi.real(), sldNi.imag());
144  auto m_Substrate = MaterialBySLD("Au", sldAu.real(), sldAu.imag());
145 
146  Layer l_Fe{m_Fe, thicknessFe};
147  Layer l_Ni{m_Ni, thicknessNi};
148 
149  LayerRoughness roughness{sigmaRoughness, 0., 0.};
150  sample->addLayer(Layer{m_ambient});
151 
152  for (auto i = 0; i < NBilayers; ++i) {
153  sample->addLayerWithTopRoughness(l_Fe, roughness);
154  sample->addLayerWithTopRoughness(l_Ni, roughness);
155  }
156 
157  sample->addLayerWithTopRoughness(Layer{m_Substrate}, roughness);
158  sample->setRoughnessModel(roughnessModel);
159  return sample;
160 }
A roughness of interface between two layers.
A layer, with thickness (in nanometer) and material.
Definition: Layer.h:28
Material MaterialBySLD()

References MaterialBySLD(), and anonymous_namespace{FeNiBilayerBuilder.cpp}::rhoMconst.

Here is the call graph for this function:

Member Data Documentation

◆ sldFe

const complex_t FeNiBilayer::sldFe = complex_t{8.02e-06, 0}
staticconstexprprivate

Definition at line 106 of file FeNiBilayerBuilder.cpp.

◆ sldAu

const complex_t FeNiBilayer::sldAu = complex_t{4.6665e-6, 0}
staticconstexprprivate

Definition at line 107 of file FeNiBilayerBuilder.cpp.

◆ sldNi

const complex_t FeNiBilayer::sldNi = complex_t{9.4245e-06, 0}
staticconstexprprivate

Definition at line 108 of file FeNiBilayerBuilder.cpp.

◆ NBilayers

int anonymous_namespace{FeNiBilayerBuilder.cpp}::FeNiBilayer::NBilayers
private

Definition at line 110 of file FeNiBilayerBuilder.cpp.

◆ angle

double anonymous_namespace{FeNiBilayerBuilder.cpp}::FeNiBilayer::angle
private

Definition at line 111 of file FeNiBilayerBuilder.cpp.

◆ magnetizationMagnitude

double anonymous_namespace{FeNiBilayerBuilder.cpp}::FeNiBilayer::magnetizationMagnitude
private

Definition at line 112 of file FeNiBilayerBuilder.cpp.

◆ thicknessFe

double anonymous_namespace{FeNiBilayerBuilder.cpp}::FeNiBilayer::thicknessFe
private

Definition at line 113 of file FeNiBilayerBuilder.cpp.

◆ thicknessNi

double anonymous_namespace{FeNiBilayerBuilder.cpp}::FeNiBilayer::thicknessNi
private

Definition at line 114 of file FeNiBilayerBuilder.cpp.

◆ sigmaRoughness

double anonymous_namespace{FeNiBilayerBuilder.cpp}::FeNiBilayer::sigmaRoughness
private

Definition at line 115 of file FeNiBilayerBuilder.cpp.

◆ effectiveSLD

int anonymous_namespace{FeNiBilayerBuilder.cpp}::FeNiBilayer::effectiveSLD
private

Definition at line 116 of file FeNiBilayerBuilder.cpp.

◆ roughnessModel

RoughnessModel anonymous_namespace{FeNiBilayerBuilder.cpp}::FeNiBilayer::roughnessModel
private

Definition at line 117 of file FeNiBilayerBuilder.cpp.

◆ magnetizationVector

kvector_t anonymous_namespace{FeNiBilayerBuilder.cpp}::FeNiBilayer::magnetizationVector
private

Definition at line 119 of file FeNiBilayerBuilder.cpp.

◆ sample

std::unique_ptr<MultiLayer> anonymous_namespace{FeNiBilayerBuilder.cpp}::FeNiBilayer::sample
private

Definition at line 121 of file FeNiBilayerBuilder.cpp.


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