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

Description

Our sample model: a stack of layers one below the other.

Example of system of 4 layers (3 interfaces):

vacuum      layer 0
---------   interface 0    z=0.0
Fe, 20A     layer 1
---------   interface 1    z=-20.0
Cr, 40A     layer 2
---------   interface 2    z=-60.0
substrate   layer 3

Definition at line 43 of file MultiLayer.h.

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

Public Member Functions

 MultiLayer (std::string name="Unnamed")
 
 ~MultiLayer () override
 
void addLayer (const Layer &layer)
 Adds layer with default (zero) roughness. More...
 
void addLayerWithTopRoughness (const Layer &layer, const LayerRoughness &roughness)
 Adds layer with top roughness. More...
 
void checkNodeArgs () const
 Raises exception if a parameter value is invalid. More...
 
std::string className () const final
 Returns the class name, to be hard-coded in each leaf class that inherits from INode. More...
 
MultiLayerclone () const override
 Returns a clone of this ISampleNode object. More...
 
std::vector< const Material * > containedMaterials () const
 Returns set of unique materials contained in this ISampleNode. More...
 
double crossCorrLength () const
 Returns cross correlation length of roughnesses between interfaces. More...
 
R3 externalField () const
 Returns the external field applied to the sample (units: A/m) More...
 
bool isMagnetic () const
 Returns true if there is any magnetic material in this ISampleNode. More...
 
const Layerlayer (size_t i_layer) const
 Returns layer with given index. More...
 
const LayerInterfacelayerInterface (size_t i_interface) const
 Returns interface with given index. More...
 
virtual const Materialmaterial () const
 Returns nullptr, unless overwritten to return a specific material. More...
 
std::vector< const INode * > nodeChildren () const override
 Returns all children. More...
 
std::vector< const INode * > nodeOffspring () const
 Returns all descendants. More...
 
size_t numberOfLayers () const
 
virtual std::vector< ParaMetaparDefs () const
 Returns the parameter definitions, to be hard-coded in each leaf class. More...
 
RoughnessModel roughnessModel () const
 
const std::string & sampleName () const
 
void setCrossCorrLength (double crossCorrLength)
 Sets cross correlation length of roughnesses between interfaces. More...
 
void setExternalField (R3 ext_field)
 Sets the external field applied to the sample (units: A/m) More...
 
void setRoughnessModel (RoughnessModel roughnessModel)
 
void setSampleName (const std::string &name)
 
virtual void transferToCPP ()
 Used for Python overriding of clone (see swig/tweaks.py) More...
 

Protected Attributes

std::vector< double > m_P
 

Private Member Functions

void addInterface (LayerInterface *child)
 Adds the interface with simultaneous registration in parent class. More...
 
void addLayer (Layer *child)
 Adds the layer with simultaneous registration in parent class. More...
 

Private Attributes

double m_crossCorrLength
 cross correlation length (in z direction) between different layers More...
 
R3 m_ext_field
 external magnetic field (in A/m) More...
 
OwningVector< LayerInterfacem_interfaces
 stack of layer interfaces [nlayers-1] More...
 
OwningVector< Layerm_layers
 stack of layers [nlayers] More...
 
RoughnessModel m_roughness_model {RoughnessModel::DEFAULT}
 
std::string m_sample_name {"Unnamed"}
 

Constructor & Destructor Documentation

◆ MultiLayer()

MultiLayer::MultiLayer ( std::string  name = "Unnamed")

Definition at line 27 of file MultiLayer.cpp.

29  , m_sample_name(std::move(name))
30 {
31  RealLimits::nonnegative().check("CrossCorrelationLength", m_crossCorrLength);
32 }
double m_crossCorrLength
cross correlation length (in z direction) between different layers
Definition: MultiLayer.h:90
std::string m_sample_name
Definition: MultiLayer.h:94
void check(const std::string &name, double value) const
Throws if value is outside limits. Parameter 'name' is for exception message.
Definition: RealLimits.cpp:170
static RealLimits nonnegative()
Creates an object which can have only positive values with 0. included.
Definition: RealLimits.cpp:124

References RealLimits::check(), m_crossCorrLength, and RealLimits::nonnegative().

Referenced by clone().

Here is the call graph for this function:

◆ ~MultiLayer()

MultiLayer::~MultiLayer ( )
overridedefault

Member Function Documentation

◆ addInterface()

void MultiLayer::addInterface ( LayerInterface child)
private

Adds the interface with simultaneous registration in parent class.

