File: MultilayerAveragingTest.cpp

package info (click to toggle)
bornagain 23.0-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 103,936 kB
  • sloc: cpp: 423,131; python: 40,997; javascript: 11,167; awk: 630; sh: 318; ruby: 173; xml: 130; makefile: 51; ansic: 24
file content (65 lines) | stat: -rw-r--r-- 1,946 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "Resample/Processed/ReSample.h"

#include "Sample/Aggregate/Interference2DLattice.h"
#include "Sample/Aggregate/ParticleLayout.h"
#include "Sample/HardParticle/Cylinder.h"
#include "Sample/Material/MaterialFactoryFuncs.h"
#include "Sample/Multilayer/Layer.h"
#include "Sample/Multilayer/Sample.h"
#include "Sample/Particle/Particle.h"
#include "Tests/GTestWrapper/google_test.h"

TEST(MultilayerAveraging, AverageMultilayer)
{
    const auto mat0 = RefractiveMaterial("vac", 0.0, 0.0);
    const auto mat1 = RefractiveMaterial("stone", 4e-4, 8e-7);

    // particles
    Cylinder cylinder_ff(1.0, 3.0);
    Particle particle(mat1, cylinder_ff);

    // interferences
    Interference2DLattice interf_1(BasicLattice2D(10.0, 10.0, 120.0, 0.0));
    Interference2DLattice interf_2(BasicLattice2D(10.0, 10.0, 120.0, 0.0));

    // layouts
    ParticleLayout layout_1;
    layout_1.addParticle(particle);
    layout_1.setInterference(interf_1);

    ParticleLayout layout_2;
    layout_2.addParticle(particle);
    layout_2.setInterference(interf_2);

    Layer layer_1(mat0);
    Layer layer_2(mat1);

    layer_1.addLayout(layout_1);

    Sample m_layer;
    m_layer.addLayer(layer_1);
    m_layer.addLayer(layer_2);

    const auto sample_1 = ReSample::make(m_layer);

    Layer layer_21(mat0);
    Layer layer_22(mat1);

    layer_21.addLayout(layout_1);
    layer_21.addLayout(layout_2);

    Sample m_layer2;
    m_layer2.addLayer(layer_21);
    m_layer2.addLayer(layer_22);

    const auto sample_2 = ReSample::make(m_layer2);

    EXPECT_EQ(sample_1.numberOfSlices(), sample_2.numberOfSlices());

    for (size_t i = 0; i < sample_1.numberOfSlices(); ++i) {
        auto mat_1 = sample_1.avgeSlice(i).material().refractiveIndex_or_SLD();
        auto mat_2 = sample_2.avgeSlice(i).material().refractiveIndex_or_SLD();
        EXPECT_DOUBLE_EQ(mat_1.real(), mat_2.real());
        EXPECT_DOUBLE_EQ(mat_1.imag(), mat_2.imag());
    }
}