BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
MultiLayerWithRoughnessBuilder.cpp
Go to the documentation of this file.
1 // ************************************************************************** //
2 //
3 // BornAgain: simulate and fit scattering at grazing incidence
4 //
5 //! @file Sample/StandardSamples/MultiLayerWithRoughnessBuilder.cpp
6 //! @brief Implement class MultiLayerWithRoughnessBuilder.
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************** //
14 
16 #include "Base/Const/Units.h"
21 
23 {
24  const double thicknessA(2.5 * Units::nanometer);
25  const double thicknessB(5.0 * Units::nanometer);
26  const double sigma(1.0 * Units::nanometer);
27  const double hurst(0.3);
28  const double lateralCorrLength(5.0 * Units::nanometer);
29  const double crossCorrLength(10.0 * Units::nanometer);
30 
31  Material vacuum_material = HomogeneousMaterial("Vacuum", 0., 0.);
32  Material substrate_material = HomogeneousMaterial("Substrate", 15e-6, 0.0);
33  Material part_a_material = HomogeneousMaterial("PartA", 5e-6, 0.0);
34  Material part_b_material = HomogeneousMaterial("PartB", 10e-6, 0.0);
35 
36  Layer vacuum_layer(vacuum_material, 0);
37  Layer partA_layer(part_a_material, thicknessA);
38  Layer partB_layer(part_b_material, thicknessB);
39  Layer substrate_layer(substrate_material, 0);
40 
41  LayerRoughness roughness(sigma, hurst, lateralCorrLength);
42 
43  MultiLayer* multi_layer = new MultiLayer();
44  multi_layer->addLayer(vacuum_layer);
45  for (int i = 0; i < 5; ++i) {
46  multi_layer->addLayerWithTopRoughness(partA_layer, roughness);
47  multi_layer->addLayerWithTopRoughness(partB_layer, roughness);
48  }
49  multi_layer->addLayerWithTopRoughness(substrate_layer, roughness);
50  multi_layer->setCrossCorrLength(crossCorrLength);
51  return multi_layer;
52 }
Defines class LayerRoughness.
Defines class Layer.
Factory functions used to create material instances.
Defines class MultiLayerWithRoughnessBuilder.
Defines class MultiLayer.
Defines some unit conversion factors and other constants in namespace Units.
A roughness of interface between two layers.
A layer, with thickness (in nanometer) and material.
Definition: Layer.h:28
A wrapper for underlying material implementation.
Definition: Material.h:29
Our sample model: a stack of layers one below the other.
Definition: MultiLayer.h:42
void setCrossCorrLength(double crossCorrLength)
Sets cross correlation length of roughnesses between interfaces.
Definition: MultiLayer.cpp:98
void addLayer(const Layer &layer)
Adds object to multilayer.
Definition: MultiLayer.cpp:54
void addLayerWithTopRoughness(const Layer &layer, const LayerRoughness &roughness)
Adds layer with top roughness.
Definition: MultiLayer.cpp:61
Material HomogeneousMaterial(const std::string &name, complex_t refractive_index, kvector_t magnetization)
Constructs a material with name, refractive_index and magnetization (in A/m).
static constexpr double nanometer
Definition: Units.h:24