Definition at line 138 of file MultiLayer.cpp.

139 {
140  m_interfaces.emplace_back(child);
141 }
OwningVector< LayerInterface > m_interfaces
stack of layer interfaces [nlayers-1]
Definition: MultiLayer.h:88
void emplace_back(T *e)
Definition: OwningVector.h:62

References OwningVector< T >::emplace_back(), and m_interfaces.

Referenced by addLayerWithTopRoughness().

Here is the call graph for this function:

◆ addLayer() [1/2]

void MultiLayer::addLayer ( const Layer layer)

Adds layer with default (zero) roughness.

Definition at line 53 of file MultiLayer.cpp.

54 {
55  LayerRoughness zero_roughness;
56  addLayerWithTopRoughness(layer, zero_roughness);
57 }
A roughness of interface between two layers.
const Layer * layer(size_t i_layer) const
Returns layer with given index.
Definition: MultiLayer.cpp:91
void addLayerWithTopRoughness(const Layer &layer, const LayerRoughness &roughness)
Adds layer with top roughness.
Definition: MultiLayer.cpp:60

References addLayerWithTopRoughness(), and layer().

Referenced by addLayerWithTopRoughness(), and clone().

Here is the call graph for this function:

◆ addLayer() [2/2]

void MultiLayer::addLayer ( Layer child)
private

Adds the layer with simultaneous registration in parent class.

Definition at line 133 of file MultiLayer.cpp.

134 {
135  m_layers.emplace_back(child);
136 }
OwningVector< Layer > m_layers
stack of layers [nlayers]
Definition: MultiLayer.h:86

References OwningVector< T >::emplace_back(), and m_layers.

Here is the call graph for this function:

◆ addLayerWithTopRoughness()

void MultiLayer::addLayerWithTopRoughness ( const Layer layer,
const LayerRoughness roughness 
)

Adds layer with top roughness.

Definition at line 60 of file MultiLayer.cpp.

61 {
62  Layer* new_layer = layer.clone();
63  if (numberOfLayers()) {
64  // not the top layer
65  const Layer* last_layer = m_layers.back();
66  LayerInterface* interface(nullptr);
67  if (roughness.sigma() != 0.0)
68  interface = LayerInterface::createRoughInterface(last_layer, new_layer, roughness);
69  else
70  interface = LayerInterface::createSmoothInterface(last_layer, new_layer);
71  addInterface(interface);
72  } else {
73  // the top layer
74  if (new_layer->thickness() != 0.0) {
75  delete new_layer;
76  throw std::runtime_error(
77  "Invalid call to MultiLayer::addLayer(): the semi-infinite top layer "
78  "must have a pro forma thickness of 0");
79  }
80 
81  if (roughness.sigma() != 0.0) {
82  delete new_layer;
83  throw std::runtime_error(
84  "Invalid call to MultiLayer::addLayer(): the semi-infinite top layer "
85  "cannot have roughness.");
86  }
87  }
88  addLayer(new_layer);
89 }
Interface between two layers, possibly with roughness.
static LayerInterface * createRoughInterface(const Layer *top_layer, const Layer *bottom_layer, const LayerRoughness &roughness)
Creates rough interface between two layers.
const LayerRoughness * roughness() const
Returns roughness of the interface.
static LayerInterface * createSmoothInterface(const Layer *top_layer, const Layer *bottom_layer)
Creates smooth interface between two layers.
double sigma() const
Returns rms of roughness.
A layer in a MultiLayer sample.
Definition: Layer.h:26
double thickness() const
Definition: Layer.h:41
Layer * clone() const override
Returns a clone of this ISampleNode object.
Definition: Layer.cpp:31
size_t numberOfLayers() const
Definition: MultiLayer.h:51
void addLayer(const Layer &layer)
Adds layer with default (zero) roughness.
Definition: MultiLayer.cpp:53
void addInterface(LayerInterface *child)
Adds the interface with simultaneous registration in parent class.
Definition: MultiLayer.cpp:138
const T * back() const
Definition: OwningVector.h:74

References addInterface(), addLayer(), OwningVector< T >::back(), Layer::clone(), LayerInterface::createRoughInterface(), LayerInterface::createSmoothInterface(), layer(), m_layers, numberOfLayers(), LayerInterface::roughness(), LayerRoughness::sigma(), and Layer::thickness().

Referenced by addLayer(), and clone().

Here is the call graph for this function:

◆ checkNodeArgs()

void INode::checkNodeArgs ( ) const
inherited

