|
Quantum Phenomena Explorer 7.9.8
Interactive quantum-phenomena Explorer Tutor — source documentation
|
Symmetric split-step Fourier solver for the scalar 2D Schrodinger equation. More...
#include <splitstepfouriersolver2d.h>
Public Member Functions | |
| SplitStepFourierSolver2D ()=default | |
| Constructs a solver with the default reduced-unit parameters. | |
| SplitStepFourierSolver2D (const SplitStepFourier2DParams ¶ms) | |
| Constructs a solver with explicit parameters. | |
| void | setParameters (const SplitStepFourier2DParams ¶ms) |
| Replaces physical/time-step parameters and invalidates prepared caches. | |
| const SplitStepFourier2DParams & | parameters () const noexcept |
| Returns the currently active solver parameters. | |
| void | prepare (const ComplexField2D &field) |
| Precomputes spectral kinetic phase factors for a specific grid. | |
| bool | isPreparedFor (const ComplexField2D &field) const noexcept |
| Returns whether the kinetic cache matches the supplied field geometry. | |
| void | preparePotential (const PotentialField2D &potential) |
| Precomputes the scalar-potential half-step phase cache. | |
| bool | isPotentialPreparedFor (const PotentialField2D &potential) const noexcept |
Returns whether the potential half-step cache still matches potential. | |
| void | step (ComplexField2D &field, const PotentialField2D &potential) |
| Advances the scalar wave function by one second-order Strang step. | |
| void | stepGaugeCovariant (ComplexField2D &field, const PotentialField2D &potential, const U1GaugeField2D &gauge) |
| Advances one gauge-covariant Schrodinger step using U(1) links. | |
| void | stepFree (ComplexField2D &field) |
Advances a free (V=0) scalar field by one cached kinetic step. | |
| void | resetClock () noexcept |
| Resets the shared solver time and step counter to zero. | |
| void | advanceExternalClock () noexcept |
| Advances only QPE's shared clock for an alternative authoritative propagator. | |
| double | time () const noexcept |
| Returns accumulated simulation time in solver units. | |
| std::size_t | stepCount () const noexcept |
| Returns the number of propagated/shared-clock steps since reset. | |
Private Member Functions | |
| void | invalidatePreparation () noexcept |
| Invalidates prepared numerical state. | |
| void | invalidatePotentialPreparation () noexcept |
| Invalidates the cached potential preparation. | |
| void | applyPotentialHalfStep (ComplexField2D &field) const |
| Applies potential half step. | |
| void | applyKineticStep (ComplexField2D &field) const |
| Applies kinetic step. | |
| void | applyGaugeCayleyX (ComplexField2D &field, const U1GaugeField2D &gauge, double interval) const |
| Applies gauge cayley x. | |
| void | applyGaugeCayleyY (ComplexField2D &field, const U1GaugeField2D &gauge, double interval) const |
| Applies gauge cayley y. | |
| void | advanceClock () noexcept |
| Advances clock. | |
Static Private Member Functions | |
| static void | validateParameters (const SplitStepFourier2DParams ¶ms) |
| Validates parameters. | |
Private Attributes | |
| SplitStepFourier2DParams | params_ |
| std::size_t | width_ = 0 |
| std::size_t | height_ = 0 |
| float | dx_ = 0.0f |
| float | dy_ = 0.0f |
| std::vector< std::complex< float > > | kineticPhase_ |
| const PotentialField2D * | potentialSource_ = nullptr |
| std::uint64_t | potentialRevision_ = 0 |
| std::size_t | potentialWidth_ = 0 |
| std::size_t | potentialHeight_ = 0 |
| float | potentialDx_ = 0.0f |
| float | potentialDy_ = 0.0f |
| std::vector< std::complex< float > > | potentialHalfPhase_ |
| double | time_ = 0.0 |
| std::size_t | stepCount_ = 0 |
Symmetric split-step Fourier solver for the scalar 2D Schrodinger equation.
For time-independent scalar potentials the propagator uses Strang splitting, applying potential half steps around a kinetic FFT step. Visual post-processing is never fed back into the propagated wave function.
Definition at line 58 of file splitstepfouriersolver2d.h.
|
default |
Constructs a solver with the default reduced-unit parameters.
|
explicit |
Constructs a solver with explicit parameters.
| params | Parameters copied into the solver. |
Definition at line 54 of file splitstepfouriersolver2d.cpp.
References setParameters().
|
privatenoexcept |
Advances clock.
Definition at line 424 of file splitstepfouriersolver2d.cpp.
References qpe::SplitStepFourier2DParams::dt, params_, stepCount_, and time_.
Referenced by advanceExternalClock(), step(), stepFree(), and stepGaugeCovariant().
|
noexcept |
Advances only QPE's shared clock for an alternative authoritative propagator.
Definition at line 238 of file splitstepfouriersolver2d.cpp.
References advanceClock().
Referenced by MainWindow::advanceSimulation(), and MainWindow::singleStep().
|
private |
Applies gauge cayley x.
| field | Field data to read or modify. |
| gauge | The gauge value used by the operation. |
| interval | The interval value used by the operation. |
Definition at line 342 of file splitstepfouriersolver2d.cpp.
References qpe::ComplexField2D::dx(), qpe::SplitStepFourier2DParams::hbar, qpe::ComplexField2D::height(), qpe::U1GaugeField2D::linkX(), qpe::SplitStepFourier2DParams::mass, params_, and qpe::ComplexField2D::width().
Referenced by stepGaugeCovariant().
|
private |
Applies gauge cayley y.
| field | Field data to read or modify. |
| gauge | The gauge value used by the operation. |
| interval | The interval value used by the operation. |
Definition at line 383 of file splitstepfouriersolver2d.cpp.
References qpe::ComplexField2D::dy(), qpe::SplitStepFourier2DParams::hbar, qpe::ComplexField2D::height(), qpe::U1GaugeField2D::linkY(), qpe::SplitStepFourier2DParams::mass, params_, and qpe::ComplexField2D::width().
Referenced by stepGaugeCovariant().
|
private |
Applies kinetic step.
| field | Field data to read or modify. |
Definition at line 298 of file splitstepfouriersolver2d.cpp.
References qpe::ComplexField2D::data(), kineticPhase_, and qpe::ComplexField2D::size().
Referenced by step(), and stepFree().
|
private |
Applies potential half step.
| field | Field data to read or modify. |
Definition at line 290 of file splitstepfouriersolver2d.cpp.
References qpe::ComplexField2D::data(), potentialHalfPhase_, and qpe::ComplexField2D::size().
Referenced by step(), and stepGaugeCovariant().
|
privatenoexcept |
Invalidates the cached potential preparation.
Definition at line 279 of file splitstepfouriersolver2d.cpp.
References potentialDx_, potentialDy_, potentialHalfPhase_, potentialHeight_, potentialRevision_, potentialSource_, and potentialWidth_.
Referenced by setParameters().
|
privatenoexcept |
Invalidates prepared numerical state.
Definition at line 270 of file splitstepfouriersolver2d.cpp.
References dx_, dy_, height_, kineticPhase_, and width_.
Referenced by setParameters().
|
noexcept |
Returns whether the potential half-step cache still matches potential.
| potential | Potential to compare with the cache identity/revision. |
Definition at line 158 of file splitstepfouriersolver2d.cpp.
Referenced by qpe::tests::runSplitStepFourierSolver2DTests(), step(), and stepGaugeCovariant().
|
noexcept |
Returns whether the kinetic cache matches the supplied field geometry.
| field | Field to compare with the prepared geometry. |
Definition at line 115 of file splitstepfouriersolver2d.cpp.
Referenced by step(), and stepFree().
|
noexcept |
Returns the currently active solver parameters.
Definition at line 69 of file splitstepfouriersolver2d.cpp.
References params_.
Referenced by MainWindow::accumulateTemporalDetectorFlux(), MainWindow::advanceSimulation(), MainWindow::applyKickedRotorKickIfDue(), MainWindow::applyQuantumLoschmidtReversalIfDue(), MainWindow::applyQuantumZenoMeasurementIfDue(), MainWindow::currentParametersHelpHtml(), MainWindow::performPositionCollapse(), MainWindow::prepareConfiguredInitialState(), MainWindow::rebuildLandauZenerReference(), MainWindow::rebuildRamseyReference(), MainWindow::recordTimeSeriesSample(), MainWindow::renderCurrentView(), MainWindow::resetSimulation(), MainWindow::singleStep(), MainWindow::updateAndersonAnalysis(), MainWindow::updateBlochAnalysis(), MainWindow::updateBouncerAnalysis(), MainWindow::updateKickedRotorAnalysis(), MainWindow::updateMomentumSpaceCache(), MainWindow::updatePeriodicDriveAnalysis(), MainWindow::updateQuantumBerryAnalysis(), MainWindow::updateQuantumHallEdgeAnalysis(), MainWindow::updateQuantumKapitzaDiracPotential(), MainWindow::updateQuantumQuenchPotential(), MainWindow::updateQuantumScarAnalysis(), MainWindow::updateQuantumZitterbewegungAnalysis(), MainWindow::updateRamseyAnalysis(), MainWindow::updateRevivalAnalysis(), MainWindow::updateStatusText(), MainWindow::updateStueckelbergAnalysis(), MainWindow::updateTalbotAnalysis(), and MainWindow::updateVortexAnalysis().
| void qpe::SplitStepFourierSolver2D::prepare | ( | const ComplexField2D & | field | ) |
Precomputes spectral kinetic phase factors for a specific grid.
| field | Field whose dimensions and spacing define the FFT momentum grid. |
Definition at line 74 of file splitstepfouriersolver2d.cpp.
References qpe::SplitStepFourier2DParams::dt, qpe::ComplexField2D::dx(), dx_, qpe::ComplexField2D::dy(), dy_, qpe::ComplexField2D::empty(), qpe::SplitStepFourier2DParams::hbar, qpe::ComplexField2D::height(), height_, kineticPhase_, qpe::SplitStepFourier2DParams::mass, params_, qpe::FFT2D::supportsSize(), validateParameters(), qpe::ComplexField2D::width(), and width_.
Referenced by MainWindow::resetSimulation(), qpe::tests::anonymous_namespace{quantumhalledge2d_tests.cpp}::runOne(), qpe::tests::runQuantumAharonovBohm2DTests(), qpe::tests::runQuantumAnderson2DTests(), qpe::tests::runQuantumBouncer2DTests(), qpe::tests::runQuantumLandau2DTests(), qpe::tests::runQuantumLoschmidt2DTests(), qpe::tests::runQuantumTalbot2DTests(), qpe::tests::runQuantumVortex2DTests(), step(), stepFree(), qpe::anonymous_namespace{quantumkickedrotor2d_tests.cpp}::testDynamicalLocalizationSignature(), and qpe::anonymous_namespace{quantumzeno2d_tests.cpp}::testWatchedEscapeSuppression().
| void qpe::SplitStepFourierSolver2D::preparePotential | ( | const PotentialField2D & | potential | ) |
Precomputes the scalar-potential half-step phase cache.
| potential | Potential sampled on the same grid as the propagated field. |
The cache records PotentialField2D::revision() so edits automatically invalidate stale phase factors.
Definition at line 124 of file splitstepfouriersolver2d.cpp.
References qpe::PotentialField2D::data(), qpe::SplitStepFourier2DParams::dt, qpe::PotentialField2D::dx(), qpe::PotentialField2D::dy(), qpe::PotentialField2D::empty(), qpe::SplitStepFourier2DParams::hbar, qpe::PotentialField2D::height(), params_, potentialDx_, potentialDy_, potentialHalfPhase_, potentialHeight_, potentialRevision_, potentialSource_, potentialWidth_, qpe::PotentialField2D::revision(), qpe::PotentialField2D::size(), validateParameters(), and qpe::PotentialField2D::width().
Referenced by MainWindow::resetSimulation(), qpe::tests::anonymous_namespace{quantumhalledge2d_tests.cpp}::runOne(), qpe::tests::runQuantumAharonovBohm2DTests(), qpe::tests::runQuantumAnderson2DTests(), qpe::tests::runQuantumBouncer2DTests(), qpe::tests::runQuantumLandau2DTests(), qpe::tests::runQuantumLoschmidt2DTests(), qpe::tests::runQuantumVortex2DTests(), qpe::tests::runSplitStepFourierSolver2DTests(), step(), stepGaugeCovariant(), qpe::anonymous_namespace{quantumkickedrotor2d_tests.cpp}::testDynamicalLocalizationSignature(), and qpe::anonymous_namespace{quantumzeno2d_tests.cpp}::testWatchedEscapeSuppression().
|
noexcept |
Resets the shared solver time and step counter to zero.
Definition at line 232 of file splitstepfouriersolver2d.cpp.
References stepCount_, and time_.
Referenced by MainWindow::resetSimulation(), qpe::tests::runSplitStepFourierSolver2DTests(), and setParameters().
| void qpe::SplitStepFourierSolver2D::setParameters | ( | const SplitStepFourier2DParams & | params | ) |
Replaces physical/time-step parameters and invalidates prepared caches.
| params | New solver parameters; mass, hbar and dt must be positive. |
Definition at line 60 of file splitstepfouriersolver2d.cpp.
References invalidatePotentialPreparation(), invalidatePreparation(), params_, resetClock(), and validateParameters().
Referenced by MainWindow::MainWindow(), SplitStepFourierSolver2D(), MainWindow::resetSimulation(), qpe::tests::anonymous_namespace{quantumhalledge2d_tests.cpp}::runOne(), qpe::tests::runQuantumAharonovBohm2DTests(), and qpe::tests::runQuantumLandau2DTests().
| void qpe::SplitStepFourierSolver2D::step | ( | ComplexField2D & | field, |
| const PotentialField2D & | potential ) |
Advances the scalar wave function by one second-order Strang step.
| field | Wave function modified in place. |
| potential | Real scalar potential used for both symmetric half steps. |
\[ U(\Delta t) \approx e^{-iV\Delta t/(2\hbar)} e^{-iT\Delta t/\hbar} e^{-iV\Delta t/(2\hbar)}. \]
Definition at line 170 of file splitstepfouriersolver2d.cpp.
References advanceClock(), applyKineticStep(), applyPotentialHalfStep(), qpe::FFT2D::forward(), qpe::FFT2D::inverse(), isPotentialPreparedFor(), isPreparedFor(), qpe::PotentialField2D::matchesGrid(), prepare(), and preparePotential().
Referenced by MainWindow::advanceSimulation(), qpe::tests::runQuantumAnderson2DTests(), qpe::tests::runQuantumBackflow2DTests(), qpe::tests::runQuantumBouncer2DTests(), qpe::tests::runQuantumLoschmidt2DTests(), qpe::tests::runQuantumVortex2DTests(), qpe::tests::runSplitStepFourierSolver2DTests(), MainWindow::singleStep(), qpe::anonymous_namespace{quantumkickedrotor2d_tests.cpp}::testDynamicalLocalizationSignature(), and qpe::anonymous_namespace{quantumzeno2d_tests.cpp}::testWatchedEscapeSuppression().
|
noexcept |
Returns the number of propagated/shared-clock steps since reset.
Definition at line 248 of file splitstepfouriersolver2d.cpp.
References stepCount_.
Referenced by MainWindow::advanceSimulation(), MainWindow::currentParametersHelpHtml(), qpe::tests::runSplitStepFourierSolver2DTests(), MainWindow::setRunning(), MainWindow::singleStep(), MainWindow::updateMomentumSpaceCache(), MainWindow::updateStatusText(), and MainWindow::updateTransportUi().
| void qpe::SplitStepFourierSolver2D::stepFree | ( | ComplexField2D & | field | ) |
Advances a free (V=0) scalar field by one cached kinetic step.
| field | Wave function modified in place. |
Definition at line 219 of file splitstepfouriersolver2d.cpp.
References advanceClock(), applyKineticStep(), qpe::FFT2D::forward(), qpe::FFT2D::inverse(), isPreparedFor(), and prepare().
Referenced by qpe::tests::runQuantumTalbot2DTests(), qpe::tests::runSplitStepFourierSolver2DTests(), and qpe::tests::runWavePacketObservables2DTests().
| void qpe::SplitStepFourierSolver2D::stepGaugeCovariant | ( | ComplexField2D & | field, |
| const PotentialField2D & | potential, | ||
| const U1GaugeField2D & | gauge ) |
Advances one gauge-covariant Schrodinger step using U(1) links.
| field | Wave function modified in place. |
| potential | Scalar potential sampled on the field grid. |
| gauge | U(1) link field encoding the vector-potential connection. |
A symmetric X/2 - Y - X/2 Cayley/ADI kinetic factorization preserves the lattice gauge transformation law and is norm preserving before any CAP.
Definition at line 195 of file splitstepfouriersolver2d.cpp.
References advanceClock(), applyGaugeCayleyX(), applyGaugeCayleyY(), applyPotentialHalfStep(), qpe::SplitStepFourier2DParams::dt, isPotentialPreparedFor(), qpe::PotentialField2D::matchesGrid(), qpe::U1GaugeField2D::matchesGrid(), params_, and preparePotential().
Referenced by MainWindow::advanceSimulation(), qpe::tests::anonymous_namespace{quantumhalledge2d_tests.cpp}::runOne(), qpe::tests::runQuantumAharonovBohm2DTests(), qpe::tests::runQuantumLandau2DTests(), and MainWindow::singleStep().
|
noexcept |
Returns accumulated simulation time in solver units.
Definition at line 243 of file splitstepfouriersolver2d.cpp.
References time_.
Referenced by MainWindow::advanceSimulation(), MainWindow::applyKickedRotorKickIfDue(), MainWindow::applyQuantumLoschmidtReversalIfDue(), MainWindow::applyQuantumZenoMeasurementIfDue(), MainWindow::currentParametersHelpHtml(), MainWindow::recordTimeSeriesSample(), qpe::tests::anonymous_namespace{quantumhalledge2d_tests.cpp}::runOne(), qpe::tests::runQuantumAharonovBohm2DTests(), qpe::tests::runQuantumAnderson2DTests(), qpe::tests::runQuantumBackflow2DTests(), qpe::tests::runQuantumBouncer2DTests(), qpe::tests::runQuantumLandau2DTests(), qpe::tests::runQuantumTalbot2DTests(), qpe::tests::runQuantumVortex2DTests(), qpe::tests::runSplitStepFourierSolver2DTests(), qpe::tests::runWavePacketObservables2DTests(), MainWindow::singleStep(), qpe::anonymous_namespace{quantumkickedrotor2d_tests.cpp}::testDynamicalLocalizationSignature(), qpe::anonymous_namespace{quantumzeno2d_tests.cpp}::testWatchedEscapeSuppression(), MainWindow::updateBilliardAnalysis(), MainWindow::updateBlochAnalysis(), MainWindow::updateLandauZenerAnalysis(), MainWindow::updateMomentumSpaceCache(), MainWindow::updateQuantumBerryAnalysis(), MainWindow::updateResonanceAnalysis(), MainWindow::updateRevivalAnalysis(), MainWindow::updateScatteringReadout(), MainWindow::updateStatusText(), MainWindow::updateStueckelbergAnalysis(), and MainWindow::updateTimeDock().
|
staticprivate |
Validates parameters.
| params | Parameter block to apply. |
Definition at line 253 of file splitstepfouriersolver2d.cpp.
References qpe::SplitStepFourier2DParams::dt, qpe::SplitStepFourier2DParams::hbar, and qpe::SplitStepFourier2DParams::mass.
Referenced by prepare(), preparePotential(), and setParameters().
|
private |
Definition at line 194 of file splitstepfouriersolver2d.h.
Referenced by invalidatePreparation(), and prepare().
|
private |
Definition at line 195 of file splitstepfouriersolver2d.h.
Referenced by invalidatePreparation(), and prepare().
|
private |
Definition at line 193 of file splitstepfouriersolver2d.h.
Referenced by invalidatePreparation(), and prepare().
|
private |
Definition at line 197 of file splitstepfouriersolver2d.h.
Referenced by applyKineticStep(), invalidatePreparation(), and prepare().
|
private |
Definition at line 190 of file splitstepfouriersolver2d.h.
Referenced by advanceClock(), applyGaugeCayleyX(), applyGaugeCayleyY(), parameters(), prepare(), preparePotential(), setParameters(), and stepGaugeCovariant().
|
private |
Definition at line 203 of file splitstepfouriersolver2d.h.
Referenced by invalidatePotentialPreparation(), and preparePotential().
|
private |
Definition at line 204 of file splitstepfouriersolver2d.h.
Referenced by invalidatePotentialPreparation(), and preparePotential().
|
private |
Definition at line 205 of file splitstepfouriersolver2d.h.
Referenced by applyPotentialHalfStep(), invalidatePotentialPreparation(), and preparePotential().
|
private |
Definition at line 202 of file splitstepfouriersolver2d.h.
Referenced by invalidatePotentialPreparation(), and preparePotential().
|
private |
Definition at line 200 of file splitstepfouriersolver2d.h.
Referenced by invalidatePotentialPreparation(), and preparePotential().
|
private |
Definition at line 199 of file splitstepfouriersolver2d.h.
Referenced by invalidatePotentialPreparation(), and preparePotential().
|
private |
Definition at line 201 of file splitstepfouriersolver2d.h.
Referenced by invalidatePotentialPreparation(), and preparePotential().
|
private |
Definition at line 208 of file splitstepfouriersolver2d.h.
Referenced by advanceClock(), resetClock(), and stepCount().
|
private |
Definition at line 207 of file splitstepfouriersolver2d.h.
Referenced by advanceClock(), resetClock(), and time().
|
private |
Definition at line 192 of file splitstepfouriersolver2d.h.
Referenced by invalidatePreparation(), and prepare().