numerics
Loading...
Searching...
No Matches
tdse_solver.hpp File Reference

2-D Time-Dependent Schrödinger Equation solver More...

#include "core/types.hpp"
#include "core/vector.hpp"
#include "pde/adi.hpp"
#include <vector>
#include <complex>
#include <cmath>

Go to the source code of this file.

Classes

struct  tdse::EigenMode
 
struct  tdse::Stats
 
class  tdse::TDSESolver
 

Namespaces

namespace  tdse
 

Enumerations

enum class  tdse::Potential {
  tdse::Free , tdse::Barrier , tdse::DoubleSlit , tdse::Harmonic ,
  tdse::CircularWell
}
 

Functions

const char * tdse::potential_name (Potential p)
 

Detailed Description

2-D Time-Dependent Schrödinger Equation solver

Algorithm: Strang operator splitting e^{-iHdt} ~= e^{-iVdt/2} * e^{-iTx*dt/2} * e^{-iTy*dt} * e^{-iTx*dt/2} * e^{-iVdt/2}

Each kinetic sub-step uses Crank-Nicolson -> complex tridiagonal solve (Thomas algorithm). Potential kick is a diagonal phase multiplication: psi *= exp(-i*V*tau).

Eigenstate computation uses num::lanczos on the real Hamiltonian matrix (H is real symmetric for real V, so eigenstates are real).

Bessel function zeros (for CircularWell exact eigenvalues) are found via num::brent. Norm/energy observables use num::gauss_legendre on radial marginals.

Grid: NxN interior points, domain [0,L]x[0,L], Dirichlet BCs (psi=0 on boundary). Storage: row-major idx = i*N + j, i = row (x), j = col (y).

Definition in file tdse_solver.hpp.