Raises exception if a parameter value is invalid.

Definition at line 27 of file INode.cpp.

28 {
29  size_t nP = m_P.size();
30  if (parDefs().size() != nP) {
31  std::cerr << "BUG in class " << className() << std::endl;
32  std::cerr << "#m_P = " << nP << std::endl;
33  std::cerr << "#PDf = " << parDefs().size() << std::endl;
34  for (const ParaMeta& pm : parDefs())
35  std::cerr << " PDf: " << pm.name << std::endl;
36  ASSERT(0);
37  }
38  ASSERT(parDefs().size() == nP);
39  for (size_t i = 0; i < nP; ++i) {
40  const ParaMeta pm = parDefs()[i];
41 
43  if (pm.vMin == -INF) {
44  ASSERT(pm.vMax == +INF);
45  // nothing to do
46  } else if (pm.vMax == +INF) {
47  ASSERT(pm.vMin == 0);
48  limits = RealLimits::nonnegative();
49  } else {
50  limits = RealLimits::limited(pm.vMin, pm.vMax);
51  }
52  limits.check(pm.name, m_P[i]);
53  }
54 }
#define ASSERT(condition)
Definition: Assert.h:45
const double INF
Definition: INode.h:26
virtual std::vector< ParaMeta > parDefs() const
Returns the parameter definitions, to be hard-coded in each leaf class.
Definition: INode.h:51
std::vector< double > m_P
Definition: INode.h:63
virtual std::string className() const =0
Returns the class name, to be hard-coded in each leaf class that inherits from INode.
Limits for a real fit parameter.
Definition: RealLimits.h:24
static RealLimits limitless()
Creates an object without bounds (default)
Definition: RealLimits.cpp:139
static RealLimits limited(double left_bound_value, double right_bound_value)
Creates an object bounded from the left and right.
Definition: RealLimits.cpp:134
Metadata of one model parameter.
Definition: INode.h:29
double vMin
Definition: INode.h:33
double vMax
Definition: INode.h:34
std::string name
Definition: INode.h:30

References ASSERT, RealLimits::check(), INode::className(), INF, RealLimits::limited(), RealLimits::limitless(), INode::m_P, ParaMeta::name, RealLimits::nonnegative(), INode::parDefs(), ParaMeta::vMax, and ParaMeta::vMin.

Referenced by BarGauss::BarGauss(), BarLorentz::BarLorentz(), Bipyramid4::Bipyramid4(), Box::Box(), CantellatedCube::CantellatedCube(), Cone::Cone(), ConstantBackground::ConstantBackground(), CosineRippleBox::CosineRippleBox(), CosineRippleGauss::CosineRippleGauss(), CosineRippleLorentz::CosineRippleLorentz(), Cylinder::Cylinder(), DistributionCosine::DistributionCosine(), DistributionGate::DistributionGate(), DistributionGaussian::DistributionGaussian(), DistributionLogNormal::DistributionLogNormal(), DistributionLorentz::DistributionLorentz(), DistributionTrapezoid::DistributionTrapezoid(), Dodecahedron::Dodecahedron(), EllipsoidalCylinder::EllipsoidalCylinder(), FootprintGauss::FootprintGauss(), FootprintSquare::FootprintSquare(), FuzzySphere::FuzzySphere(), GaussSphere::GaussSphere(), HemiEllipsoid::HemiEllipsoid(), HollowSphere::HollowSphere(), HorizontalCylinder::HorizontalCylinder(), Icosahedron::Icosahedron(), LongBoxGauss::LongBoxGauss(), LongBoxLorentz::LongBoxLorentz(), PlatonicOctahedron::PlatonicOctahedron(), PlatonicTetrahedron::PlatonicTetrahedron(), Prism3::Prism3(), Prism6::Prism6(), Profile1DCauchy::Profile1DCauchy(), Profile1DCosine::Profile1DCosine(), Profile1DGate::Profile1DGate(), Profile1DGauss::Profile1DGauss(), Profile1DTriangle::Profile1DTriangle(), Profile1DVoigt::Profile1DVoigt(), Profile2DCauchy::Profile2DCauchy(), Profile2DCone::Profile2DCone(), Profile2DGate::Profile2DGate(), Profile2DGauss::Profile2DGauss(), Profile2DVoigt::Profile2DVoigt(), Pyramid2::Pyramid2(), Pyramid3::Pyramid3(), Pyramid4::Pyramid4(), Pyramid6::Pyramid6(), RotationEuler::RotationEuler(), RotationX::RotationX(), RotationY::RotationY(), RotationZ::RotationZ(), SawtoothRippleBox::SawtoothRippleBox(), SawtoothRippleGauss::SawtoothRippleGauss(), SawtoothRippleLorentz::SawtoothRippleLorentz(), Sphere::Sphere(), Spheroid::Spheroid(), TruncatedCube::TruncatedCube(), TruncatedSphere::TruncatedSphere(), and TruncatedSpheroid::TruncatedSpheroid().

