Quantum Phenomena Explorer 7.9.8
Interactive quantum-phenomena Explorer Tutor — source documentation
Loading...
Searching...
No Matches
quantumkapitzadirac2d_tests.cpp
Go to the documentation of this file.
1/**
2 * @file quantumkapitzadirac2d_tests.cpp
3 * @brief Implements regression and invariant tests for quantumkapitzadirac2d tests.
4 * @ingroup qpe_tests
5 *
6 * Source: @c tests/quantumkapitzadirac2d_tests.cpp. This file is part of Quantum Phenomena Explorer (QPE),
7 * maintained by Officina Turini. See LICENSE_IT.txt / LICENSE.txt for the
8 * QPE freeware source-available terms and THIRD_PARTY_NOTICES.txt for
9 * third-party components.
10 */
11
13
19
20#include <cmath>
21
22namespace qpe {
23namespace tests {
24
25/**
26 * @brief Runs quantum kapitza dirac2 d tests.
27 * @param error Output diagnostic text on failure.
28 */
29bool runQuantumKapitzaDirac2DTests(std::string &error)
30{
31 ComplexField2D field(256u, 256u, 0.16f, 0.16f);
33 if (!QuantumKapitzaDirac2D::initialize(field, initial, 1.0, nullptr) ||
34 std::fabs(field.norm2() - 1.0) > 2.0e-5) {
35 error = "Kapitza-Dirac initial beam failed normalization";
36 return false;
37 }
38
40 config.enabled = true;
41 config.latticePeriod = 4.096;
42 config.latticeDepth = 16.0;
43 config.pulseStartTime = 0.0;
44 config.pulseDuration = 0.30;
45 config.analysisEndTime = 4.0;
46 config.maximumOrder = 4;
47 if (!QuantumKapitzaDirac2D::validateConfig(config, 1.0, nullptr)) {
48 error = "Kapitza-Dirac default config is invalid";
49 return false;
50 }
51 const double expectedG = 2.0 * 3.14159265358979323846 / 4.096;
52 if (std::fabs(QuantumKapitzaDirac2D::reciprocalMomentum(config, 1.0) - expectedG) > 1.0e-12 ||
53 std::fabs(QuantumKapitzaDirac2D::pulseArea(config, 1.0) - 2.4) > 1.0e-12) {
54 error = "Kapitza-Dirac reciprocal momentum or pulse area is inconsistent";
55 return false;
56 }
57
58 PotentialScene2D scene;
59 PotentialField2D potential(field.width(), field.height(), field.dx(), field.dy());
61 QuantumKapitzaDirac2D::rasterize(scene, config, 0.15, potential);
62 if (!during.valid || !during.active || during.finished || !(potential.maximum() > 15.0f)) {
63 error = "Kapitza-Dirac standing-wave pulse did not turn on";
64 return false;
65 }
67 QuantumKapitzaDirac2D::rasterize(scene, config, 0.31, potential);
68 if (!after.valid || after.active || !after.finished || std::fabs(potential.maximum()) > 1.0e-6f) {
69 error = "Kapitza-Dirac standing-wave pulse did not turn off";
70 return false;
71 }
72
73 const MomentumSpace2DResult momentum = MomentumSpace2D::compute(field, 1.0);
74 const QuantumKapitzaDiracSample2D sample =
75 QuantumKapitzaDirac2D::measure(momentum, config, 0.0, false);
76 if (sample.momentumProbability.size() != field.width() ||
77 sample.orderProbability.size() != 9u ||
78 !(sample.norm > 0.999 && sample.norm < 1.001)) {
79 error = "Kapitza-Dirac momentum analysis is inconsistent";
80 return false;
81 }
82 const std::size_t zero = 4u;
83 if (!(sample.orderProbability[zero] > 0.98f)) {
84 error = "Kapitza-Dirac unpulsed beam is not concentrated in zero order";
85 return false;
86 }
87
89 if (!history.configure(config, 1.0)) {
90 error = "Kapitza-Dirac history configuration failed";
91 return false;
92 }
93 history.append(momentum, 0.0, false);
94 if (history.empty() || history.samples().back().orderProbability.size() != 9u) {
95 error = "Kapitza-Dirac history append failed";
96 return false;
97 }
98
99 return true;
100}
101
102} // namespace tests
103} // namespace qpe
Owning Cartesian grid of complex scalar samples.
double norm2() const noexcept
Returns the discrete integral of |psi|^2 including dx*dy.
float dx() const noexcept
Returns the X grid spacing.
std::size_t height() const noexcept
Returns the number of samples along Y.
float dy() const noexcept
Returns the Y grid spacing.
std::size_t width() const noexcept
Returns the number of samples along X.
static MomentumSpace2DResult compute(const ComplexField2D &field, double hbar=1.0)
Performs compute.
Implements the Potential Field2D component.
Value maximum() const noexcept
Performs maximum.
Implements the Potential Scene2D component.
static bool initialize(ComplexField2D &field, const QuantumKapitzaDiracInitialState2DConfig &config, double hbar, std::string *reason=nullptr)
Initializes ialize.
static QuantumKapitzaDiracSample2D measure(const MomentumSpace2DResult &momentum, const QuantumKapitzaDirac2DConfig &config, double time, bool pulseActive)
Performs measure.
static QuantumKapitzaDiracPotentialState2D rasterize(const PotentialScene2D &baseScene, const QuantumKapitzaDirac2DConfig &config, double time, PotentialField2D &target)
Performs rasterize.
static double pulseArea(const QuantumKapitzaDirac2DConfig &config, double hbar) noexcept
Performs pulse area.
static double reciprocalMomentum(const QuantumKapitzaDirac2DConfig &config, double hbar) noexcept
Performs reciprocal momentum.
static bool validateConfig(const QuantumKapitzaDirac2DConfig &config, double hbar, std::string *reason=nullptr)
Validates config.
Implements the Quantum Kapitza Dirac History2D component.
bool empty() const noexcept
Returns whether the object contains no data.
const std::vector< QuantumKapitzaDiracSample2D > & samples() const noexcept
Samples s.
bool configure(const QuantumKapitzaDirac2DConfig &config, double hbar)
Returns configure.
void append(const MomentumSpace2DResult &momentum, double time, bool pulseActive)
Carries out append.
Declares the complex scalar field container representing two-dimensional wave functions.
Declares the momentumspace2d physics/numerical component used by QPE experiments.
bool runQuantumKapitzaDirac2DTests(std::string &error)
Runs quantum kapitza dirac2 d tests.
Declares the potentialfield2d physics/numerical component used by QPE experiments.
Declares the potentialscene2d physics/numerical component used by QPE experiments.
Declares the quantumkapitzadirac2d physics/numerical component used by QPE experiments.
Declares regression and invariant tests for quantumkapitzadirac2d tests.
Data record containing Momentum Space2D Result.
Configuration values for Quantum Kapitza Dirac2D Config.
Configuration values for Quantum Kapitza Dirac Initial State2D Config.
Data structure used by the Quantum Kapitza Dirac Potential State2D component.
Data structure used by the Quantum Kapitza Dirac Sample2D component.