43 const auto*
interface = i > 0 ?
m_interfaces[i - 1] : nullptr;
45 if (i > 0 && interface->getRoughness())
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");
81 throw std::runtime_error(
82 "Invalid call to MultiLayer::addLayer(): the semi-infinite top layer "
83 "cannot have roughness.");
117 std::vector<const INode*> ret;
121 for (
size_t i = 0; i < N; ++i) {
125 ret.push_back(interface);
147 m_layers[i]->registerThickness(i > 0 && i < n_layers - 1);
Defines many exception classes in namespace Exceptionss.
Defines and implements interface class ILayout.
Defines class LayerFillLimits.
Defines class LayerInterface.
Defines class LayerRoughness.
Declares functions in namespace MaterialUtils.
Defines helper functions for MultiLayer objects.
Defines class MultiLayer.
Defines class ParameterPool.
Defines class RealParameter.
void registerChild(INode *node)
RealParameter & registerParameter(const std::string &name, double *parpointer)
void setName(const std::string &name)
void registerVector(const std::string &base_name, kvector_t *p_vec, const std::string &units="nm")
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.
static LayerInterface * createSmoothInterface(const Layer *top_layer, const Layer *bottom_layer)
Creates smooth interface between two layers.
A roughness of interface between two layers.
double getSigma() const
Returns rms of roughness.
A layer, with thickness (in nanometer) and material.
Layer * clone() const override final
Returns a clone of this ISample object.
Our sample model: a stack of layers one below the other.
size_t check_layer_index(size_t i_layer) const
Checks index of layer w.r.t. vector length.
SafePointerVector< LayerInterface > m_interfaces
stack of layer interfaces [nlayers-1]
double m_crossCorrLength
cross correlation length (in z direction) between different layers
void setRoughnessModel(RoughnessModel roughnessModel)
const LayerInterface * layerInterface(size_t i_interface) const
Returns interface with given index.
const Layer * layer(size_t i_layer) const
Returns layer with given index.
MultiLayer * clone() const final override
Returns a clone of multilayer with clones of all layers and interfaces between layers.
kvector_t externalField() const
Returns the external field applied to the multilayer (units: A/m)
void addAndRegisterLayer(Layer *child)
Adds the layer with simultaneous registration in parent class.
std::vector< const INode * > getChildren() const final override
Returns a vector of children (const).
SafePointerVector< Layer > m_layers
stack of layers [nlayers]
void handleLayerThicknessRegistration()
Handles correct registration of layer thicknesses (not needed for top and bottom layer)
size_t check_interface_index(size_t i_interface) const
Checks index of interface w.r.t. vector length.
void setExternalField(kvector_t ext_field)
Sets the external field applied to the multilayer (units: A/m)
kvector_t m_ext_field
external magnetic field (in A/m)
RoughnessModel roughnessModel() const
void setCrossCorrLength(double crossCorrLength)
Sets cross correlation length of roughnesses between interfaces.
RoughnessModel m_roughness_model
size_t numberOfLayers() const
void addLayer(const Layer &layer)
Adds object to multilayer.
void addLayerWithTopRoughness(const Layer &layer, const LayerRoughness &roughness)
Adds layer with top roughness.
double crossCorrLength() const
Returns cross correlation length of roughnesses between interfaces.
void addAndRegisterInterface(LayerInterface *child)
Adds the interface with simultaneous registration in parent class.
RealParameter & setNonnegative()
RealParameter & setUnit(const std::string &name)
void push_back(T *pointer)
const LayerInterface * LayerBottomInterface(const MultiLayer &multilayer, size_t i)
Returns bottom interface of layer.