Here is the call graph for this function:

◆ className()

std::string MultiLayer::className ( ) const
inlinefinalvirtual

Returns the class name, to be hard-coded in each leaf class that inherits from INode.

Implements INode.

Definition at line 49 of file MultiLayer.h.

49 { return "MultiLayer"; }

◆ clone()

MultiLayer * MultiLayer::clone ( ) const
overridevirtual

Returns a clone of this ISampleNode object.

Implements ISampleNode.

Definition at line 36 of file MultiLayer.cpp.

37 {
38  auto* result = new MultiLayer;
39  result->setCrossCorrLength(crossCorrLength());
40  result->setExternalField(externalField());
41  result->setRoughnessModel(roughnessModel());
42  for (size_t i = 0; i < numberOfLayers(); ++i) {
43  const LayerInterface* interface = i > 0 ? m_interfaces[i - 1] : nullptr;
44  if (i > 0 && interface->roughness())
45  result->addLayerWithTopRoughness(std::as_const(*m_layers[i]), *interface->roughness());
46  else
47  result->addLayer(std::as_const(*m_layers[i]));
48  }
49  return result;
50 }
MultiLayer(std::string name="Unnamed")
Definition: MultiLayer.cpp:27
R3 externalField() const
Returns the external field applied to the sample (units: A/m)
Definition: MultiLayer.h:71
RoughnessModel roughnessModel() const
Definition: MultiLayer.h:67
double crossCorrLength() const
Returns cross correlation length of roughnesses between interfaces.
Definition: MultiLayer.h:69

References MultiLayer(), addLayer(), addLayerWithTopRoughness(), crossCorrLength(), externalField(), m_interfaces, numberOfLayers(), and roughnessModel().

Referenced by Py::Import::createFromPython().

Here is the call graph for this function:

◆ containedMaterials()

std::vector< const Material * > ISampleNode::containedMaterials ( ) const
inherited

Returns set of unique materials contained in this ISampleNode.

Definition at line 25 of file ISampleNode.cpp.

26 {
27  std::vector<const Material*> result;
28  if (const Material* p_material = material())
29  result.push_back(p_material);
30  for (const auto* child : nodeChildren()) {
31  if (const auto* sample = dynamic_cast<const ISampleNode*>(child)) {
32  for (const Material* p_material : sample->containedMaterials())
33  result.push_back(p_material);
34  }
35  }
36  return result;
37 }
virtual std::vector< const INode * > nodeChildren() const
Returns all children.
Definition: INode.cpp:56
Abstract base class for sample components and properties related to scattering.
Definition: ISampleNode.h:27
virtual const Material * material() const
Returns nullptr, unless overwritten to return a specific material.
Definition: ISampleNode.h:36
A wrapper for underlying material implementation.
Definition: Material.h:35

References ISampleNode::material(), and INode::nodeChildren().

Referenced by SampleUtils::Multilayer::ContainsCompatibleMaterials(), SampleToPython::initLabels(), and ISampleNode::isMagnetic().

Here is the call graph for this function:

◆ crossCorrLength()

double MultiLayer::crossCorrLength ( ) const
inline

Returns cross correlation length of roughnesses between interfaces.

Definition at line 69 of file MultiLayer.h.

69 { return m_crossCorrLength; }

References m_crossCorrLength.

Referenced by clone(), RoughMultiLayerContribution::compute(), reSample::crossCorrSpectralFun(), and setCrossCorrLength().

◆ externalField()

R3 MultiLayer::externalField ( ) const
inline

Returns the external field applied to the sample (units: A/m)

Definition at line 71 of file MultiLayer.h.

71 { return m_ext_field; }
R3 m_ext_field
external magnetic field (in A/m)
Definition: MultiLayer.h:92

References m_ext_field.

Referenced by clone(), reSample::make(), and reSample::polarizing().

◆ isMagnetic()

bool ISampleNode::isMagnetic ( ) const
inherited

Returns true if there is any magnetic material in this ISampleNode.

Definition at line 39 of file ISampleNode.cpp.

