pde_opt.numerics.solvers

Custom numerical solvers for partial differential equations.

This module provides specialized numerical solvers that extend the diffrax library for solving specific types of PDEs. The solvers are designed to work with the equation classes defined in the numerics.equations module.

Available Solvers:

SemiImplicitFourierSpectral: Semi-implicit Fourier spectral method.

StrangSplitting: Strang splitting method for equations with separable operators

(e.g., Gross-Pitaevskii equation).

All solvers inherit from diffrax.AbstractSolver and are compatible with the diffrax integration framework.

Classes

SemiImplicitFourierSpectral(*args, **kwargs)

Semi-implicit Fourier spectral method.

StrangSplitting(*args, **kwargs)

Strang splitting method for time-dependent PDEs with separable operators.

class pde_opt.numerics.solvers.SemiImplicitFourierSpectral(*args: Any, **kwargs: Any)[source]

Semi-implicit Fourier spectral method.

This solver implements a semi-implicit Fourier spectral method for phase-field simulations with variable mobility.

Required Equation Attributes:

fourier_symbol: Fourier space representation of the highest order differential operator. fft: Forward Fourier transform function. ifft: Inverse Fourier transform function.

Parameters:

A (float) – Constant for splitting the mobility term.

References

Zhu, Jingzhi, et al. “Coarsening kinetics from a variable-mobility Cahn-Hilliard equation: Application of a semi-implicit Fourier spectral method.” Physical Review E 60.4 (1999): 3564.

required_equation_attrs = ['fourier_symbol', 'fft', 'ifft']
A: float
fourier_symbol: jax.Array
fft: Callable
ifft: Callable
order(terms)[source]
init(terms, t0, t1, y0, args)[source]
step(terms, t0, t1, y0, args, solver_state, made_jump)[source]
func(terms, t0, y0, args)[source]
class pde_opt.numerics.solvers.StrangSplitting(*args: Any, **kwargs: Any)[source]

Strang splitting method for time-dependent PDEs with separable operators.

References

Bao, Weizhu, and Yongyong Cai. “Mathematical theory and numerical methods for Bose-Einstein condensation.” arXiv preprint arXiv:1212.5341 (2012).

required_equation_attrs = ['A_term', 'dx', 'fft', 'ifft']
A_term: jax.Array
dx: float
fft: Callable
ifft: Callable
time_scale: float
order(terms)[source]
init(terms, t0, t1, y0, args)[source]
step(terms, t0, t1, y0, args, solver_state, made_jump)[source]
func(terms, t0, y0, args)[source]