15 #ifndef BORNAGAIN_CORE_MULTILAYER_MULTILAYER_H
16 #define BORNAGAIN_CORE_MULTILAYER_MULTILAYER_H
79 std::vector<const INode*>
getChildren() const final override;
Defines interface class ISample.
Define RoughnessModels enumerator and Python wrapper.
Defines and implements template class SafePointerVector.
Pure virtual interface class to equip a sample layer with scattering properties.
Visitor interface to visit ISample objects.
Pure virtual base class for sample components and properties related to scattering.
Interface between two layers, possibly with roughness.
A roughness of interface between two layers.
A layer, with thickness (in nanometer) and material.
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 accept(INodeVisitor *visitor) const final override
Calls the INodeVisitor's visit method.
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.