40 {
41  const auto materials = containedMaterials();
42  return std::any_of(materials.cbegin(), materials.cend(),
43  [](const Material* mat) { return mat->isMagneticMaterial(); });
44 }
std::vector< const Material * > containedMaterials() const
Returns set of unique materials contained in this ISampleNode.
Definition: ISampleNode.cpp:25

References ISampleNode::containedMaterials().

Referenced by reSample::make().

Here is the call graph for this function:

◆ layer()

const Layer * MultiLayer::layer ( size_t  i_layer) const

Returns layer with given index.

Definition at line 91 of file MultiLayer.cpp.

92 {
93  return m_layers.at(i_layer);
94 }
T *const & at(int i) const
Definition: OwningVector.h:73

References OwningVector< T >::at(), and m_layers.

Referenced by addLayer(), addLayerWithTopRoughness(), SampleUtils::Multilayer::IndexOfLayer(), nodeChildren(), and Compute::Slicing::particleRegions().

Here is the call graph for this function:

◆ layerInterface()

const LayerInterface * MultiLayer::layerInterface ( size_t  i_interface) const

Returns interface with given index.

Definition at line 96 of file MultiLayer.cpp.

97 {
98  return m_interfaces.at(i_interface);
99 }

References OwningVector< T >::at(), and m_interfaces.

Referenced by SampleUtils::Multilayer::hasRoughness(), SampleUtils::Multilayer::LayerTopRoughness(), and nodeChildren().

Here is the call graph for this function:

◆ material()

virtual const Material* ISampleNode::material ( ) const
inlinevirtualinherited

Returns nullptr, unless overwritten to return a specific material.

Reimplemented in Particle, and Layer.

Definition at line 36 of file ISampleNode.h.

36 { return nullptr; }

Referenced by ISampleNode::containedMaterials().

◆ nodeChildren()

std::vector< const INode * > MultiLayer::nodeChildren ( ) const
overridevirtual

Returns all children.

Reimplemented from INode.

Definition at line 118 of file MultiLayer.cpp.

119 {
120  std::vector<const INode*> result;
121  const size_t N = m_layers.size();
122  result.reserve(N + m_interfaces.size());
123 
124  for (size_t i = 0; i < N; ++i) {
125  result.push_back(layer(i));
126  if (i == N - 1)
127  break;
128  result.push_back(layerInterface(i));
129  }
130  return result;
131 }
const LayerInterface * layerInterface(size_t i_interface) const
Returns interface with given index.
Definition: MultiLayer.cpp:96
size_t size() const
Definition: OwningVector.h:70
#define N
Definition: mixmax.h:31

References layer(), layerInterface(), m_interfaces, m_layers, N, and OwningVector< T >::size().

Here is the call graph for this function:

◆ nodeOffspring()

std::vector< const INode * > INode::nodeOffspring ( ) const
inherited

Returns all descendants.

Definition at line 61 of file INode.cpp.

62 {
63  std::vector<const INode*> result;
64  result.push_back(this);
65  for (const auto* child : nodeChildren()) {
66  for (const auto* p : child->nodeOffspring())
67  result.push_back(p);
68  }
69  return result;
70 }

References INode::nodeChildren().

Here is the call graph for this function:

◆ numberOfLayers()

size_t MultiLayer::numberOfLayers ( ) const
inline

Definition at line 51 of file MultiLayer.h.

51 { return m_layers.size(); }

References m_layers, and OwningVector< T >::size().

Referenced by addLayerWithTopRoughness(), clone(), SampleUtils::Multilayer::hasRoughness(), SampleUtils::Multilayer::IndexOfLayer(), and Compute::Slicing::particleRegions().

Here is the call graph for this function:

◆ parDefs()

virtual std::vector<ParaMeta> INode::parDefs ( ) const
inlinevirtualinherited

Returns the parameter definitions, to be hard-coded in each leaf class.

