50 using cplx = std::complex<double>;
52 auto factor = [&](
double tau) {
60 td_half_ = factor(
dt * 0.5);
61 td_full_ = factor(
dt);
67 using cplx = std::complex<double>;
72 auto apply = [&](std::vector<cplx>&
fiber) {
73 std::vector<cplx> rhs(
N);
74 for (
int i = 0;
i <
N; ++
i) {
80 fiber = std::move(rhs);
Dense vector with optional GPU storage, templated over scalar type T.
void row_fiber_sweep(BasicVector< T > &data, int N, F &&f)
constexpr T ipow(T x) noexcept
Compute x^N at compile time via repeated squaring.
std::complex< real > cplx
void col_fiber_sweep(BasicVector< T > &data, int N, F &&f)
Higher-order stencil and grid-sweep utilities.
Constant-coefficient complex tridiagonal solver (precomputed LU).
void factor(int n_, cplx a_, cplx b_, cplx c_)
Factor the tridiagonal matrix.
CrankNicolsonADI(int N_, double dt_, double h_)
CrankNicolsonADI()=default
void sweep(CVector &psi, bool x_axis, double tau) const
Precomputed LU Thomas solver for constant-coefficient complex tridiagonal systems.