26 std::vector<double> BottomLayerCoordinates(
const MultiLayer& multilayer);
 
   31     return multilayer.
layer(i)->thickness();
 
   43     if (i + 1 < multilayer.numberOfLayers())
 
   57     for (
size_t i = 0; i < multilayer.numberOfLayers(); ++i)
 
   58         if (p_layer == multilayer.
layer(i))
 
   60     throw std::out_of_range(
"MultiLayerUtils::IndexOfLayer: layer not found");
 
   66            != MATERIAL_TYPES::InvalidMaterialType;
 
   72     auto bottom_coords = BottomLayerCoordinates(multilayer);
 
   75         for (
size_t i = 0; i < multilayer.numberOfLayers(); ++i) {
 
   76             auto p_layer = multilayer.
layer(i);
 
   77             double offset = (i == 0) ? 0 : bottom_coords[i - 1];
 
   78             for (
auto p_layout : p_layer->layouts()) {
 
   79                 for (
auto p_particle : p_layout->particles())
 
   80                     layer_fill_limits.
update(p_particle->bottomTopZ(), offset);
 
   87 bool MultiLayerUtils::hasRoughness(
const MultiLayer& sample)
 
   89     for (
size_t i = 0; i < sample.numberOfLayers() - 1; i++) {
 
   98 std::vector<double> BottomLayerCoordinates(
const MultiLayer& multilayer)
 
  100     auto n_layers = multilayer.numberOfLayers();
 
  103     std::vector<double> result(n_layers - 1);
 
  105     for (
size_t i = 1; i < n_layers - 1; ++i) {
 
Defines and implements interface class ILayout.
 
Defines interface IParticle.
 
Defines class LayerFillLimits.
 
Defines class LayerInterface.
 
Declares functions in namespace MaterialUtils.
 
Defines helper functions for MultiLayer objects.
 
const LayerRoughness * LayerTopRoughness(const MultiLayer &multilayer, size_t i)
Returns top roughness of layer.
 
std::vector< ZLimits > ParticleRegions(const MultiLayer &multilayer, bool use_slicing)
Calculate z-regions occupied by particles.
 
size_t IndexOfLayer(const MultiLayer &multilayer, const Layer *p_layer)
Returns the index of the given layer.
 
bool ContainsCompatibleMaterials(const MultiLayer &multilayer)
Returns true if the multilayer contains non-default materials of one type only.
 
double LayerThickness(const MultiLayer &multilayer, size_t i)
Returns thickness of layer.
 
const LayerInterface * LayerTopInterface(const MultiLayer &multilayer, size_t i)
Returns top interface of layer.
 
const LayerInterface * LayerBottomInterface(const MultiLayer &multilayer, size_t i)
Returns bottom interface of layer.
 
Defines class MultiLayer.
 
std::vector< const Material * > containedMaterials() const
Returns set of unique materials contained in this ISample.
 
Helper class for the graded layer approximation.
 
std::vector< ZLimits > layerZLimits() const
Returns the filled region limits for each layer (in local layer coordinates)
 
void update(ParticleLimits particle_limits, double offset=0.0)
Particle limits are given in global coordinates.
 
Interface between two layers, possibly with roughness.
 
const LayerRoughness * getRoughness() const
Returns roughness of the interface.
 
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.
 
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.
 
MATERIAL_TYPES checkMaterialTypes(const std::vector< const Material * > &materials)
Checks if all non-default materials in materials are of the same type and returns this type.