Reimplemented in ConstantBackground, GaussSphere, FuzzySphere, RotationEuler, RotationZ, RotationY, RotationX, Crystal, Layer, HexagonalLattice2D, SquareLattice2D, BasicLattice2D, LayerRoughness, TruncatedSpheroid, TruncatedSphere, TruncatedCube, Spheroid, Sphere, SawtoothRippleLorentz, SawtoothRippleGauss, SawtoothRippleBox, Pyramid6, Pyramid4, Pyramid3, Pyramid2, Prism6, Prism3, PlatonicTetrahedron, PlatonicOctahedron, LongBoxLorentz, LongBoxGauss, Icosahedron, HorizontalCylinder, HollowSphere, HemiEllipsoid, EllipsoidalCylinder, Dodecahedron, Cylinder, CosineRippleLorentz, CosineRippleGauss, CosineRippleBox, Cone, CantellatedCube, Box, Bipyramid4, BarLorentz, BarGauss, Profile2DVoigt, Profile2DCone, Profile2DGate, Profile2DGauss, Profile2DCauchy, Profile1DVoigt, Profile1DCosine, Profile1DTriangle, Profile1DGate, Profile1DGauss, Profile1DCauchy, MisesGaussPeakShape, MisesFisherGaussPeakShape, LorentzFisherPeakShape, GaussFisherPeakShape, IsotropicLorentzPeakShape, IsotropicGaussPeakShape, ParticleLayout, InterferenceTwin, InterferenceRadialParaCrystal, InterferenceHardDisk, Interference2DSuperLattice, Interference2DParaCrystal, Interference1DLattice, DistributionTrapezoid, DistributionCosine, DistributionLogNormal, DistributionGaussian, DistributionLorentz, DistributionGate, ResolutionFunction2DGaussian, PolFilter, FootprintSquare, and FootprintGauss.

Definition at line 51 of file INode.h.

51 { return {}; }

Referenced by INode::checkNodeArgs(), and IFormFactor::pythonConstructor().

◆ roughnessModel()

◆ sampleName()

const std::string& MultiLayer::sampleName ( ) const
inline

Definition at line 76 of file MultiLayer.h.

76 { return m_sample_name; }

References m_sample_name.

◆ setCrossCorrLength()

void MultiLayer::setCrossCorrLength ( double  crossCorrLength)

Sets cross correlation length of roughnesses between interfaces.

Definition at line 101 of file MultiLayer.cpp.

102 {
103  if (crossCorrLength < 0.0)
104  throw std::runtime_error("Attempt to set crossCorrLength to negative value");
106 }

References crossCorrLength(), and m_crossCorrLength.

Here is the call graph for this function:

◆ setExternalField()

void MultiLayer::setExternalField ( R3  ext_field)

Sets the external field applied to the sample (units: A/m)

Definition at line 108 of file MultiLayer.cpp.

109 {
110  m_ext_field = ext_field;
111 }

References m_ext_field.

◆ setRoughnessModel()

void MultiLayer::setRoughnessModel ( RoughnessModel  roughnessModel)

Definition at line 113 of file MultiLayer.cpp.

114 {
116 }

References m_roughness_model, and roughnessModel().

Here is the call graph for this function:

◆ setSampleName()

void MultiLayer::setSampleName ( const std::string &  name)
inline

Definition at line 75 of file MultiLayer.h.

75 { m_sample_name = name; }

References m_sample_name.

◆ transferToCPP()

virtual void ICloneable::transferToCPP ( )
inlinevirtualinherited

Used for Python overriding of clone (see swig/tweaks.py)

Definition at line 32 of file ICloneable.h.

Member Data Documentation

◆ m_crossCorrLength

double MultiLayer::m_crossCorrLength
private

cross correlation length (in z direction) between different layers

Definition at line 90 of file MultiLayer.h.

Referenced by MultiLayer(), crossCorrLength(), and setCrossCorrLength().

◆ m_ext_field

R3 MultiLayer::m_ext_field
private

external magnetic field (in A/m)

Definition at line 92 of file MultiLayer.h.

Referenced by externalField(), and setExternalField().

◆ m_interfaces

OwningVector<LayerInterface> MultiLayer::m_interfaces
private

stack of layer interfaces [nlayers-1]

Definition at line 88 of file MultiLayer.h.

Referenced by addInterface(), clone(), layerInterface(), and nodeChildren().

◆ m_layers

OwningVector<Layer> MultiLayer::m_layers
private

stack of layers [nlayers]

Definition at line 86 of file MultiLayer.h.

Referenced by addLayer(), addLayerWithTopRoughness(), layer(), nodeChildren(), and numberOfLayers().

◆ m_P

◆ m_roughness_model

RoughnessModel MultiLayer::m_roughness_model {RoughnessModel::DEFAULT}
private

Definition at line 95 of file MultiLayer.h.

Referenced by roughnessModel(), and setRoughnessModel().

◆ m_sample_name

std::string MultiLayer::m_sample_name {"Unnamed"}
private

Definition at line 94 of file MultiLayer.h.

Referenced by sampleName(), and setSampleName().


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