From 057658a4aa9d2c2294ce9c3807a4677036ce5187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20K=C3=B6hler?= <27728103+Ceyron@users.noreply.github.com> Date: Fri, 5 Jul 2024 10:13:25 +0200 Subject: [PATCH] Expand Docs (#6) * Move all resources into docs folder * Embed design decisions * Embed design decisions * Intro to advection * Add all linear time steppers * Ensure documentation displays correctly * Add nonlinear problems * Ensure documentation displays properly * Reformate for mkdocs * Reformate for mkdocs * Proxy setup of ICs to have reaction diffusion work * Setup all reaction-diffusion steppers * Comply with markdown * Add docs for normalized and difficulty conversion utilties * Add docs to general steppers * Fix spelling mistake * Adapt to name change * Add all normalized steppers * Add doc files for difficulty interface * Add docs for all ICs * Rework linking to make mkdocstrings work * Add documentation for metrics * Export placeholder functions * Ensure consistent naming * Add docs for visualization routines * Add docs for smaller utility functions * Add documentation for Poisson solver * Add missing members selector * Add ETDRK and base classes docs * Add all documentation for the nonlinear functions * Enhance landing page --- README.md | 8 +- docs/api/etdrk_backbone.md | 55 ++ docs/api/stepper/difficulty/convection.md | 7 + docs/api/stepper/difficulty/gradient_norm.md | 7 + docs/api/stepper/difficulty/linear.md | 7 + docs/api/stepper/difficulty/nonlinear.md | 7 + docs/api/stepper/difficulty/polynomial.md | 7 + docs/api/stepper/normalized/convection.md | 7 + docs/api/stepper/normalized/gradient_norm.md | 7 + docs/api/stepper/normalized/nonlinear.md | 7 + docs/api/stepper/normalized/polynomial.md | 7 + .../normalized/vorticity_convection.md | 7 + docs/api/stepper/physical/burgers.md | 17 + .../physical/general/general_convection.md | 7 + .../physical/general/general_gradient_norm.md | 7 + .../physical/general/general_linear.md | 7 + .../physical/general/general_nonlinear.md | 7 + .../physical/general/general_polynomial.md | 7 + .../general/general_vorticity_convection.md | 7 + docs/api/stepper/physical/kdv.md | 7 + docs/api/stepper/physical/ks.md | 17 + docs/api/stepper/physical/ks_cons.md | 11 + docs/api/stepper/physical/linear/advection.md | 7 + .../physical/linear/advection_diffusion.md | 17 + docs/api/stepper/physical/linear/diffusion.md | 21 + .../api/stepper/physical/linear/dispersion.md | 19 + .../physical/linear/hyper_diffusion.md | 19 + docs/api/stepper/physical/navier_stokes.md | 15 + docs/api/stepper/physical/poisson.md | 9 + .../physical/reaction_diffusion/allen_cahn.md | 7 + .../reaction_diffusion/cahn_hilliard.md | 7 + .../physical/reaction_diffusion/fisher_kpp.md | 7 + .../physical/reaction_diffusion/gray_scott.md | 7 + .../reaction_diffusion/swift_hohenberg.md | 7 + docs/api/utilities/derivatives.md | 7 + docs/api/utilities/forced_stepper.md | 7 + docs/api/utilities/grid_generation.md | 7 + .../base_initial_condition.md | 5 + .../initial_conditions/diffused_noise.md | 7 + .../initial_conditions/discontinuities.md | 15 + .../initial_conditions/gaussian_blob.md | 11 + .../gaussian_random_field.md | 7 + .../utilities/initial_conditions/helper.md | 43 ++ .../initial_conditions/sine_waves_1d.md | 15 + .../truncated_fourier_series.md | 7 + docs/api/utilities/metrics/correlation.md | 11 + docs/api/utilities/metrics/fourier_nrmse.md | 11 + docs/api/utilities/metrics/mse_based.md | 19 + docs/api/utilities/metrics/rmse_based.md | 19 + docs/api/utilities/nonlin_fun/base.md | 7 + docs/api/utilities/nonlin_fun/convection.md | 7 + .../api/utilities/nonlin_fun/gradient_norm.md | 7 + docs/api/utilities/nonlin_fun/nonlinear.md | 7 + docs/api/utilities/nonlin_fun/polynomial.md | 7 + .../nonlin_fun/vorticity_convection.md | 15 + docs/api/utilities/nonlin_fun/zero.md | 9 + .../utilities/normalized_and_difficulty.md | 63 ++ docs/api/utilities/repeated_stepper.md | 16 + docs/api/utilities/rollout_and_repeat.md | 13 + .../visualization/animate_spatio_temporal.md | 7 + .../animate_spatio_temporal_facet.md | 7 + .../utilities/visualization/animate_states.md | 13 + .../visualization/animate_states_facet.md | 11 + .../visualization/plot_spatio_temporal.md | 9 + .../plot_spatio_temporal_facet.md | 7 + .../utilities/visualization/plot_states.md | 13 + .../visualization/plot_states_facet.md | 13 + docs/background/design_decisions.md | 106 +++ .../examples}/additional_features.ipynb | 0 .../creating_your_own_solvers_1d.ipynb | 0 .../examples}/edtrk_from_the_ground_up.ipynb | 0 .../initial_condition_showcase_1d.ipynb | 0 ...rgers_autoregressive_neural_operator.ipynb | 0 .../examples}/performance_hints.ipynb | 0 .../simple_advection_example_2d.ipynb | 0 .../examples}/solver_showcase_1d.ipynb | 0 .../examples}/solver_showcase_2d.ipynb | 0 ...nding_general_and_normalized_stepper.ipynb | 0 ...understanding_normalized_and_difficulty.py | 2 +- {img => docs/imgs}/exponax_logo.png | Bin {img => docs/imgs}/ks_rollout.png | Bin {img => docs/imgs}/teaser_demo.gif | Bin docs/index.md | 76 +- examples/simple_advection_example_1d.ipynb | 673 ------------------ exponax/_metrics.py | 8 +- exponax/normalized/__init__.py | 4 +- exponax/normalized/_general_nonlinear.py | 4 +- exponax/reaction/_allen_cahn.py | 63 +- exponax/reaction/_cahn_hilliard.py | 62 +- exponax/reaction/_fisher_kpp.py | 75 +- exponax/reaction/_gray_scott.py | 59 +- exponax/reaction/_swift_hohenberg.py | 57 +- exponax/stepper/_burgers.py | 91 +-- exponax/stepper/_korteweg_de_vries.py | 99 +-- exponax/stepper/_kuramoto_sivashinsky.py | 126 ++-- exponax/stepper/_linear.py | 278 ++++---- exponax/stepper/_navier_stokes.py | 160 +++-- exponax/viz/__init__.py | 8 +- exponax/viz/_animate_facet.py | 2 +- mkdocs.yml | 93 ++- tests/test_builtin_solvers.py | 2 +- 101 files changed, 1615 insertions(+), 1224 deletions(-) create mode 100644 docs/api/etdrk_backbone.md create mode 100644 docs/api/stepper/difficulty/convection.md create mode 100644 docs/api/stepper/difficulty/gradient_norm.md create mode 100644 docs/api/stepper/difficulty/linear.md create mode 100644 docs/api/stepper/difficulty/nonlinear.md create mode 100644 docs/api/stepper/difficulty/polynomial.md create mode 100644 docs/api/stepper/normalized/convection.md create mode 100644 docs/api/stepper/normalized/gradient_norm.md create mode 100644 docs/api/stepper/normalized/nonlinear.md create mode 100644 docs/api/stepper/normalized/polynomial.md create mode 100644 docs/api/stepper/normalized/vorticity_convection.md create mode 100644 docs/api/stepper/physical/burgers.md create mode 100644 docs/api/stepper/physical/general/general_convection.md create mode 100644 docs/api/stepper/physical/general/general_gradient_norm.md create mode 100644 docs/api/stepper/physical/general/general_linear.md create mode 100644 docs/api/stepper/physical/general/general_nonlinear.md create mode 100644 docs/api/stepper/physical/general/general_polynomial.md create mode 100644 docs/api/stepper/physical/general/general_vorticity_convection.md create mode 100644 docs/api/stepper/physical/kdv.md create mode 100644 docs/api/stepper/physical/ks.md create mode 100644 docs/api/stepper/physical/ks_cons.md create mode 100644 docs/api/stepper/physical/linear/advection_diffusion.md create mode 100644 docs/api/stepper/physical/linear/diffusion.md create mode 100644 docs/api/stepper/physical/linear/dispersion.md create mode 100644 docs/api/stepper/physical/linear/hyper_diffusion.md create mode 100644 docs/api/stepper/physical/navier_stokes.md create mode 100644 docs/api/stepper/physical/poisson.md create mode 100644 docs/api/stepper/physical/reaction_diffusion/allen_cahn.md create mode 100644 docs/api/stepper/physical/reaction_diffusion/cahn_hilliard.md create mode 100644 docs/api/stepper/physical/reaction_diffusion/fisher_kpp.md create mode 100644 docs/api/stepper/physical/reaction_diffusion/gray_scott.md create mode 100644 docs/api/stepper/physical/reaction_diffusion/swift_hohenberg.md create mode 100644 docs/api/utilities/derivatives.md create mode 100644 docs/api/utilities/forced_stepper.md create mode 100644 docs/api/utilities/grid_generation.md create mode 100644 docs/api/utilities/initial_conditions/base_initial_condition.md create mode 100644 docs/api/utilities/initial_conditions/diffused_noise.md create mode 100644 docs/api/utilities/initial_conditions/discontinuities.md create mode 100644 docs/api/utilities/initial_conditions/gaussian_blob.md create mode 100644 docs/api/utilities/initial_conditions/gaussian_random_field.md create mode 100644 docs/api/utilities/initial_conditions/helper.md create mode 100644 docs/api/utilities/initial_conditions/sine_waves_1d.md create mode 100644 docs/api/utilities/initial_conditions/truncated_fourier_series.md create mode 100644 docs/api/utilities/metrics/correlation.md create mode 100644 docs/api/utilities/metrics/fourier_nrmse.md create mode 100644 docs/api/utilities/metrics/mse_based.md create mode 100644 docs/api/utilities/metrics/rmse_based.md create mode 100644 docs/api/utilities/nonlin_fun/base.md create mode 100644 docs/api/utilities/nonlin_fun/convection.md create mode 100644 docs/api/utilities/nonlin_fun/gradient_norm.md create mode 100644 docs/api/utilities/nonlin_fun/nonlinear.md create mode 100644 docs/api/utilities/nonlin_fun/polynomial.md create mode 100644 docs/api/utilities/nonlin_fun/vorticity_convection.md create mode 100644 docs/api/utilities/nonlin_fun/zero.md create mode 100644 docs/api/utilities/normalized_and_difficulty.md create mode 100644 docs/api/utilities/repeated_stepper.md create mode 100644 docs/api/utilities/rollout_and_repeat.md create mode 100644 docs/api/utilities/visualization/animate_spatio_temporal.md create mode 100644 docs/api/utilities/visualization/animate_spatio_temporal_facet.md create mode 100644 docs/api/utilities/visualization/animate_states.md create mode 100644 docs/api/utilities/visualization/animate_states_facet.md create mode 100644 docs/api/utilities/visualization/plot_spatio_temporal.md create mode 100644 docs/api/utilities/visualization/plot_spatio_temporal_facet.md create mode 100644 docs/api/utilities/visualization/plot_states.md create mode 100644 docs/api/utilities/visualization/plot_states_facet.md create mode 100644 docs/background/design_decisions.md rename {examples => docs/examples}/additional_features.ipynb (100%) rename {examples => docs/examples}/creating_your_own_solvers_1d.ipynb (100%) rename {examples => docs/examples}/edtrk_from_the_ground_up.ipynb (100%) rename {examples => docs/examples}/initial_condition_showcase_1d.ipynb (100%) rename {examples => docs/examples}/learning_burgers_autoregressive_neural_operator.ipynb (100%) rename {examples => docs/examples}/performance_hints.ipynb (100%) rename {examples => docs/examples}/simple_advection_example_2d.ipynb (100%) rename {examples => docs/examples}/solver_showcase_1d.ipynb (100%) rename {examples => docs/examples}/solver_showcase_2d.ipynb (100%) rename {examples => docs/examples}/understanding_general_and_normalized_stepper.ipynb (100%) rename {examples => docs/examples}/understanding_normalized_and_difficulty.py (98%) rename {img => docs/imgs}/exponax_logo.png (100%) rename {img => docs/imgs}/ks_rollout.png (100%) rename {img => docs/imgs}/teaser_demo.gif (100%) delete mode 100644 examples/simple_advection_example_1d.ipynb diff --git a/README.md b/README.md index 8b36e96..2e5a271 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- +
Exponax
@@ -19,7 +19,7 @@

- +

## Installation @@ -57,7 +57,7 @@ plt.imshow(trajectory[:, 0, :].T, aspect='auto', cmap='RdBu', vmin=-2, vmax=2, o plt.xlabel("Time"); plt.ylabel("Space"); plt.show() ``` -![](img/ks_rollout.png) +![](docs/imgs/ks_rollout.png) For a next step, check out the [simple_advection_example_1d.ipynb](examples/simple_advection_example_1d.ipynb) notebook in the `examples` folder, and check out the Documentation. @@ -95,7 +95,7 @@ For a next step, check out the [simple_advection_example_1d.ipynb](examples/simp The following Jupyter notebooks showcase the usage of the package: -1. [Simple Advection Example in 1d](examples/simple_advection_example_1d.ipynb) +1. [Simple Advection Example in 1d](docs/examples/simple_advection_example_1d.ipynb) 2. ... The documentation is still in progress. For now, the best way to get started is diff --git a/docs/api/etdrk_backbone.md b/docs/api/etdrk_backbone.md new file mode 100644 index 0000000..18ceac0 --- /dev/null +++ b/docs/api/etdrk_backbone.md @@ -0,0 +1,55 @@ +# ETDRK Backbone + +Core clases that implement the Exponential Time Differencing Runge-Kutta (ETDRK) +method for solving semi-linear PDEs in form of timesteppers. Require supplying +the time step size $\Delta t$, the linear operator in Fourier space $\hat{\mathcal{L}}_h$, and the non-linear operator in Fourier space $\hat{\mathcal{N}}_h$. + +::: exponax.etdrk.ETDRK0 + options: + members: + - __init__ + - step_fourier + +--- + +::: exponax.etdrk.ETDRK1 + options: + members: + - __init__ + - step_fourier + +--- + +::: exponax.etdrk.ETDRK2 + options: + members: + - __init__ + - step_fourier + +--- + +::: exponax.etdrk.ETDRK3 + options: + members: + - __init__ + - step_fourier + +--- + +::: exponax.etdrk.ETDRK4 + options: + members: + - __init__ + - step_fourier + +--- + +::: exponax.etdrk.BaseETDRK + options: + members: + - __init__ + - step_fourier + +--- + +::: exponax.etdrk.roots_of_unity \ No newline at end of file diff --git a/docs/api/stepper/difficulty/convection.md b/docs/api/stepper/difficulty/convection.md new file mode 100644 index 0000000..eafd182 --- /dev/null +++ b/docs/api/stepper/difficulty/convection.md @@ -0,0 +1,7 @@ +# Convection + +::: exponax.normalized.DifficultyConvectionStepper + options: + members: + - __init__ + - __call__ diff --git a/docs/api/stepper/difficulty/gradient_norm.md b/docs/api/stepper/difficulty/gradient_norm.md new file mode 100644 index 0000000..cc2fbae --- /dev/null +++ b/docs/api/stepper/difficulty/gradient_norm.md @@ -0,0 +1,7 @@ +# Gradient Norm + +::: exponax.normalized.DifficultyGradientNormStepper + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/difficulty/linear.md b/docs/api/stepper/difficulty/linear.md new file mode 100644 index 0000000..100621c --- /dev/null +++ b/docs/api/stepper/difficulty/linear.md @@ -0,0 +1,7 @@ +# Linear + +::: exponax.normalized.DifficultyLinearStepper + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/difficulty/nonlinear.md b/docs/api/stepper/difficulty/nonlinear.md new file mode 100644 index 0000000..717189b --- /dev/null +++ b/docs/api/stepper/difficulty/nonlinear.md @@ -0,0 +1,7 @@ +# Nonlinear + +::: exponax.normalized.DifficultyGeneralNonlinearStepper + options: + members: + - __init__ + - __call__ diff --git a/docs/api/stepper/difficulty/polynomial.md b/docs/api/stepper/difficulty/polynomial.md new file mode 100644 index 0000000..882c62f --- /dev/null +++ b/docs/api/stepper/difficulty/polynomial.md @@ -0,0 +1,7 @@ +# Polynomial + +::: exponax.normalized.DifficultyPolynomialStepper + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/normalized/convection.md b/docs/api/stepper/normalized/convection.md new file mode 100644 index 0000000..7f3982d --- /dev/null +++ b/docs/api/stepper/normalized/convection.md @@ -0,0 +1,7 @@ +# Convection + +::: exponax.normalized.NormalizedConvectionStepper + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/normalized/gradient_norm.md b/docs/api/stepper/normalized/gradient_norm.md new file mode 100644 index 0000000..64689e0 --- /dev/null +++ b/docs/api/stepper/normalized/gradient_norm.md @@ -0,0 +1,7 @@ +# Gradient NormA + +::: exponax.normalized.NormalizedGradientNormStepper + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/normalized/nonlinear.md b/docs/api/stepper/normalized/nonlinear.md new file mode 100644 index 0000000..2171583 --- /dev/null +++ b/docs/api/stepper/normalized/nonlinear.md @@ -0,0 +1,7 @@ +# Nonlinear + +::: exponax.normalized.NormalizedGeneralNonlinearStepper + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/normalized/polynomial.md b/docs/api/stepper/normalized/polynomial.md new file mode 100644 index 0000000..294c9f2 --- /dev/null +++ b/docs/api/stepper/normalized/polynomial.md @@ -0,0 +1,7 @@ +# Polynomial + +::: exponax.normalized.NormalizedPolynomialStepper + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/normalized/vorticity_convection.md b/docs/api/stepper/normalized/vorticity_convection.md new file mode 100644 index 0000000..fbd9790 --- /dev/null +++ b/docs/api/stepper/normalized/vorticity_convection.md @@ -0,0 +1,7 @@ +# Vorticity Convection + +::: exponax.normalized.NormalizedVorticityConvection + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/physical/burgers.md b/docs/api/stepper/physical/burgers.md new file mode 100644 index 0000000..73d508b --- /dev/null +++ b/docs/api/stepper/physical/burgers.md @@ -0,0 +1,17 @@ +# Burgers + +In 1D: + +$$ \frac{\partial u}{\partial t} + \frac{1}{2} \frac{\partial u^2}{\partial x} = \nu \frac{\partial^2 u}{\partial x^2} $$ + +In higher dimensions: + +$$ \frac{\partial u}{\partial t} + \frac{1}{2} \nabla \cdot (u \odot u) = \nu \nabla \cdot \nabla u $$ + +(with as many channels (=velocity components) as spatial dimensions) + +::: exponax.stepper.Burgers + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/physical/general/general_convection.md b/docs/api/stepper/physical/general/general_convection.md new file mode 100644 index 0000000..64b8920 --- /dev/null +++ b/docs/api/stepper/physical/general/general_convection.md @@ -0,0 +1,7 @@ +# General Convection Stepper + +::: exponax.stepper.GeneralConvectionStepper + options: + members: + - __init__ + - __call__ diff --git a/docs/api/stepper/physical/general/general_gradient_norm.md b/docs/api/stepper/physical/general/general_gradient_norm.md new file mode 100644 index 0000000..0be3dba --- /dev/null +++ b/docs/api/stepper/physical/general/general_gradient_norm.md @@ -0,0 +1,7 @@ +# General Gradient Norm Stepper + +::: exponax.stepper.GeneralGradientNormStepper + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/physical/general/general_linear.md b/docs/api/stepper/physical/general/general_linear.md new file mode 100644 index 0000000..e867c51 --- /dev/null +++ b/docs/api/stepper/physical/general/general_linear.md @@ -0,0 +1,7 @@ +# General Linear Stepper + +::: exponax.stepper.GeneralLinearStepper + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/physical/general/general_nonlinear.md b/docs/api/stepper/physical/general/general_nonlinear.md new file mode 100644 index 0000000..8714da1 --- /dev/null +++ b/docs/api/stepper/physical/general/general_nonlinear.md @@ -0,0 +1,7 @@ +# General Nonlinear Stepper + +::: exponax.stepper.GeneralNonlinearStepper + options: + members: + - __init__ + - __call__ diff --git a/docs/api/stepper/physical/general/general_polynomial.md b/docs/api/stepper/physical/general/general_polynomial.md new file mode 100644 index 0000000..9de794c --- /dev/null +++ b/docs/api/stepper/physical/general/general_polynomial.md @@ -0,0 +1,7 @@ +# General Polynomial Stepper + +::: exponax.stepper.GeneralPolynomialStepper + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/physical/general/general_vorticity_convection.md b/docs/api/stepper/physical/general/general_vorticity_convection.md new file mode 100644 index 0000000..637a524 --- /dev/null +++ b/docs/api/stepper/physical/general/general_vorticity_convection.md @@ -0,0 +1,7 @@ +# General Vorticity Convection Stepper + +::: exponax.stepper.GeneralVorticityConvectionStepper + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/physical/kdv.md b/docs/api/stepper/physical/kdv.md new file mode 100644 index 0000000..8592b0b --- /dev/null +++ b/docs/api/stepper/physical/kdv.md @@ -0,0 +1,7 @@ +# Korteweg-de Vries + +::: exponax.stepper.KortewegDeVries + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/physical/ks.md b/docs/api/stepper/physical/ks.md new file mode 100644 index 0000000..f7fcae0 --- /dev/null +++ b/docs/api/stepper/physical/ks.md @@ -0,0 +1,17 @@ +# Kuramoto-Sivashinsky equation + +In 1D: + +$$ \frac{\partial u}{\partial t} + \frac{1}{2} \left(\frac{\partial u}{\partial x}\right)^2 + \frac{\partial^2 u}{\partial x^2} + \frac{\partial^4 u}{\partial x^4} = 0 $$ + +In higher dimensions: + +$$ \frac{\partial u}{\partial t} + \frac{1}{2} \left \| \nabla u \right \|^2 + \nabla \cdot \nabla u + \nabla \cdot (\nabla \odot \nabla \odot \nabla) u = 0 $$ + +Uses the combustion format via the gradient norm that easily scales to higher dimensions. + +::: exponax.stepper.KuramotoSivashinsky + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/physical/ks_cons.md b/docs/api/stepper/physical/ks_cons.md new file mode 100644 index 0000000..33addfa --- /dev/null +++ b/docs/api/stepper/physical/ks_cons.md @@ -0,0 +1,11 @@ +# Kuramoto-Sivashinsky (conservative format) + +Uses the convection nonlinearity similar to Burgers, but only works in 1D: + +$$ \frac{\partial u}{\partial t} + \frac{1}{2} \frac{\partial u^2}{\partial x} + \frac{\partial^2 u}{\partial x^2} + \frac{\partial^4 u}{\partial x^4} = 0 $$ + +::: exponax.stepper.KuramotoSivashinskyConservative + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/physical/linear/advection.md b/docs/api/stepper/physical/linear/advection.md index f477e96..dcaf7b2 100644 --- a/docs/api/stepper/physical/linear/advection.md +++ b/docs/api/stepper/physical/linear/advection.md @@ -1,7 +1,14 @@ # Advection +In 1D: + $$ \frac{\partial u}{\partial t} + c \frac{\partial u}{\partial x} = 0 $$ +In higher dimensions: + +$$ \frac{\partial u}{\partial t} + \vec{c} \cdot \nabla u = 0 $$ + +(often just $\vec{c} = c \vec{1}$) ::: exponax.stepper.Advection diff --git a/docs/api/stepper/physical/linear/advection_diffusion.md b/docs/api/stepper/physical/linear/advection_diffusion.md new file mode 100644 index 0000000..b707cf7 --- /dev/null +++ b/docs/api/stepper/physical/linear/advection_diffusion.md @@ -0,0 +1,17 @@ +# Advection-Diffusion + +In 1D: + +$$ \frac{\partial u}{\partial t} + c \frac{\partial u}{\partial x} = \nu \frac{\partial^2 u}{\partial x^2} $$ + +In higher dimensions: + +$$ \frac{\partial u}{\partial t} + \vec{c} \cdot \nabla u = \nu \nabla \cdot \nabla u $$ + +(often just $\vec{c} = c \vec{1}$) and potentially with anisotropic diffusion. + +::: exponax.stepper.AdvectionDiffusion + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/physical/linear/diffusion.md b/docs/api/stepper/physical/linear/diffusion.md new file mode 100644 index 0000000..ca803ef --- /dev/null +++ b/docs/api/stepper/physical/linear/diffusion.md @@ -0,0 +1,21 @@ +# Diffusion + +In 1D: + +$$ \frac{\partial u}{\partial t} = \nu \frac{\partial^2 u}{\partial x^2} $$ + +In higher dimensions: + +$$ \frac{\partial u}{\partial t} = \nu \nabla \cdot \nabla u $$ + +or with anisotropic diffusion: + +$$ \frac{\partial u}{\partial t} = \nabla \cdot \left( A \nabla u \right) $$ + +with $A \in \R^{D \times D}$ symmetric positive definite. + +::: exponax.stepper.Diffusion + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/physical/linear/dispersion.md b/docs/api/stepper/physical/linear/dispersion.md new file mode 100644 index 0000000..650fff4 --- /dev/null +++ b/docs/api/stepper/physical/linear/dispersion.md @@ -0,0 +1,19 @@ +# Dispersion + +In 1D: + +$$ \frac{\partial u}{\partial t} = \xi \frac{\partial^3 u}{\partial x^3} $$ + +In higher dimensions: + +$$ \frac{\partial u}{\partial t} = \xi \nabla \cdot (\nabla \odot \nabla) u $$ + +or with spatial mixing: + +$$ \frac{\partial u}{\partial t} = \xi (1 \cdot \nabla) (\nabla \cdot \nabla) u $$ + +::: exponax.stepper.Dispersion + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/physical/linear/hyper_diffusion.md b/docs/api/stepper/physical/linear/hyper_diffusion.md new file mode 100644 index 0000000..f94d96f --- /dev/null +++ b/docs/api/stepper/physical/linear/hyper_diffusion.md @@ -0,0 +1,19 @@ +# Hyper-Diffusion + +In 1D: + +$$ \frac{\partial u}{\partial t} = \xi \frac{\partial^4 u}{\partial x^4} $$ + +In higher dimensions: + +$$ \frac{\partial u}{\partial t} = \zeta \nabla \cdot (\nabla \odot \nabla \odot \nabla) u $$ + +or with spatial mixing: + +$$ \frac{\partial u}{\partial t} = \zeta (\nabla \cdot \nabla)(\nabla \cdot \nabla) u $$ + +::: exponax.stepper.HyperDiffusion + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/physical/navier_stokes.md b/docs/api/stepper/physical/navier_stokes.md new file mode 100644 index 0000000..71f564c --- /dev/null +++ b/docs/api/stepper/physical/navier_stokes.md @@ -0,0 +1,15 @@ +# Navier-Stokes (in streamfunction-vorticity formulation) + +::: exponax.stepper.NavierStokesVorticity + options: + members: + - __init__ + - __call__ + +--- + +::: exponax.stepper.KolmogorovFlowVorticity + options: + members: + - __init__ + - __call__ diff --git a/docs/api/stepper/physical/poisson.md b/docs/api/stepper/physical/poisson.md new file mode 100644 index 0000000..9b7c152 --- /dev/null +++ b/docs/api/stepper/physical/poisson.md @@ -0,0 +1,9 @@ +# Poisson Solver + +(for completion - not a time-dependent stepper) + +::: exponax.poisson.Poisson + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/physical/reaction_diffusion/allen_cahn.md b/docs/api/stepper/physical/reaction_diffusion/allen_cahn.md new file mode 100644 index 0000000..e74b2d2 --- /dev/null +++ b/docs/api/stepper/physical/reaction_diffusion/allen_cahn.md @@ -0,0 +1,7 @@ +# Allen-Cahn + +::: exponax.reaction.AllenCahn + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/physical/reaction_diffusion/cahn_hilliard.md b/docs/api/stepper/physical/reaction_diffusion/cahn_hilliard.md new file mode 100644 index 0000000..b0d441f --- /dev/null +++ b/docs/api/stepper/physical/reaction_diffusion/cahn_hilliard.md @@ -0,0 +1,7 @@ +# Cahn-Hilliad + +::: exponax.reaction.CahnHilliard + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/physical/reaction_diffusion/fisher_kpp.md b/docs/api/stepper/physical/reaction_diffusion/fisher_kpp.md new file mode 100644 index 0000000..d4b7a66 --- /dev/null +++ b/docs/api/stepper/physical/reaction_diffusion/fisher_kpp.md @@ -0,0 +1,7 @@ +# Fisher-KPP + +::: exponax.reaction.FisherKPP + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/physical/reaction_diffusion/gray_scott.md b/docs/api/stepper/physical/reaction_diffusion/gray_scott.md new file mode 100644 index 0000000..c3dce33 --- /dev/null +++ b/docs/api/stepper/physical/reaction_diffusion/gray_scott.md @@ -0,0 +1,7 @@ +# Gray-Scott + +::: exponax.reaction.GrayScott + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/stepper/physical/reaction_diffusion/swift_hohenberg.md b/docs/api/stepper/physical/reaction_diffusion/swift_hohenberg.md new file mode 100644 index 0000000..b38ab8c --- /dev/null +++ b/docs/api/stepper/physical/reaction_diffusion/swift_hohenberg.md @@ -0,0 +1,7 @@ +# Swift-Hohenberg + +::: exponax.reaction.SwiftHohenberg + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/utilities/derivatives.md b/docs/api/utilities/derivatives.md new file mode 100644 index 0000000..d678942 --- /dev/null +++ b/docs/api/utilities/derivatives.md @@ -0,0 +1,7 @@ +# Utilities to take spectral derivatives + +::: exponax.derivative + +--- + +::: exponax.make_incompressible \ No newline at end of file diff --git a/docs/api/utilities/forced_stepper.md b/docs/api/utilities/forced_stepper.md new file mode 100644 index 0000000..ff80016 --- /dev/null +++ b/docs/api/utilities/forced_stepper.md @@ -0,0 +1,7 @@ +# Forced Stepper + +::: exponax.ForcedStepper + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/utilities/grid_generation.md b/docs/api/utilities/grid_generation.md new file mode 100644 index 0000000..413329a --- /dev/null +++ b/docs/api/utilities/grid_generation.md @@ -0,0 +1,7 @@ +# Utilities to handle the grid and the states on it + +::: exponax.make_grid + +--- + +::: exponax.wrap_bc \ No newline at end of file diff --git a/docs/api/utilities/initial_conditions/base_initial_condition.md b/docs/api/utilities/initial_conditions/base_initial_condition.md new file mode 100644 index 0000000..fc92ffc --- /dev/null +++ b/docs/api/utilities/initial_conditions/base_initial_condition.md @@ -0,0 +1,5 @@ +::: exponax.ic.BaseRandomICGenerator + +--- + +::: exponax.ic.BaseIC \ No newline at end of file diff --git a/docs/api/utilities/initial_conditions/diffused_noise.md b/docs/api/utilities/initial_conditions/diffused_noise.md new file mode 100644 index 0000000..d1f80d4 --- /dev/null +++ b/docs/api/utilities/initial_conditions/diffused_noise.md @@ -0,0 +1,7 @@ +# Diffused Noise + +::: exponax.ic.DiffusedNoise + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/utilities/initial_conditions/discontinuities.md b/docs/api/utilities/initial_conditions/discontinuities.md new file mode 100644 index 0000000..b605ae6 --- /dev/null +++ b/docs/api/utilities/initial_conditions/discontinuities.md @@ -0,0 +1,15 @@ +# Discontinuities + +::: exponax.ic.RandomDiscontinuities + options: + members: + - __init__ + - __call__ + +--- + +::: exponax.ic.Discontinuities + options: + members: + - __init__ + - __call__ diff --git a/docs/api/utilities/initial_conditions/gaussian_blob.md b/docs/api/utilities/initial_conditions/gaussian_blob.md new file mode 100644 index 0000000..860c4b2 --- /dev/null +++ b/docs/api/utilities/initial_conditions/gaussian_blob.md @@ -0,0 +1,11 @@ +# Gaussian Blob + +::: exponax.ic.RandomGaussianBlobs + options: + members: + - __init__ + - __call__ + +--- + +:::exponax.ic.GaussianBlobs \ No newline at end of file diff --git a/docs/api/utilities/initial_conditions/gaussian_random_field.md b/docs/api/utilities/initial_conditions/gaussian_random_field.md new file mode 100644 index 0000000..3c7ac04 --- /dev/null +++ b/docs/api/utilities/initial_conditions/gaussian_random_field.md @@ -0,0 +1,7 @@ +# Gaussian Random Field + +::: exponax.ic.GaussianRandomField + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/utilities/initial_conditions/helper.md b/docs/api/utilities/initial_conditions/helper.md new file mode 100644 index 0000000..30a3d9b --- /dev/null +++ b/docs/api/utilities/initial_conditions/helper.md @@ -0,0 +1,43 @@ +# Helper + +::: exponax.build_ic_set + +--- + +::: exponax.ic.MultiChannelIC + options: + members: + - __init__ + - __call__ + +--- + +::: exponax.ic.RandomMultiChannelICGenerator + options: + members: + - __init__ + - __call__ + +--- + +::: exponax.ic.ClampingICGenerator + options: + members: + - __init__ + - __call__ + +--- + +::: exponax.ic.ScaledICGenerator + options: + members: + - __init__ + - __call__ + +--- + +::: exponax.ic.ScaledIC + options: + members: + - __init__ + - __call__ diff --git a/docs/api/utilities/initial_conditions/sine_waves_1d.md b/docs/api/utilities/initial_conditions/sine_waves_1d.md new file mode 100644 index 0000000..a845fc9 --- /dev/null +++ b/docs/api/utilities/initial_conditions/sine_waves_1d.md @@ -0,0 +1,15 @@ +# Sine Waves in 1D + +::: exponax.ic.RandomSineWaves1d + options: + members: + - __init__ + - __call__ + +--- + +::: exponax.ic.SineWaves1d + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/utilities/initial_conditions/truncated_fourier_series.md b/docs/api/utilities/initial_conditions/truncated_fourier_series.md new file mode 100644 index 0000000..10b0354 --- /dev/null +++ b/docs/api/utilities/initial_conditions/truncated_fourier_series.md @@ -0,0 +1,7 @@ +# Truncated Fourier Series + +::: exponax.ic.RandomTruncatedFourierSeries + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/utilities/metrics/correlation.md b/docs/api/utilities/metrics/correlation.md new file mode 100644 index 0000000..1437195 --- /dev/null +++ b/docs/api/utilities/metrics/correlation.md @@ -0,0 +1,11 @@ +# Correlation + +::: exponax.metrics.correlation + +--- + +::: exponax.metrics.mean_correlation + +--- + +::: exponax.metrics._correlation \ No newline at end of file diff --git a/docs/api/utilities/metrics/fourier_nrmse.md b/docs/api/utilities/metrics/fourier_nrmse.md new file mode 100644 index 0000000..548d6c0 --- /dev/null +++ b/docs/api/utilities/metrics/fourier_nrmse.md @@ -0,0 +1,11 @@ +# Fourier nRMSE + +::: exponax.metrics.fourier_nRMSE + +--- + +::: exponax.metrics.mean_fourier_nRMSE + +--- + +::: exponax.metrics._fourier_nRMSE \ No newline at end of file diff --git a/docs/api/utilities/metrics/mse_based.md b/docs/api/utilities/metrics/mse_based.md new file mode 100644 index 0000000..68d319e --- /dev/null +++ b/docs/api/utilities/metrics/mse_based.md @@ -0,0 +1,19 @@ +# MSE-based metrics + +::: exponax.metrics.MSE + +--- + +::: exponax.metrics.nMSE + +--- + +::: exponax.metrics.mean_MSE + +--- + +::: exponax.metrics.mean_nMSE + +--- + +::: exponax.metrics._MSE \ No newline at end of file diff --git a/docs/api/utilities/metrics/rmse_based.md b/docs/api/utilities/metrics/rmse_based.md new file mode 100644 index 0000000..fbf7dfd --- /dev/null +++ b/docs/api/utilities/metrics/rmse_based.md @@ -0,0 +1,19 @@ +# RMSE-bsed metrics + +::: exponax.metrics.RMSE + +--- + +::: exponax.metrics.nRMSE + +--- + +::: exponax.metrics.mean_RMSE + +--- + +::: exponax.metrics.mean_nRMSE + +--- + +::: exponax.metrics._RMSE \ No newline at end of file diff --git a/docs/api/utilities/nonlin_fun/base.md b/docs/api/utilities/nonlin_fun/base.md new file mode 100644 index 0000000..e750a79 --- /dev/null +++ b/docs/api/utilities/nonlin_fun/base.md @@ -0,0 +1,7 @@ +# Base Nonlinear Function + +::: exponax.nonlin_fun.BaseNonlinearFun + options: + members: + - __init__ + - __call__ diff --git a/docs/api/utilities/nonlin_fun/convection.md b/docs/api/utilities/nonlin_fun/convection.md new file mode 100644 index 0000000..d5dbe8d --- /dev/null +++ b/docs/api/utilities/nonlin_fun/convection.md @@ -0,0 +1,7 @@ +# Convection + +::: exponax.nonlin_fun.ConvectionNonlinearFun + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/utilities/nonlin_fun/gradient_norm.md b/docs/api/utilities/nonlin_fun/gradient_norm.md new file mode 100644 index 0000000..b0d5af3 --- /dev/null +++ b/docs/api/utilities/nonlin_fun/gradient_norm.md @@ -0,0 +1,7 @@ +# Gradien Norm Nonlinear Functions + +::: exponax.nonlin_fun.GradientNormNonlinearFun + options: + members: + - __init__ + - __call__ diff --git a/docs/api/utilities/nonlin_fun/nonlinear.md b/docs/api/utilities/nonlin_fun/nonlinear.md new file mode 100644 index 0000000..10a80d8 --- /dev/null +++ b/docs/api/utilities/nonlin_fun/nonlinear.md @@ -0,0 +1,7 @@ +# General Nonlinear Function + +::: exponax.nonlin_fun.GeneralNonlinearFun + options: + members: + - __init__ + - __call__ diff --git a/docs/api/utilities/nonlin_fun/polynomial.md b/docs/api/utilities/nonlin_fun/polynomial.md new file mode 100644 index 0000000..f4698b7 --- /dev/null +++ b/docs/api/utilities/nonlin_fun/polynomial.md @@ -0,0 +1,7 @@ +# Polynomial Nonlinear Function + +::: exponax.nonlin_fun.PolynomialNonlinearFun + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/utilities/nonlin_fun/vorticity_convection.md b/docs/api/utilities/nonlin_fun/vorticity_convection.md new file mode 100644 index 0000000..2676745 --- /dev/null +++ b/docs/api/utilities/nonlin_fun/vorticity_convection.md @@ -0,0 +1,15 @@ +# Vorticity Convection Nonlinear Function + +::: exponax.nonlin_fun.VorticityConvection2d + options: + members: + - __init__ + - __call__ + +--- + +::: exponax.nonlin_fun.VorticityConvection2dKolmogorov + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/utilities/nonlin_fun/zero.md b/docs/api/utilities/nonlin_fun/zero.md new file mode 100644 index 0000000..ef35529 --- /dev/null +++ b/docs/api/utilities/nonlin_fun/zero.md @@ -0,0 +1,9 @@ +# Zero Nonlinear Function + +Use for linear time steppers. + +::: exponax.nonlin_fun.ZeroNonlinearFun + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/utilities/normalized_and_difficulty.md b/docs/api/utilities/normalized_and_difficulty.md new file mode 100644 index 0000000..64b9579 --- /dev/null +++ b/docs/api/utilities/normalized_and_difficulty.md @@ -0,0 +1,63 @@ +# Conversion Utilties for Normalized and Difficulty Steppers + +:::exponax.normalized.normalize_coefficients + +--- + +:::exponax.normalized.denormalize_coefficients + +--- + +:::exponax.normalized.normalize_convection_scale + +--- + +:::exponax.normalized.denormalize_convection_scale + +--- + +:::exponax.normalized.normalize_gradient_norm_scale + +--- + +:::exponax.normalized.denormalize_gradient_norm_scale + +--- + +:::exponax.normalized.normalize_polynomial_scales + +--- + +:::exponax.normalized.denormalize_polynomial_scales + +--- + +:::exponax.normalized.reduce_normalized_coefficients_to_difficulty + +--- + +:::exponax.normalized.extract_normalized_coefficients_from_difficulty + +--- + +:::exponax.normalized.reduce_normalized_convection_scale_to_difficulty + +--- + +:::exponax.normalized.extract_normalized_convection_scale_from_difficulty + +--- + +:::exponax.normalized.reduce_normalized_gradient_norm_scale_to_difficulty + +--- + +:::exponax.normalized.extract_normalized_gradient_norm_scale_from_difficulty + + \ No newline at end of file diff --git a/docs/api/utilities/repeated_stepper.md b/docs/api/utilities/repeated_stepper.md new file mode 100644 index 0000000..9911acf --- /dev/null +++ b/docs/api/utilities/repeated_stepper.md @@ -0,0 +1,16 @@ +# Repeated Stepper + +Use this to create steppers that perform substepping. To do this instantiate those with a subset of the desired `dt`. For example, + +```python +substepped_stepper = exponax.stepper.Burgers(1, 1.0, 64, 0.1/5) +stepper = exponax.stepper.RepeatedStepper(substepped_stepper, 5) +``` + +This will create a stepper that performs 5 substeps of 0.1/5=0.02 each time it is called. + +::: exponax.RepeatedStepper + options: + members: + - __init__ + - __call__ \ No newline at end of file diff --git a/docs/api/utilities/rollout_and_repeat.md b/docs/api/utilities/rollout_and_repeat.md new file mode 100644 index 0000000..94c33ad --- /dev/null +++ b/docs/api/utilities/rollout_and_repeat.md @@ -0,0 +1,13 @@ +# Temporal Evolution + +Utilities to autoregressively evaluate steppers. + +::: exponax.repeat + +--- + +::: exponax.rollout + +--- + +::: exponax.stack_sub_trajectories \ No newline at end of file diff --git a/docs/api/utilities/visualization/animate_spatio_temporal.md b/docs/api/utilities/visualization/animate_spatio_temporal.md new file mode 100644 index 0000000..e503032 --- /dev/null +++ b/docs/api/utilities/visualization/animate_spatio_temporal.md @@ -0,0 +1,7 @@ +# Animate Spatio-Temporal + +::: exponax.viz.animate_spatio_temporal + +--- + +::: exponax.viz.animate_spatio_temporal_2d \ No newline at end of file diff --git a/docs/api/utilities/visualization/animate_spatio_temporal_facet.md b/docs/api/utilities/visualization/animate_spatio_temporal_facet.md new file mode 100644 index 0000000..0e910aa --- /dev/null +++ b/docs/api/utilities/visualization/animate_spatio_temporal_facet.md @@ -0,0 +1,7 @@ +# Animate Spatio-Temporal Facet + +::: exponax.viz.animate_spatio_temporal_facet + +--- + +::: exponax.viz.animate_spatio_temporal_2d_facet \ No newline at end of file diff --git a/docs/api/utilities/visualization/animate_states.md b/docs/api/utilities/visualization/animate_states.md new file mode 100644 index 0000000..660120b --- /dev/null +++ b/docs/api/utilities/visualization/animate_states.md @@ -0,0 +1,13 @@ +# Animate States + +Visualizes trajectories of states in 1d, 2d, or 3d via an animation of their respective [plot_states]() + +::: exponax.viz.animate_state_1d + +--- + +::: exponax.viz.animate_state_2d + +--- + +::: exponax.viz.animate_state_3d \ No newline at end of file diff --git a/docs/api/utilities/visualization/animate_states_facet.md b/docs/api/utilities/visualization/animate_states_facet.md new file mode 100644 index 0000000..5fdcdc3 --- /dev/null +++ b/docs/api/utilities/visualization/animate_states_facet.md @@ -0,0 +1,11 @@ +# Animate facet of states + +::: exponax.viz.animate_state_1d_facet + +--- + +::: exponax.viz.animate_state_2d_facet + +--- + +::: exponax.viz.animate_state_3d_facet \ No newline at end of file diff --git a/docs/api/utilities/visualization/plot_spatio_temporal.md b/docs/api/utilities/visualization/plot_spatio_temporal.md new file mode 100644 index 0000000..c3b9295 --- /dev/null +++ b/docs/api/utilities/visualization/plot_spatio_temporal.md @@ -0,0 +1,9 @@ +# Spatio-Temporal Visualization + +Uses an imshow to visualize trajectories of 1d states and a volume render to visualize 2d trajectories; cannot display 3d trajectories. + +::: exponax.viz.plot_spatio_temporal + +--- + +::: exponax.viz.plot_spatio_temporal_2d \ No newline at end of file diff --git a/docs/api/utilities/visualization/plot_spatio_temporal_facet.md b/docs/api/utilities/visualization/plot_spatio_temporal_facet.md new file mode 100644 index 0000000..a11f060 --- /dev/null +++ b/docs/api/utilities/visualization/plot_spatio_temporal_facet.md @@ -0,0 +1,7 @@ +# Spatio-Temporal Plots in Facet Grid + +::: exponax.viz.plot_spatio_temporal_facet + +--- + +::: exponax.viz.plot_spatio_temporal_2d_facet \ No newline at end of file diff --git a/docs/api/utilities/visualization/plot_states.md b/docs/api/utilities/visualization/plot_states.md new file mode 100644 index 0000000..53eb4eb --- /dev/null +++ b/docs/api/utilities/visualization/plot_states.md @@ -0,0 +1,13 @@ +# Plot States + +Requires arrays of the shape `(num_channels, *num_points)` with either one, two, or three last spatial axes. + +::: exponax.viz.plot_state_1d + +--- + +::: exponax.viz.plot_state_2d + +--- + +::: exponax.viz.plot_state_3d \ No newline at end of file diff --git a/docs/api/utilities/visualization/plot_states_facet.md b/docs/api/utilities/visualization/plot_states_facet.md new file mode 100644 index 0000000..d7eb7b1 --- /dev/null +++ b/docs/api/utilities/visualization/plot_states_facet.md @@ -0,0 +1,13 @@ +# Plot states in facet grid + +Allows displaying multiple states at the same time. + +::: exponax.viz.plot_state_1d_facet + +--- + +::: exponax.viz.plot_state_2d_facet + +--- + +::: exponax.viz.plot_state_3d_facet \ No newline at end of file diff --git a/docs/background/design_decisions.md b/docs/background/design_decisions.md new file mode 100644 index 0000000..8df454e --- /dev/null +++ b/docs/background/design_decisions.md @@ -0,0 +1,106 @@ +# Design Decisions + +The `Exponax` package targets the fixed time step simulation of semi-linear +partial differential equations. Those are PDEs of the form + +$$ +\partial_t u = \mathcal{L} u + \mathcal{N}(u) +$$ + +where $\mathcal{L}$ is a linear differential operator and $\mathcal{N}$ is a +non-linear differential operator. The equations are first-order in time. +Semi-linear means that the order of derivative in the linear operator +$\mathcal{L}$ is higher than the order of the non-linear operator $\mathcal{N}$. +Or in other terms, the difficulty in (numerically) solving this PDE mainly stems from +the linear part. + +The package incurs the following design decisions. Reasons can be (M)athematical +or (C)onvenience. + +### Periodic Boundary Conditions (M, C) + +* Allows for usage of Fourier (pseudo-)spectral methods. +* The linear operator fully diagonalizes in Fourier space. +* FFTs are highly efficient (on the GPU). + +### The domain is always a (scaled) hypercube (C) + +The domain is always limited to $\Omega = (0, L)^D$ where $D$ is the dimension, +i.e., the extent is the same in all directions. In other words, the package +cannot simulate phenomena with an aspect ratio different from 1. + +### The domain is discretized with a uniform Cartesian grid with same number of degrees of freedom in each direction (C, M) + +### Only real-valued PDEs (C) + +Both the linear and the non-linear operator are real-valued. + +* We can use the `rfftn` by default (saves about half the computation) +* Avoids ambiguities with spectral derivatives at the Nyquist mode +* The evolved trajectory in state space is always real which more closely + matches what deep learning typically expects. + +### No channel mixing in the linear operator (M, C) + +* breaks down the diagonalization in Fourier space + +### No inhomogeneous coefficients in front of the linear operator (M) + +* also breaks down the diagonalization in Fourier space +* implement a custom nonlinear operator if you need inhomogeneous coefficients + +### Fixed time step (C) + +... + +### Only smooth problems (M) + +* The package does not support problems with discontinuities or shocks. + +### Most pre-defined steppers have isotropic linear operators (C) + +* Eases the interface +* One can implement its own custom time stepper. `Exponax` supports anistropy + (=spatial mixing) but does **not** support channel mixing in the linear + operator. However, channel mixing in the non-linear operator is fine! + +### The default order of ETDRK method is 2 (C, M) + +* I observed the best numerical stability in the coefficient computation. + Higher-order methods have more sensible coefficient computation relying more + greatly on the complex contour integral method. + +### Works only with problems for which the difficulty stems from the linear part (M) + +* This is noticeable that the benefit for example for Navier-Stokes at higher + Reynolds numbers becomes less and less. + +### All time-steppers are by default single-batch (C) + +In contrast to other deep learning frameworks (like PyTorch, TensorFlow, or +Flax), `Exponax` time steppers by default operate of tensors of the shape `(C, +*N)` with an arbitrary number of spatial dimensions `*N` and one leading channel +dimension. Each timestepper also enforces the input to be of that shape. If you +want to operate on multiple states in batch use `jax.vmap` on them. This follows +the [Equinox](https://github.com/patrick-kidger/equinox) philosophy. + +* Allows for tighter composition with other function transformations. For + example, when doing a temporal rollout one can either do + `rollout(jax.vmap(stepper), T)(u_0)` or `jax.vmap(rollout(stepper, T))(u_0)`. + The former produces a trajectory of shape `(T, B, C, *N)` and the latter + produces a trajectory of shape `(B, T, C, *N)` (i.e., the batch `B` and time + `T` axes are swapped). + +### There are no custom grid or state classes (C) + +* Lean design that only focuses on JAX Arrays and PyTrees allows for tigher + integration with other libraries in the JAX ecosystem. + +### There is no `jax.jit` being used in the package (C) + +* `jit` is supposed to be user-facing functionality + +### There are only limited shipped visualization routines (C) + +* Keeps the package lean and focused on the core functionality. +* Visualization is very personal and problem-specific. diff --git a/examples/additional_features.ipynb b/docs/examples/additional_features.ipynb similarity index 100% rename from examples/additional_features.ipynb rename to docs/examples/additional_features.ipynb diff --git a/examples/creating_your_own_solvers_1d.ipynb b/docs/examples/creating_your_own_solvers_1d.ipynb similarity index 100% rename from examples/creating_your_own_solvers_1d.ipynb rename to docs/examples/creating_your_own_solvers_1d.ipynb diff --git a/examples/edtrk_from_the_ground_up.ipynb b/docs/examples/edtrk_from_the_ground_up.ipynb similarity index 100% rename from examples/edtrk_from_the_ground_up.ipynb rename to docs/examples/edtrk_from_the_ground_up.ipynb diff --git a/examples/initial_condition_showcase_1d.ipynb b/docs/examples/initial_condition_showcase_1d.ipynb similarity index 100% rename from examples/initial_condition_showcase_1d.ipynb rename to docs/examples/initial_condition_showcase_1d.ipynb diff --git a/examples/learning_burgers_autoregressive_neural_operator.ipynb b/docs/examples/learning_burgers_autoregressive_neural_operator.ipynb similarity index 100% rename from examples/learning_burgers_autoregressive_neural_operator.ipynb rename to docs/examples/learning_burgers_autoregressive_neural_operator.ipynb diff --git a/examples/performance_hints.ipynb b/docs/examples/performance_hints.ipynb similarity index 100% rename from examples/performance_hints.ipynb rename to docs/examples/performance_hints.ipynb diff --git a/examples/simple_advection_example_2d.ipynb b/docs/examples/simple_advection_example_2d.ipynb similarity index 100% rename from examples/simple_advection_example_2d.ipynb rename to docs/examples/simple_advection_example_2d.ipynb diff --git a/examples/solver_showcase_1d.ipynb b/docs/examples/solver_showcase_1d.ipynb similarity index 100% rename from examples/solver_showcase_1d.ipynb rename to docs/examples/solver_showcase_1d.ipynb diff --git a/examples/solver_showcase_2d.ipynb b/docs/examples/solver_showcase_2d.ipynb similarity index 100% rename from examples/solver_showcase_2d.ipynb rename to docs/examples/solver_showcase_2d.ipynb diff --git a/examples/understanding_general_and_normalized_stepper.ipynb b/docs/examples/understanding_general_and_normalized_stepper.ipynb similarity index 100% rename from examples/understanding_general_and_normalized_stepper.ipynb rename to docs/examples/understanding_general_and_normalized_stepper.ipynb diff --git a/examples/understanding_normalized_and_difficulty.py b/docs/examples/understanding_normalized_and_difficulty.py similarity index 98% rename from examples/understanding_normalized_and_difficulty.py rename to docs/examples/understanding_normalized_and_difficulty.py index 9a07415..b47ee42 100644 --- a/examples/understanding_normalized_and_difficulty.py +++ b/docs/examples/understanding_normalized_and_difficulty.py @@ -118,7 +118,7 @@ ) else: stepper = ex.RepeatedStepper( - ex.normalized.NormlizedGeneralNonlinearStepper( + ex.normalized.NormalizedGeneralNonlinearStepper( 1, num_points, normalized_coefficients_linear=tuple( diff --git a/img/exponax_logo.png b/docs/imgs/exponax_logo.png similarity index 100% rename from img/exponax_logo.png rename to docs/imgs/exponax_logo.png diff --git a/img/ks_rollout.png b/docs/imgs/ks_rollout.png similarity index 100% rename from img/ks_rollout.png rename to docs/imgs/ks_rollout.png diff --git a/img/teaser_demo.gif b/docs/imgs/teaser_demo.gif similarity index 100% rename from img/teaser_demo.gif rename to docs/imgs/teaser_demo.gif diff --git a/docs/index.md b/docs/index.md index 6c2bc66..9d247fd 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,10 +1,76 @@ -# Exponax +# Getting Started -A fast and differentiable PDE solver framework in JAX. +## Installation -Hello World +```bash +pip install git+ssh://git@github.com/Ceyron/exponax@main +``` -Below is some math +## Quickstart -$$ x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a} $$ +1d Kuramoto-Sivashinsky Equation. +```python +import jax +import exponax as ex +import matplotlib.pyplot as plt + +ks_stepper = ex.stepper.KuramotoSivashinskyConservative( + num_spatial_dims=1, domain_extent=100.0, + num_points=200, dt=0.1, +) + +u_0 = ex.ic.RandomTruncatedFourierSeries( + num_spatial_dims=1, cutoff=5 +)(num_points=200, key=jax.random.PRNGKey(0)) + +trajectory = ex.rollout(ks_stepper, 500, include_init=True)(u_0) + +plt.imshow(trajectory[:, 0, :].T, aspect='auto', cmap='RdBu', vmin=-2, vmax=2, origin="lower") +plt.xlabel("Time"); plt.ylabel("Space"); plt.show() +``` + +![](imgs/ks_rollout.png) + +For a next step, check out the [simple_advection_example_1d.ipynb](examples/simple_advection_example_1d.ipynb) notebook in the `examples` folder, and check out the Documentation. + +## Features + + +1. **JAX** as the computational backend: + 1. **Backend agnotistic code** - run on CPU, GPU, or TPU, in both single and + double precision. + 2. **Automatic differentiation** over the timesteppers - compute gradients + of solutions with respect to initial conditions, parameters, etc. + 3. Also helpful for **tight integration with Deep Learning** since each + timestepper is just an + [Equinox](https://github.com/patrick-kidger/equinox) Module. + 4. **Automatic Vectorization** using `jax.vmap` (or `equinox.filter_vmap`) + allowing to advance multiple states in time or instantiate multiple + solvers at a time that operate efficiently in batch. +2. **Lightweight Design** without custom types. There is no `grid` or `state` + object. Everything is based on `jax.numpy` arrays. Timesteppers are callable + PyTrees. +3. More than 35 pre-built dynamics: + 1. Linear PDEs in 1d, 2d, and 3d (advection, diffusion, dispersion, etc.) + 2. Nonlinear PDEs in 1d, 2d, and 3d (Burgers, Kuramoto-Sivashinsky, + Korteweg-de Vries, Navier-Stokes, etc.) + 3. Reaction-Diffusion (Gray-Scott, Swift-Hohenberg, etc.) +4. Collection of initial condition distributions (truncated Fourier series, + Gaussian Random Fields, etc.) +5. **Utilities** for spectral derivatives, grid creation, autogressive rollout, + etc. +6. Easily extendable to new PDEs by subclassing from the `BaseStepper` module. +7. Normalized interface for reduced number of parameters to uniquely define any + dynamics. + + +## License + +MIT, see [here](https://github.com/Ceyron/apebench/blob/main/LICENSE.txt) + +--- + +> [fkoehler.site](https://fkoehler.site/)  ·  +> GitHub [@ceyron](https://github.com/ceyron)  ·  +> X [@felix_m_koehler](https://twitter.com/felix_m_koehler) diff --git a/examples/simple_advection_example_1d.ipynb b/examples/simple_advection_example_1d.ipynb deleted file mode 100644 index 6527532..0000000 --- a/examples/simple_advection_example_1d.ipynb +++ /dev/null @@ -1,673 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Simple Advection example\n", - "\n", - "The advection equation\n", - "\n", - "$$ \\frac{\\partial u}{\\partial t} + c \\frac{\\partial u}{\\partial x} = 0 $$\n", - "\n", - "is one of the simplest partial differential equation. It describes a hyperbolic\n", - "transport process. Under periodic boundary conditions, the solution at a point\n", - "later in time is given by the moved initial condition\n", - "\n", - "$$ u(x, t) = u_0((x - c t) \\mod L) $$\n", - "\n", - "using some loose notation of the modulo operator to enfore periodicity." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import jax\n", - "import jax.numpy as jnp\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import exponax as ex" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's first create a grid that discretizes the domain $[0, L]$ into $N$ degrees\n", - "of freedom. Since we work with **periodic domains**, one of the boundary points,\n", - "either $x=0$ or $x=L$, is redundant. Hence, we will linearly space $N+1$ points\n", - "over the domain and discard the last one. (Actually, discarding one boundary\n", - "point is a prerequisite for using the FFT algorithm that is baked in all the\n", - "solvers that are part of `Exponax`.)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-03-01 14:57:24.421211: W external/xla/xla/service/gpu/nvptx_compiler.cc:679] The NVIDIA driver's CUDA version is 12.2 which is older than the ptxas CUDA version (12.3.52). Because the driver is older than the ptxas version, XLA is disabling parallel compilation, which may slow down compilation. You should update your NVIDIA driver or use the NVIDIA-provided CUDA forward compatibility packages.\n" - ] - }, - { - "data": { - "image/png": "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UadOnUJjGRkZ8vv9OnTokOLi4hytOVq1p5f33HOPxo4dq9/+9reSpL59++q7777TpEmTNHXqVMXG8v/0rdHSe05iYmLUX7WRuHITEXFxccrMzFRpaWlorKGhQaWlpcrOzg67Jjs7u8l8SSopKWlx/rGiPb2UpNmzZ2vmzJlas2aNBgwY0BGlRr229rJPnz765JNPtGXLltCfK6+8Updeeqm2bNmi9PT0jiw/arTnnLzgggv02WefhcKhJP3jH/9Qjx49jtlgI7Wvl7W1tc0CTGNotPhViq3m+vecSN/RfKxavny55fV6reeee87avn27NWnSJCs5Odny+/2WZVnW2LFjrbvuuis0/8MPP7Q6d+5sPfroo1ZlZaVVVFTEt4L/n7b28qGHHrLi4uKsl156yfr6669Dfw4cOBCpQ4gabe3lT/HdUj9oax93795tdenSxcrPz7d27Nhhvf7661b37t2t+++/P1KHEDXa2suioiKrS5cu1p///Gdr586d1tq1a63TTjvNGjVqVKQOISocOHDA2rx5s7V582ZLkjVnzhxr8+bN1hdffGFZlmXddddd1tixY0PzG78VfMqUKVZlZaVVXFzMt4KjdebPn2/17NnTiouLswYOHGht2LAh9NzFF19sjR8/vsn8v/zlL9YZZ5xhxcXFWWeffbb1xhtvdHDF0astvTz11FMtSc3+FBUVdXzhUait5+WPEW7+p619XL9+vZWVlWV5vV6rd+/e1gMPPGAdPny4g6uOTm3pZTAYtKZPn26ddtppVnx8vJWenm7dfPPN1n//+9+OLzyKvPPOO2H/u9fYu/Hjx1sXX3xxszX9+vWz4uLirN69e1vPPvtsh9fdXjGWxXU6AABgDu65AQAARiHcAAAAoxBuAACAUQg3AADAKIQbAABgFMINAAAwCuEGAAAYhXADAACMQrgBAABGIdwAAACjEG4AAIBRCDcAAMAo/x/R4SFRwxUajgAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "DOMAIN_EXTENT = 1.0\n", - "NUM_POINTS = 20\n", - "grid = jnp.linspace(0, DOMAIN_EXTENT, NUM_POINTS + 1)[:-1]\n", - "\n", - "plt.scatter(grid, jnp.zeros_like(grid))\n", - "plt.xlim(-0.1, 1.1)\n", - "plt.grid()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also print out the `jax.numpy` array containing the grid" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Array([0. , 0.05 , 0.1 , 0.15 , 0.2 ,\n", - " 0.25 , 0.3 , 0.35 , 0.4 , 0.45000002,\n", - " 0.5 , 0.55 , 0.6 , 0.65000004, 0.7 ,\n", - " 0.75 , 0.8 , 0.85 , 0.90000004, 0.95 ], dtype=float32)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "grid" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Handily, there is a function in `Exponax` that produces a grid" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Array([[0. , 0.05 , 0.1 , 0.15 , 0.2 ,\n", - " 0.25 , 0.3 , 0.35 , 0.4 , 0.45000002,\n", - " 0.5 , 0.55 , 0.6 , 0.65000004, 0.7 ,\n", - " 0.75 , 0.8 , 0.85 , 0.90000004, 0.95 ]], dtype=float32)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "grid_from_exponax = ex.make_grid(\n", - " 1,\n", - " DOMAIN_EXTENT,\n", - " NUM_POINTS,\n", - ")\n", - "grid_from_exponax" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This function takes three positional arguments:\n", - "\n", - "1. `num_spatial_dims` defining the dimensionality of the domain. For this\n", - " tutorial, we work in 1D, so we pass `1`.\n", - "2. `domain_extent`\n", - "3. `num_points`\n", - "\n", - "Note that the shape of the grid array is different from the shape we got from `jax.numpy.linspace`." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "((20,), (1, 20))" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "grid.shape, grid_from_exponax.shape" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "It has an additional *singleton dimension* in the beginning. This is to\n", - "represent the dimensionality of the grid. In 1D, the shape of the grid is `(1,\n", - "N)`. In 2D, it would be `(2, N, N)`, and so on.\n", - "\n", - "**Let's work with the `grid_from_eponax` from now on.**" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "grid = grid_from_exponax" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "On this domain, we can discretize a function. Let's, for instance, use the first\n", - "sine mode $u_0(x) = \\sin(2 \\pi x / L)$.\n", - "\n", - "Notice that we have to index both the grid array and the function array at `[0]`\n", - "to remove the singleton dimension, and get an array for plotting.\n", - "\n", - "Notice that we do not have a function value at $x=1$ since we discarded the\n", - "last mesh point." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "ic_fun = lambda x: jnp.sin(2 * jnp.pi * x / DOMAIN_EXTENT)\n", - "ic = ic_fun(grid)\n", - "\n", - "plt.plot(grid[0], ic[0])\n", - "plt.xlim(-0.1, 1.1)\n", - "plt.grid()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If we wanted to plot the function including its periodic extension, we had to\n", - "wrap around the domain. This can be done by the `wrap_bc` function. Note that in\n", - "order to then plot the function, we also need the \"full grid\" including the\n", - "redundant point.\n", - "\n", - "Notice again that we index at `[0]` to remove the singleton dimension." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "full_grid = ex.make_grid(1, DOMAIN_EXTENT, NUM_POINTS, full=True)\n", - "full_ic = ex.wrap_bc(ic)\n", - "plt.plot(full_grid[0], full_ic[0])\n", - "plt.xlim(-0.1, 1.1)\n", - "plt.grid()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next, let's instantiate the advection timestepper. We need to specify the\n", - "velocity $c$ and the timestep $\\Delta t$.\n", - "\n", - "Note that (almost) all timesteppers in *Exponax* take as first four positional arguments:\n", - "\n", - "1. The `num_spatial_dims` defining the dimensionality of the domain. For this\n", - " tutorial, we work in 1D, so we pass `1`.\n", - "1. The `domain_extent`\n", - "2. The `num_points` (Important: Exclude the redundant point!)\n", - "3. The timestep `dt`\n", - "\n", - "**in this order**.\n", - "\n", - "Other options, such as coefficients/constitutional parameters or numerical\n", - "parameters, are passed as keyword arguments.\n", - "\n", - "An advection problem is defined by its external velocity which we assume to be a constant $c=1.0$." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Advection(\n", - " num_spatial_dims=1,\n", - " domain_extent=1.0,\n", - " num_points=20,\n", - " num_channels=1,\n", - " dt=0.2,\n", - " dx=0.05,\n", - " _integrator=ETDRK0(dt=0.2, _exp_term=c64[1,11]),\n", - " velocity=f32[1]\n", - ")" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "VELOCITY = 1.0\n", - "DT = 0.2\n", - "\n", - "advection_stepper = ex.stepper.Advection(\n", - " 1,\n", - " DOMAIN_EXTENT,\n", - " NUM_POINTS,\n", - " DT,\n", - " velocity=VELOCITY,\n", - ")\n", - "\n", - "advection_stepper" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Once instantiated, the timesteppers behave like a Python callable, taking a\n", - "discretized function at time $t$ (now called a **state**) and returning the\n", - "discretized function at time $t + \\Delta t$ (i.e., the **next state**)." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "u_1 = advection_stepper(ic)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's plot the solution at $t=0$ and $t=0.1$ next to each other.\n", - "\n", - "(Again, notice the indexing at `[0]` to remove the singleton dimension.)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(full_grid[0], ex.wrap_bc(ic)[0], label=\"ic\")\n", - "plt.plot(full_grid[0], ex.wrap_bc(u_1)[0], label=\"1 step\")\n", - "plt.xlim(-0.1, 1.1)\n", - "plt.grid()\n", - "plt.legend()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You notice that the initial condition moved by $0.2$ space units to the right.\n", - "Additionally, whatever left the domain at the right boundary re-entered at the\n", - "left boundary. The shape of the function is preserved!\n", - "\n", - "Moving by $0.2$ space units in $0.2$ time units corresponds to a velocity of $c\n", - "= 1$ which is exactly what we prescribed. Feel free to play around with the\n", - "velocity $c$, the timestep $\\Delta t$, and the domain size $L$ to see how the\n", - "solution changes. You will notice that ultimately only the value $\\frac{c \\Delta\n", - "t}{L}$ matters.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For any time-dependent phenomenon, we might be interested in not just computing\n", - "one timestep into the future, but many. This is an inherently sequential process\n", - "because we need the solution at time $t$ to compute the solution at time $t +\n", - "\\Delta t$. Let's compute the three following solutions." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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2S5FxhISEhISEhKujTSDIyEhISEhIeFySAmOhISEhISEhMshJTgSEhISEhISLoeU4EhISEhISEi4HFKCY0cWLVpETEwMbm5uDB48mKSkpOsev2rVKuLj43Fzc6Nnz55s3LjRRpE6Pq0Zy88++4wRI0bg7++Pv78/48aNu+HYtyda+740s2LFCmQyGTNmzLBugE5Ca8exvLycJ554gvDwcDQaDV27dpWu8QZaO5bvv/8+3bp1w93dnaioKP7whz9QV1dno2gdk127djFt2jQiIiKQyWT88MMPNzxn586d9OvXD41GQ+fOnVm8eLHV47QogoRdWLFihaBWq4Uvv/xSSE1NFR566CHBz89PKCgoaPb4PXv2CAqFQnjnnXeEkydPCi+99JKgUqmElJQUG0fueLR2LO+++25h0aJFwtGjR4W0tDThvvvuE3x9fYXs7GwbR+54tHYszZw/f16IjIwURowYIdx+++22CdaBae041tfXCwMGDBCmTJki7N69Wzh//rywc+dOITk52caROx6tHculS5cKGo1GWLp0qXD+/Hnhl19+EcLDw4U//OEPNo7csdi4caPwl7/8RVizZo0ACGvXrr3u8efOnRM8PDyEZ599Vjh58qTwwQcfCAqFQti0aZNtArYAUoJjJwYNGiQ88cQTjX8bjUYhIiJCeOutt5o9fu7cucLUqVObPDZ48GDhkUcesWqczkBrx/JKDAaD4O3tLSxZssRaIToNbRlLg8EgDB06VPj888+Fe++9V0pwhNaP48cffyzExsYKOp3OViE6Da0dyyeeeEIYM2ZMk8eeffZZYdiwYVaN05loSYLzxz/+UejevXuTx+68805h4sSJVozMskhLVHZAp9Nx+PBhxo0b1/iYXC5n3Lhx7Nu3r9lz9u3b1+R4gIkTJ17z+PZCW8bySmpqatDr9QQEBFgrTKegrWP5+uuvExISwgMPPGCLMB2etozjunXrGDJkCE888QShoaH06NGDN998E6PRaKuwHZK2jOXQoUM5fPhw4zLWuXPn2LhxI1OmTLFJzK6CK3zntMvNNu1NcXExRqOR0NDQJo+HhoaSnp7e7Dn5+fnNHp+fn2+1OJ2BtozllfzpT38iIiLiqou5vdGWsdy9ezdffPEFycnJNojQOWjLOJ47d47t27czf/58Nm7cyNmzZ3n88cfR6/W88sortgjbIWnLWN59990UFxczfPhwBEHAYDDw6KOP8uc//9kWIbsM1/rO0Wq11NbW4u7ubqfIWo40gyPRrvnHP/7BihUrWLt2LW5ubvYOx6morKzknnvu4bPPPiMoKMje4Tg1JpOJkJAQPv30U/r378+dd97JX/7yF/73v//ZOzSnY+fOnbz55pt89NFHHDlyhDVr1vDTTz/xxhtv2Ds0CRsjzeDYgaCgIBQKBQUFBU0eLygoICwsrNlzwsLCWnV8e6EtY2nm3Xff5R//+Adbt26lV69e1gzTKWjtWGZkZHDhwgWmTZvW+JjJZAJAqVRy6tQp4uLirBu0A9KW92R4eDgqlQqFQtH4WEJCAvn5+eh0OtRqtVVjdlTaMpYvv/wy99xzDw8++CAAPXv2pLq6mocffpi//OUvyOXSfX1LuNZ3jo+Pj1PM3oA0g2MX1Go1/fv3Z9u2bY2PmUwmtm3bxpAhQ5o9Z8iQIU2OB9iyZcs1j28vtGUsAd555x3eeOMNNm3axIABA2wRqsPT2rGMj48nJSWF5OTkxp/p06dz6623kpycTFRUlC3Ddxja8p4cNmwYZ8+ebUwQAU6fPk14eHi7TW6gbWNZU1NzVRJjThwFaevFFuMS3zn2Vjm3V1asWCFoNBph8eLFwsmTJ4WHH35Y8PPzE/Lz8wVBEIR77rlHeOGFFxqP37Nnj6BUKoV3331XSEtLE1555RWpTLyB1o7lP/7xD0GtVgurV68W8vLyGn8qKyvt9RIchtaO5ZVIVVQirR3HzMxMwdvbW3jyySeFU6dOCRs2bBBCQkKEv/3tb/Z6CQ5Da8fylVdeEby9vYXly5cL586dEzZv3izExcUJc+fOtddLcAgqKyuFo0ePCkePHhUA4V//+pdw9OhR4eLFi4IgCMILL7wg3HPPPY3Hm8vE/+///k9IS0sTFi1aJJWJS7ScDz74QIiOjhbUarUwaNAgYf/+/Y3PjRo1Srj33nubHL9y5Uqha9euglqtFrp37y789NNPNo7YcWnNWHbs2FEArvp55ZVXbB+4A9La9+XlSAnOJVo7jnv37hUGDx4saDQaITY2Vvj73/8uGAwGG0ftmLRmLPV6vfDqq68KcXFxgpubmxAVFSU8/vjjQllZme0DdyB27NjR7OeeeezuvfdeYdSoUVed06dPH0GtVguxsbHCV199ZfO4bwaZIEhzdhISEhISEhKuhaTBkZCQkJCQkHA5pARHQkJCQkJCwuWQEhwJCQkJCQkJl0NKcCQkJCQkJCRcDinBkZCQkJCQkHA5pARHQkJCQkJCwuWQEhwJCQkJCQkJl0NKcCQkJCQkJCRcDinBkZCQkJCQkHA5pARHQkJCQkJCwuWQEhwJCQkJCQkJl0NKcCQkJCQkJCRcjv8HVMMh+aLwEJIAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "u_2 = advection_stepper(u_1)\n", - "u_3 = advection_stepper(u_2)\n", - "u_4 = advection_stepper(u_3)\n", - "\n", - "plt.plot(full_grid[0], ex.wrap_bc(ic)[0], label=\"ic\")\n", - "plt.plot(full_grid[0], ex.wrap_bc(u_1)[0], label=\"1 step\")\n", - "plt.plot(full_grid[0], ex.wrap_bc(u_2)[0], label=\"2 steps\")\n", - "plt.plot(full_grid[0], ex.wrap_bc(u_3)[0], label=\"3 steps\")\n", - "plt.plot(full_grid[0], ex.wrap_bc(u_4)[0], label=\"4 steps\")\n", - "plt.xlim(-0.1, 1.1)\n", - "plt.grid()\n", - "plt.legend()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If we had performed another timestep, we would have returned to the initial\n", - "condition because doing $5$ steps with a $c \\cdot \\Delta t = 0.2$ velocity\n", - "corresponds to moving by $1$ space unit. This is exactly the length of the\n", - "domain $L$!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now, we are interested in **stacking the time steps into a trajectory**.\n", - "Manually, we could do this the following way." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(5, 1, 20)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "short_trajectory = jnp.stack(\n", - " [\n", - " ic,\n", - " u_1,\n", - " u_2,\n", - " u_3,\n", - " u_4,\n", - " ]\n", - ")\n", - "short_trajectory.shape" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "There is also a handy function within `Exponax` that does exactly this. In the\n", - "spirit of `JAX` it is a function transformation. So far the `advection_stepper`\n", - "is a mapping of $\\R^{1 \\times N} \\mapsto \\R^{1 \\times N}$. This function\n", - "transformation turns it into a mapping of $\\R^{1 \\times N} \\mapsto \\R^{T \\times\n", - "1 \\times N}$ where $T$ is the number of time steps we want to perform into the\n", - "future. It has the additional keyword flag to include the initial condition in\n", - "the trajectory. Then, we mapping is $\\R^{N+1} \\mapsto \\R^{(T+1) \\times 1 \\times N}$." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Array(True, dtype=bool)" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "short_rollout_advection_stepper = ex.rollout(advection_stepper, 4, include_init=True)\n", - "jnp.allclose(short_trajectory, short_rollout_advection_stepper(ic))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's instantiate another advection timestepper with a smaller timestep and roll it out for $200$ steps\n", - "Let's use the `rollout` transformation for a longer trajectory, say $200$ steps." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "SMALLER_DT = 0.01\n", - "slower_advection_stepper = ex.stepper.Advection(\n", - " 1, DOMAIN_EXTENT, NUM_POINTS, SMALLER_DT, velocity=VELOCITY\n", - ")\n", - "longer_rollout_advection_stepper = ex.rollout(\n", - " slower_advection_stepper, 200, include_init=True\n", - ")\n", - "longer_trajectory = longer_rollout_advection_stepper(ic)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Then we can `jax.vmap` the `wrap_bc` function over the trajectory." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "longer_trajectory_wrapped = jax.vmap(ex.wrap_bc)(longer_trajectory)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Then, we can visualize the trajectory as a spatio-temporal plot.\n", - "\n", - "The indexing `[:, 0, :]` takes all temporal shapshots, removes the singleton\n", - "domension, and takes all spatial points. We use a transposition `.T` to have the\n", - "time dimension on the horizontal axis." - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5, 1.0, 'advection')" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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pfCKV7xi5OsXRYG7774bAPCoRz0Kp512Gvbs2TMisPzXzc/PA8DIc5p+3ic/+cn4y7/8y4r9fP/+/Xj/+9+Pxz3ucVhaWhr7OUKE2CqhpNjwsVUjZGZChDiC8YxnPAPvec97sG3bNjz0oQ/FzTffjE984hO4973vXXne5Zdfjve85z14ylOeghe96EXOmn2/+90PX/rSl0Y+79Oe9jQsLi7it3/7t6GUws/8zM9UPv7ABz4Qr371q3HFFVfgW9/6Fs4//3wsLi7im9/8Jv7iL/4Cz3ve8/Dbv/3bkFLirW99K575zGfizDPPxCWXXIKTTjoJt956K7785S/j4x//OADgrLPOAgD8xm/8Bnbt2gWlFC688MLGn/nVr341brzxRjzucY/Dr/3aryGKIvzxH/8xhsMhXve6123G2xoixA9FyA0KEhPETIgQIY5E/MEf/AGUUnjf+96HwWCAxz72sfjEJz6BXbt2VZ530kkn4ZOf/CRe+MIX4vd///dx73vfG89//vNx8skn41d+5VdGPm+328VP/uRP4n3vex/OO+88nHjiiSPPefGLX4wf/dEfxZve9Ca84hWvAACceuqpePKTn4yf/MmfdM/btWsXPvnJT+IVr3gF3vjGN8IYgwc+8IF47nOf657z0z/903jhC1+ID3zgA3jve9+Loihaxcx//a//Ff/wD/+AK664AldffTWMMdi5cyfe+973jjBmQoQIEWKWEEWoqgsRIkSIECHusVheXsa2bduwa8+NiHvzM3+erL+Kj1/2Ezh48OCW274NmZkQIUKECBHiKIiN1r1s5W2mUAAcIkSIECFChDimI2RmQoQIESJEiKMgQmZm9rhHMzN///d/j2c+85k4+eSTIYTARz7ykYmvuemmm/CoRz0KnU4HD3rQg/DOd77zsH+fIUKECBEixOGOSAKRFBs47umf4J6Le/RHX11dxRlnnIFrr712qud/85vfxNOf/nQ88YlPxC233ILLLrsMz3nOc5xdNESIECFChAix9eIe3WZ66lOfiqc+9alTP/+6667Daaed5uipD3nIQ/CpT30Kb3rTm0asrRzD4RDD4dCdG2Pwn//5n7j3ve+9pWmJIUKECBFichRFgUOHDuHkk0+GlIf3/j9sM80ex1TNzM033zyCWN+1axcuu+yy1tdcffXVjqkRIkSIECFCzBJ33HEH7nvf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O9/5Tuy///5OMJ166qn4xCc+gXvuuQfXXHMNvva1r+HVr341+CKGmPXTOO/jBS94AW666Sb80z/9Ez75yU9CCIETTjgBP/nJTwAs/2cBLP7z+OY3v4lvf/vb+N3f/V3n/HJ/HqOqKS5mZmbQ6XSW5O90uXXttddibm4Ob3zjG8259evX45ZbbsGdd96Jj370o3j00Ufx8pe/HLOzszvxlbrab7/9cOONN+If//Ef8Y//+I844IADcOKJJ+L+++8HsDRrxnLrpz/9Kf7P//k/lbjYmZ+HEALveMc78Ou//ut9CfLL+X+GFHLRt5Uq72bazfWBD3wAt99+OzZt2uQ0z5599tnm/otf/GIcccQROOSQQ7Bp0yacdNJJO+OlVnT88cc7A0JPOOEEHHbYYfhf/+t/4aqrrtqJr2x8fexjH8OLX/xiHHfccc753eHzeDbptttuw5VXXol/+qd/cnpNXv3qV5v7RxxxBNavX48DDzwQf//3f48LLrhgZ7zUil7wghfgBS94gXl8wgkn4Ic//CH+6q/+Cn/3d3+3E1/Z+Pr4xz+OtWvX4owzznDO78zP4+1vfzu+/e1v7/CeqVEkOCDY+AmJ2DWujXaKduvKzF577YUwDPHUU08555966imsW7eu9nvWrVvX9/l0HOVnLkbjvAfStddeiw984AO46667cMQRR/R97sEHH4y99toLP/jBDxb9muu0mPdBiuMYRx99tHmNy/1ZAIt7H/Pz87j99tuHWoR39OcxqpriYvXq1ZiYmFiSz3e5dPvtt+N3f/d38fd///eV7YGy1q5di+c///m7zOfQpOOOO868xt3pswCU0+emm27CW97yFiRJ0ve5y/V5XHzxxfjiF7+Ie++9F7/yK7/S97m72v8ZXvXarZOZJElwzDHH4J577jHnhBC45557nCt+W8cff7zzfAC4++67zfOf+9znYt26dc5zZmZmcN999zX+zOV+D4Dqnr/qqqtw55134thjjx347/zkJz/BL37xC+y3335L8rrLGvd92OKc46GHHjKvcbk/C2Bx7+Mzn/kMer0e3vzmNw/8d3b05zGqBsXFUny+y6FPfepTOP/88/GpT33KscY3aW5uDj/84Q93mc+hSQ8++KB5jbvLZ0H62te+hh/84AdDJfk7+vOQUuLiiy/GHXfcga9+9at47nOfO/B7lvP/DOLMLOa2YrWzO5AXq9tvv122Wi15yy23yO9+97vyoosukmvXrpVbt26VUkr5lre8Rb7rXe8yz//GN74hoyiS1157rXz44Yflxo0bZRzH8qGHHjLP+cAHPiDXrl0r/+mf/kn+x3/8h3zta18rn/vc58pOp7NLvIcPfOADMkkS+Q//8A/yySefNLfZ2VkppZSzs7Pysssuk5s3b5aPPvqo/MpXviJf8pKXyF/7tV+T3W53h7yHcd7HlVdeKb/85S/LH/7wh3LLli3y7LPPlu12W37nO99x3utyfhbjvA/Sy172MnnWWWdVzu+Mz2N2dlY+8MAD8oEHHpAA5Ic//GH5wAMPyB/96EdSSinf9a53ybe85S3m+f/5n/8pJycn5Z/+6Z/Khx9+WN5www0yDEN55513mucM+r3s7Pdw6623yiiK5A033ODExbZt28xzLr30Urlp0yb56KOPym984xtyw4YNcq+99pJPP/30DnkP47yPv/qrv5Kf+9zn5Pe//3350EMPyT/+4z+WjDH5la98xTxnuT+Lcd4H6c1vfrNcv3597c9c7s/jbW97m1yzZo3ctGmT8zeysLBgnrMz/s8gN9PXT3ulvP+1rxr79vXTXrli3Uy7fTIjpZQf+chH5K/+6q/KJEnkcccdJ//t3/7NfO0Vr3iFPO+885zn//3f/718/vOfL5MkkS984QvlP//zPztfF0LI9773vXLfffeVrVZLnnTSSfKRRx7ZZd7DgQceKAFUbhs3bpRSSrmwsCBPPvlkuffee8s4juWBBx4oL7zwwh260I3zPt7xjneY5+67777ytNNOk/fff7/z83bGZzHq+5BSyu9973sSgLzrrrsqP2tnfB5k7y3f6HWfd9558hWveEXle4466iiZJIk8+OCD5c0331z5uf1+Lzv7PbziFa/o+3wpld18v/32k0mSyOc85znyrLPOkj/4wQ922HsY531cc8018pBDDpHtdlvuueee8sQTT5Rf/epXKz93OT+Lcd6HlMqiPDExIf/mb/6m9mcu9+dR9/oBOH/rO+P/DJ/MLF6BlHLltj97eXl5eXntZM3MzGDNmjXYdMqJmI7H9+XMZTlO/PImbN++HatXr17CV7jry7uZvLy8vLy8dgFJLiCZn800jnwy4+Xl5eXltQtISAmxCFaMWMEbLbu1m8nLy8vLy8vLy1dmvLy8vLy8dgVxCRks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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.imshow(\n", - " longer_trajectory_wrapped[:, 0, :].T,\n", - " origin=\"lower\",\n", - " cmap=\"RdBu\",\n", - " vmin=-1,\n", - " vmax=1,\n", - " extent=[0, 200 * SMALLER_DT, 0, DOMAIN_EXTENT],\n", - ")\n", - "plt.colorbar()\n", - "plt.xlabel(\"time\")\n", - "plt.ylabel(\"space\")\n", - "plt.title(\"advection\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "jax_fresh", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.13" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/exponax/_metrics.py b/exponax/_metrics.py index 9b896f7..0b709eb 100644 --- a/exponax/_metrics.py +++ b/exponax/_metrics.py @@ -73,7 +73,7 @@ def MSE( This function assumes that the arrays have one leading channel axis and an arbitrary number of following spatial dimensions! For batched operation use - `jax.vmap` on this function or use the [`mean_MSE`](#mean_MSE) function. + `jax.vmap` on this function or use the [`exponax.metrics.mean_MSE`][] function. **Arguments**: - `u_pred` (array): The first field to be used in the error computation. @@ -103,7 +103,7 @@ def nMSE( """ Compute the normalized mean squared error (nMSE) between two fields. - In contrast to [`MSE`](#MSE), no `domain_extent` is required, because of the + In contrast to [`exponax.metrics.MSE`][], no `domain_extent` is required, because of the normalization. **Arguments**: @@ -237,7 +237,7 @@ def RMSE( This function assumes that the arrays have one leading channel axis and an arbitrary number of following spatial dimensions! For batched operation use - `jax.vmap` on this function or use the [`mean_RMSE`](#mean_RMSE) function. + `jax.vmap` on this function or use the [`exponax.metrics.mean_RMSE`][] function. **Arguments**: - `u_pred` (array): The first field to be used in the error computation. @@ -267,7 +267,7 @@ def nRMSE( """ Compute the normalized root mean squared error (nRMSE) between two fields. - In contrast to [`RMSE`](#RMSE), no `domain_extent` is required, because of + In contrast to [`exponax.metrics.RMSE`][], no `domain_extent` is required, because of the normalization. **Arguments**: diff --git a/exponax/normalized/__init__.py b/exponax/normalized/__init__.py index 691df66..8d177c9 100644 --- a/exponax/normalized/__init__.py +++ b/exponax/normalized/__init__.py @@ -10,7 +10,7 @@ from ._convection import DifficultyConvectionStepper, NormalizedConvectionStepper from ._general_nonlinear import ( DifficultyGeneralNonlinearStepper, - NormlizedGeneralNonlinearStepper, + NormalizedGeneralNonlinearStepper, ) from ._gradient_norm import DifficultyGradientNormStepper, NormalizedGradientNormStepper from ._linear import ( @@ -45,7 +45,7 @@ "DifficultyPolynomialStepper", "DifficultyGeneralNonlinearStepper", "NormalizedConvectionStepper", - "NormlizedGeneralNonlinearStepper", + "NormalizedGeneralNonlinearStepper", "NormalizedGradientNormStepper", "NormalizedLinearStepper", "NormalizedPolynomialStepper", diff --git a/exponax/normalized/_general_nonlinear.py b/exponax/normalized/_general_nonlinear.py index 84f162d..202abac 100644 --- a/exponax/normalized/_general_nonlinear.py +++ b/exponax/normalized/_general_nonlinear.py @@ -9,7 +9,7 @@ ) -class NormlizedGeneralNonlinearStepper(BaseStepper): +class NormalizedGeneralNonlinearStepper(BaseStepper): normalized_coefficients_linear: tuple[float, ...] normalized_coefficients_nonlinear: tuple[float, ...] dealiasing_fraction: float @@ -74,7 +74,7 @@ def _build_nonlinear_fun( ) -class DifficultyGeneralNonlinearStepper(NormlizedGeneralNonlinearStepper): +class DifficultyGeneralNonlinearStepper(NormalizedGeneralNonlinearStepper): linear_difficulties: tuple[float, ...] nonlinear_difficulties: tuple[float, ...] diff --git a/exponax/reaction/_allen_cahn.py b/exponax/reaction/_allen_cahn.py index b6b85dd..27d4f29 100644 --- a/exponax/reaction/_allen_cahn.py +++ b/exponax/reaction/_allen_cahn.py @@ -57,40 +57,41 @@ def __init__( conditions, but here we use periodic boundary conditions. **Arguments:** - - `num_spatial_dims`: The number of spatial dimensions `d`. - - `domain_extent`: The size of the domain `L`; in higher dimensions - the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. - - `num_points`: The number of points `N` used to discretize the - domain. This **includes** the left boundary point and - **excludes** the right boundary point. In higher dimensions; the - number of points in each dimension is the same. Hence, the total - number of degrees of freedom is `Nᵈ`. - - `dt`: The timestep size `Δt` between two consecutive states. - - `diffusivity`: The diffusivity `ν`. The default value is `5e-3`. - - `first_order_coefficient`: The first order coefficient `c₁`. The - default value is `1.0`. - - `third_order_coefficient`: The third order coefficient `c₃`. The - default value is `-1.0`. - - `dealiasing_fraction`: The fraction of the highest wavenumbers to - dealias. Default is `1/2` because the default polynomial has a - highest degree of 3. - - `order`: The order of the Exponential Time Differencing Runge - Kutta method. Must be one of {0, 1, 2, 3, 4}. The option `0` - only solves the linear part of the equation. Use higher values - for higher accuracy and stability. The default choice of `2` is - a good compromise for single precision floats. - - `num_circle_points`: How many points to use in the complex contour - integral method to compute the coefficients of the exponential - time differencing Runge Kutta method. Default: 16. - - `circle_radius`: The radius of the contour used to compute the - coefficients of the exponential time differencing Runge Kutta - method. Default: 1.0. + + - `num_spatial_dims`: The number of spatial dimensions `d`. + - `domain_extent`: The size of the domain `L`; in higher dimensions + the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. + - `num_points`: The number of points `N` used to discretize the + domain. This **includes** the left boundary point and **excludes** + the right boundary point. In higher dimensions; the number of points + in each dimension is the same. Hence, the total number of degrees of + freedom is `Nᵈ`. + - `dt`: The timestep size `Δt` between two consecutive states. + - `diffusivity`: The diffusivity `ν`. The default value is `5e-3`. + - `first_order_coefficient`: The first order coefficient `c₁`. The + default value is `1.0`. + - `third_order_coefficient`: The third order coefficient `c₃`. The + default value is `-1.0`. + - `dealiasing_fraction`: The fraction of the highest wavenumbers to + dealias. Default is `1/2` because the default polynomial has a + highest degree of 3. + - `order`: The order of the Exponential Time Differencing Runge + Kutta method. Must be one of {0, 1, 2, 3, 4}. The option `0` only + solves the linear part of the equation. Use higher values for higher + accuracy and stability. The default choice of `2` is a good + compromise for single precision floats. + - `num_circle_points`: How many points to use in the complex contour + integral method to compute the coefficients of the exponential time + differencing Runge Kutta method. Default: 16. + - `circle_radius`: The radius of the contour used to compute the + coefficients of the exponential time differencing Runge Kutta + method. Default: 1.0. **Notes:** - - See - https://github.com/chebfun/chebfun/blob/db207bc9f48278ca4def15bf90591bfa44d0801d/spin.m#L48 - for an example IC of the Allen-Cahn in 1d. + - See + https://github.com/chebfun/chebfun/blob/db207bc9f48278ca4def15bf90591bfa44d0801d/spin.m#L48 + for an example IC of the Allen-Cahn in 1d. """ self.diffusivity = diffusivity self.first_order_coefficient = first_order_coefficient diff --git a/exponax/reaction/_cahn_hilliard.py b/exponax/reaction/_cahn_hilliard.py index 9b5384e..20580e8 100644 --- a/exponax/reaction/_cahn_hilliard.py +++ b/exponax/reaction/_cahn_hilliard.py @@ -82,38 +82,40 @@ def __init__( mixing. **Arguments:** - - `num_spatial_dims`: The number of spatial dimensions `d`. - - `domain_extent`: The size of the domain `L`; in higher dimensions - the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. - - `num_points`: The number of points `N` used to discretize the - domain. This **includes** the left boundary point and - **excludes** the right boundary point. In higher dimensions; the - number of points in each dimension is the same. Hence, the total - number of degrees of freedom is `Nᵈ`. - - `dt`: The timestep size `Δt` between two consecutive states. - - `diffusivity`: The diffusivity `ν`. - - `gamma`: The gamma parameter `γ`. - - `first_order_coefficient`: The first order coefficient `c₁`. - - `third_order_coefficient`: The third order coefficient `c₃`. - - `dealiasing_fraction`: The fraction of the highest wavenumbers to - dealias. Default is `1/2` because the default polynomial has a - highest degree of 3. - - `order`: The order of the Exponential Time Differencing Runge - Kutta method. Must be one of {0, 1, 2, 3, 4}. The option `0` - only solves the linear part of the equation. Use higher values - for higher accuracy and stability. The default choice of `2` is - a good compromise for single precision floats. - - `num_circle_points`: How many points to use in the complex contour - integral method to compute the coefficients of the exponential - time differencing Runge Kutta method. Default: 16. - - `circle_radius`: The radius of the contour used to compute the - coefficients of the exponential time differencing Runge Kutta - method. Default: 1.0. + + - `num_spatial_dims`: The number of spatial dimensions `d`. + - `domain_extent`: The size of the domain `L`; in higher dimensions + the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. + - `num_points`: The number of points `N` used to discretize the + domain. This **includes** the left boundary point and **excludes** + the right boundary point. In higher dimensions; the number of points + in each dimension is the same. Hence, the total number of degrees of + freedom is `Nᵈ`. + - `dt`: The timestep size `Δt` between two consecutive states. + - `diffusivity`: The diffusivity `ν`. + - `gamma`: The gamma parameter `γ`. + - `first_order_coefficient`: The first order coefficient `c₁`. + - `third_order_coefficient`: The third order coefficient `c₃`. + - `dealiasing_fraction`: The fraction of the highest wavenumbers to + dealias. Default is `1/2` because the default polynomial has a + highest degree of 3. + - `order`: The order of the Exponential Time Differencing Runge + Kutta method. Must be one of {0, 1, 2, 3, 4}. The option `0` only + solves the linear part of the equation. Use higher values for higher + accuracy and stability. The default choice of `2` is a good + compromise for single precision floats. + - `num_circle_points`: How many points to use in the complex contour + integral method to compute the coefficients of the exponential time + differencing Runge Kutta method. Default: 16. + - `circle_radius`: The radius of the contour used to compute the + coefficients of the exponential time differencing Runge Kutta + method. Default: 1.0. **Notes:** - - See - https://github.com/chebfun/chebfun/blob/db207bc9f48278ca4def15bf90591bfa44d0801d/spin.m#L89 - for an example IC of the Cahn-Hilliard in 1d. + + - See + https://github.com/chebfun/chebfun/blob/db207bc9f48278ca4def15bf90591bfa44d0801d/spin.m#L89 + for an example IC of the Cahn-Hilliard in 1d. """ self.diffusivity = diffusivity self.gamma = gamma diff --git a/exponax/reaction/_fisher_kpp.py b/exponax/reaction/_fisher_kpp.py index 580416c..a4c92e6 100644 --- a/exponax/reaction/_fisher_kpp.py +++ b/exponax/reaction/_fisher_kpp.py @@ -52,47 +52,48 @@ def __init__( limit of the solution is the constant state `1`. **Arguments:** - - `num_spatial_dims`: The number of spatial dimensions `d`. - - `domain_extent`: The size of the domain `L`; in higher dimensions - the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. - - `num_points`: The number of points `N` used to discretize the - domain. This **includes** the left boundary point and - **excludes** the right boundary point. In higher dimensions; the - number of points in each dimension is the same. Hence, the total - number of degrees of freedom is `Nᵈ`. - - `dt`: The timestep size `Δt` between two consecutive states. - - `diffusivity`: The diffusivity `ν`. - - `reactivity`: The reactivity `r`. - - `order`: The order of the Exponential Time Differencing Runge - Kutta method. Must be one of {0, 1, 2, 3, 4}. The option `0` - only solves the linear part of the equation. Use higher values - for higher accuracy and stability. The default choice of `2` is - a good compromise for single precision floats. - - `dealiasing_fraction`: The fraction of the wavenumbers to keep - before evaluating the nonlinearity. The default 2/3 corresponds - to Orszag's 2/3 rule. To fully eliminate aliasing, use 1/2. - Default: 2/3. - - `num_circle_points`: How many points to use in the complex contour - integral method to compute the coefficients of the exponential - time differencing Runge Kutta method. Default: 16. - - `circle_radius`: The radius of the contour used to compute the - coefficients of the exponential time differencing Runge Kutta - method. Default: 1.0. + + - `num_spatial_dims`: The number of spatial dimensions `d`. + - `domain_extent`: The size of the domain `L`; in higher dimensions + the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. + - `num_points`: The number of points `N` used to discretize the + domain. This **includes** the left boundary point and **excludes** + the right boundary point. In higher dimensions; the number of points + in each dimension is the same. Hence, the total number of degrees of + freedom is `Nᵈ`. + - `dt`: The timestep size `Δt` between two consecutive states. + - `diffusivity`: The diffusivity `ν`. + - `reactivity`: The reactivity `r`. + - `order`: The order of the Exponential Time Differencing Runge + Kutta method. Must be one of {0, 1, 2, 3, 4}. The option `0` only + solves the linear part of the equation. Use higher values for higher + accuracy and stability. The default choice of `2` is a good + compromise for single precision floats. + - `dealiasing_fraction`: The fraction of the wavenumbers to keep + before evaluating the nonlinearity. The default 2/3 corresponds to + Orszag's 2/3 rule. To fully eliminate aliasing, use 1/2. Default: + 2/3. + - `num_circle_points`: How many points to use in the complex contour + integral method to compute the coefficients of the exponential time + differencing Runge Kutta method. Default: 16. + - `circle_radius`: The radius of the contour used to compute the + coefficients of the exponential time differencing Runge Kutta + method. Default: 1.0. **Notes:** - - The dynamics require initial conditions in the range `[0, 1]`. - This can be achieved by combining any of the available IC - generators with the - [`ClampingICGenerator`](exponax/ic/_clamping.py). Alternatively, - a good choice is also the - [`GaussianBlobs`](exponax/ic/_gaussian_blob.py) + + - The dynamics require initial conditions in the range `[0, 1]`. + This can be achieved by combining any of the available IC generators + with the [`exponax.ic.ClampingICGenerator`]. Alternatively, a good + choice is also the [`exponax.ic.GaussianBlobs`] **Good Values:** - - Use the `ClampingICGenerator` on `RandomTruncatedFourierSeries` - with limits `[0, 1]` to generate initial conditions. Set - `domain_extent = 1.0`, `num_points = 100`, `dt = 0.001`, and - produce a trajectory of 500 steps. The final state of almost - constant `1` will be reached after 200-400 steps. + + - Use the `ClampingICGenerator` on `RandomTruncatedFourierSeries` + with limits `[0, 1]` to generate initial conditions. Set + `domain_extent = 1.0`, `num_points = 100`, `dt = 0.001`, and produce + a trajectory of 500 steps. The final state of almost constant `1` + will be reached after 200-400 steps. """ self.dealiasing_fraction = dealiasing_fraction self.diffusivity = diffusivity diff --git a/exponax/reaction/_gray_scott.py b/exponax/reaction/_gray_scott.py index 2754ea3..c71274a 100644 --- a/exponax/reaction/_gray_scott.py +++ b/exponax/reaction/_gray_scott.py @@ -104,36 +104,35 @@ def __init__( 1]`. **Arguments**: - - `num_spatial_dims`: The number of spatial dimensions `d`. - - `domain_extent`: The size of the domain `L`; in higher dimensions - the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. - - `num_points`: The number of points `N` used to discretize the - domain. This **includes** the left boundary point and - **excludes** the right boundary point. In higher dimensions; the - number of points in each dimension is the same. Hence, the total - number of degrees of freedom is `Nᵈ`. - - `dt`: The timestep size `Δt` between two consecutive states. - - `diffusivity_1`: The diffusivity `ν₁` of the first species. - Default - is `2e-5`. - - `diffusivity_2`: The diffusivity `ν₂` of the second species. - Default - is `1e-5`. - - `feed_rate`: The feed rate `f`. Default is `0.04`. - - `kill_rate`: The kill rate `k`. Default is `0.06`. - - `order`: The order of the Exponential Time Differencing Runge - Kutta method. Must be one of {0, 1, 2, 3, 4}. The option `0` - only solves the linear part of the equation. Use higher values - for higher accuracy and stability. The default choice of `2` is - a good compromise for single precision floats. - - `dealiasing_fraction`: The fraction of the wavenumbers to keep - before evaluating the nonlinearity. Default: 1/2. - - `num_circle_points`: How many points to use in the complex contour - integral method to compute the coefficients of the exponential - time differencing Runge Kutta method. Default: 16. - - `circle_radius`: The radius of the contour used to compute the - coefficients of the exponential time differencing Runge Kutta - method. Default: 1.0. + + - `num_spatial_dims`: The number of spatial dimensions `d`. + - `domain_extent`: The size of the domain `L`; in higher dimensions + the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. + - `num_points`: The number of points `N` used to discretize the + domain. This **includes** the left boundary point and **excludes** + the right boundary point. In higher dimensions; the number of points + in each dimension is the same. Hence, the total number of degrees of + freedom is `Nᵈ`. + - `dt`: The timestep size `Δt` between two consecutive states. + - `diffusivity_1`: The diffusivity `ν₁` of the first species. + Default is `2e-5`. + - `diffusivity_2`: The diffusivity `ν₂` of the second species. + Default is `1e-5`. + - `feed_rate`: The feed rate `f`. Default is `0.04`. + - `kill_rate`: The kill rate `k`. Default is `0.06`. + - `order`: The order of the Exponential Time Differencing Runge + Kutta method. Must be one of {0, 1, 2, 3, 4}. The option `0` only + solves the linear part of the equation. Use higher values for higher + accuracy and stability. The default choice of `2` is a good + compromise for single precision floats. + - `dealiasing_fraction`: The fraction of the wavenumbers to keep + before evaluating the nonlinearity. Default: 1/2. + - `num_circle_points`: How many points to use in the complex contour + integral method to compute the coefficients of the exponential time + differencing Runge Kutta method. Default: 16. + - `circle_radius`: The radius of the contour used to compute the + coefficients of the exponential time differencing Runge Kutta + method. Default: 1.0. TODO: Translate the different configurations of https://www.ljll.fr/hecht/ftp/ff++/2015-cimpa-IIT/edp-tuto/Pearson.pdf diff --git a/exponax/reaction/_swift_hohenberg.py b/exponax/reaction/_swift_hohenberg.py index b1ca623..1ffcccf 100644 --- a/exponax/reaction/_swift_hohenberg.py +++ b/exponax/reaction/_swift_hohenberg.py @@ -63,34 +63,35 @@ def __init__( will be attained in a steady state. **Arguments**: - - `num_spatial_dims`: The number of spatial dimensions `d`. - - `domain_extent`: The size of the domain `L`; in higher dimensions - the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. - - `num_points`: The number of points `N` used to discretize the - domain. This **includes** the left boundary point and - **excludes** the right boundary point. In higher dimensions; the - number of points in each dimension is the same. Hence, the total - number of degrees of freedom is `Nᵈ`. - - `dt`: The timestep size `Δt` between two consecutive states. - - `reactivity`: The reactivity `r`. Default is `0.7`. - - `critical_number`: The critical number `k`. Default is `1.0`. - - `polynomial_coefficients`: The coefficients `cᵢ` of the polynomial - function `g(u)`. Default is `(0.0, 0.0, 1.0, -1.0)`. This refers - to a polynomial of `u² - u³`. - - `dealiasing_fraction`: The fraction of the highest wavenumbers to - dealias. Default is `1/2` because the default polynomial has a - highest degree of 3. - - `order`: The order of the Exponential Time Differencing Runge - Kutta method. Must be one of {0, 1, 2, 3, 4}. The option `0` - only solves the linear part of the equation. Use higher values - for higher accuracy and stability. The default choice of `2` is - a good compromise for single precision floats. - - `num_circle_points`: How many points to use in the complex contour - integral method to compute the coefficients of the exponential - time differencing Runge Kutta method. Default: 16. - - `circle_radius`: The radius of the contour used to compute the - coefficients of the exponential time differencing Runge Kutta - method. Default: 1.0. + + - `num_spatial_dims`: The number of spatial dimensions `d`. + - `domain_extent`: The size of the domain `L`; in higher dimensions + the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. + - `num_points`: The number of points `N` used to discretize the + domain. This **includes** the left boundary point and **excludes** + the right boundary point. In higher dimensions; the number of points + in each dimension is the same. Hence, the total number of degrees of + freedom is `Nᵈ`. + - `dt`: The timestep size `Δt` between two consecutive states. + - `reactivity`: The reactivity `r`. Default is `0.7`. + - `critical_number`: The critical number `k`. Default is `1.0`. + - `polynomial_coefficients`: The coefficients `cᵢ` of the polynomial + function `g(u)`. Default is `(0.0, 0.0, 1.0, -1.0)`. This refers to + a polynomial of `u² - u³`. + - `dealiasing_fraction`: The fraction of the highest wavenumbers to + dealias. Default is `1/2` because the default polynomial has a + highest degree of 3. + - `order`: The order of the Exponential Time Differencing Runge + Kutta method. Must be one of {0, 1, 2, 3, 4}. The option `0` only + solves the linear part of the equation. Use higher values for higher + accuracy and stability. The default choice of `2` is a good + compromise for single precision floats. + - `num_circle_points`: How many points to use in the complex contour + integral method to compute the coefficients of the exponential time + differencing Runge Kutta method. Default: 16. + - `circle_radius`: The radius of the contour used to compute the + coefficients of the exponential time differencing Runge Kutta + method. Default: 1.0. """ self.reactivity = reactivity self.critical_number = critical_number diff --git a/exponax/stepper/_burgers.py b/exponax/stepper/_burgers.py index 7db9e0f..866e983 100644 --- a/exponax/stepper/_burgers.py +++ b/exponax/stepper/_burgers.py @@ -57,54 +57,57 @@ def __init__( state. **Arguments:** - - `num_spatial_dims`: The number of spatial dimensions `d`. - - `domain_extent`: The size of the domain `L`; in higher dimensions - the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. - - `num_points`: The number of points `N` used to discretize the - domain. This **includes** the left boundary point and - **excludes** the right boundary point. In higher dimensions; the - number of points in each dimension is the same. Hence, the total - number of degrees of freedom is `Nᵈ`. - - `dt`: The timestep size `Δt` between two consecutive states. - - `diffusivity`: The diffusivity `ν` in the Burgers equation. - Default: 0.1. - - `convection_scale`: The scaling factor for the convection term. - Note that the scaling by 1/2 is always performed. Default: 1.0. - - `single_channel`: Whether to use the single channel mode in higher - dimensions. In this case the the convection is `b₁ (∇ ⋅ 1)(u²)`. - In this case, the state always has a single channel, no matter - the spatial dimension. Default: False. - - `order`: The order of the Exponential Time Differencing Runge - Kutta method. Must be one of {0, 1, 2, 3, 4}. The option `0` - only solves the linear part of the equation. Use higher values - for higher accuracy and stability. The default choice of `2` is - a good compromise for single precision floats. - - `dealiasing_fraction`: The fraction of the wavenumbers to keep - before evaluating the nonlinearity. The default 2/3 corresponds - to Orszag's 2/3 rule. To fully eliminate aliasing, use 1/2. - Default: 2/3. - - `num_circle_points`: How many points to use in the complex contour - integral method to compute the coefficients of the exponential - time differencing Runge Kutta method. Default: 16. - - `circle_radius`: The radius of the contour used to compute the - coefficients of the exponential time differencing Runge Kutta - method. Default: 1.0. + + - `num_spatial_dims`: The number of spatial dimensions `d`. + - `domain_extent`: The size of the domain `L`; in higher dimensions + the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. + - `num_points`: The number of points `N` used to discretize the + domain. This **includes** the left boundary point and **excludes** + the right boundary point. In higher dimensions; the number of points + in each dimension is the same. Hence, the total number of degrees of + freedom is `Nᵈ`. + - `dt`: The timestep size `Δt` between two consecutive states. + - `diffusivity`: The diffusivity `ν` in the Burgers equation. + Default: 0.1. + - `convection_scale`: The scaling factor for the convection term. + Note that the scaling by 1/2 is always performed. Default: 1.0. + - `single_channel`: Whether to use the single channel mode in higher + dimensions. In this case the the convection is `b₁ (∇ ⋅ 1)(u²)`. In + this case, the state always has a single channel, no matter the + spatial dimension. Default: False. + - `order`: The order of the Exponential Time Differencing Runge + Kutta method. Must be one of {0, 1, 2, 3, 4}. The option `0` only + solves the linear part of the equation. Use higher values for higher + accuracy and stability. The default choice of `2` is a good + compromise for single precision floats. + - `dealiasing_fraction`: The fraction of the wavenumbers to keep + before evaluating the nonlinearity. The default 2/3 corresponds to + Orszag's 2/3 rule. To fully eliminate aliasing, use 1/2. Default: + 2/3. + - `num_circle_points`: How many points to use in the complex contour + integral method to compute the coefficients of the exponential time + differencing Runge Kutta method. Default: 16. + - `circle_radius`: The radius of the contour used to compute the + coefficients of the exponential time differencing Runge Kutta + method. Default: 1.0. **Notes:** - - If the `diffusivity` is set too low, spurious oscillations may - occur because the solution becomes "too discontinous". Such - simulations are not possible with Fourier pseudospectral - methods. Sometimes increasing the number of points `N` can help. + + - If the `diffusivity` is set too low, spurious oscillations may + occur because the solution becomes "too discontinous". Such + simulations are not possible with Fourier pseudospectral methods. + Sometimes increasing the number of points `N` can help. **Good Values:** - - Next to the defaults of `diffusivity=0.1` and - `convection_scale=1.0`, the following values are good starting - points: - - `num_points=100` for 1d. - - `domain_extent=1` - - `dt=0.1` - - A bandlimited initial condition with maximum absolute value of - ~1.0 + + - Next to the defaults of `diffusivity=0.1` and + `convection_scale=1.0`, the following values are good starting + points: + - `num_points=100` for 1d. + - `domain_extent=1` + - `dt=0.1` + - A bandlimited initial condition with maximum absolute value of + ~1.0 """ self.diffusivity = diffusivity self.convection_scale = convection_scale diff --git a/exponax/stepper/_korteweg_de_vries.py b/exponax/stepper/_korteweg_de_vries.py index fc4f1d4..58cae5c 100644 --- a/exponax/stepper/_korteweg_de_vries.py +++ b/exponax/stepper/_korteweg_de_vries.py @@ -71,60 +71,61 @@ def __init__( Otherwise, the soliton interaction continues indefinitely. **Arguments:** - - `num_spatial_dims`: The number of spatial dimensions `d`. - - `domain_extent`: The size of the domain `L`; in higher dimensions - the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. - - `num_points`: The number of points `N` used to discretize the - domain. This **includes** the left boundary point and - **excludes** the right boundary point. In higher dimensions; the - number of points in each dimension is the same. Hence, the total - number of degrees of freedom is `Nᵈ`. - - `dt`: The timestep size `Δt` between two consecutive states. - - `convection_scale`: The convection coefficient `b₁`. Note that the - convection is already scaled by 1/2 to account for the - conservative evaluation. The value of `b₁` scales it further. - Oftentimes `b₁ = -6` to match the analytical soliton solutions. - See also - https://en.wikipedia.org/wiki/Korteweg%E2%80%93De_Vries_equation#One-soliton_solution - - `dispersivity`: The dispersion coefficient `a₃`. Dispersion refers - to wavenumber-dependent advection, i.e., higher wavenumbers are - advected faster. Default `1.0`, - - `advect_over_diffuse`: If `True`, the dispersion is computed as - advection over diffusion. This adds spatial mixing. Default is - `False`. - - `diffusivity`: The rate at which the solution decays. - - `single_channel`: Whether to use the single channel mode in higher - dimensions. In this case the the convection is `b₁ (∇ ⋅ 1)(u²)`. - In this case, the state always has a single channel, no matter - the spatial dimension. Default: False. - - `order`: The order of the Exponential Time Differencing Runge - Kutta method. Must be one of {0, 1, 2, 3, 4}. The option `0` - only solves the linear part of the equation. Use higher values - for higher accuracy and stability. The default choice of `2` is - a good compromise for single precision floats. - - `dealiasing_fraction`: The fraction of the wavenumbers to keep - before evaluating the nonlinearity. The default 2/3 corresponds - to Orszag's 2/3 rule. To fully eliminate aliasing, use 1/2. - Default: 2/3. - - `num_circle_points`: How many points to use in the complex contour - integral method to compute the coefficients of the exponential - time differencing Runge Kutta method. Default: 16. - - `circle_radius`: The radius of the contour used to compute the - coefficients of the exponential time differencing Runge Kutta - method. Default: 1.0. + + - `num_spatial_dims`: The number of spatial dimensions `d`. + - `domain_extent`: The size of the domain `L`; in higher dimensions + the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. + - `num_points`: The number of points `N` used to discretize the + domain. This **includes** the left boundary point and **excludes** + the right boundary point. In higher dimensions; the number of points + in each dimension is the same. Hence, the total number of degrees of + freedom is `Nᵈ`. + - `dt`: The timestep size `Δt` between two consecutive states. + - `convection_scale`: The convection coefficient `b₁`. Note that the + convection is already scaled by 1/2 to account for the conservative + evaluation. The value of `b₁` scales it further. Oftentimes `b₁ = + -6` to match the analytical soliton solutions. See also + https://en.wikipedia.org/wiki/Korteweg%E2%80%93De_Vries_equation#One-soliton_solution + - `dispersivity`: The dispersion coefficient `a₃`. Dispersion refers + to wavenumber-dependent advection, i.e., higher wavenumbers are + advected faster. Default `1.0`, + - `advect_over_diffuse`: If `True`, the dispersion is computed as + advection over diffusion. This adds spatial mixing. Default is + `False`. + - `diffusivity`: The rate at which the solution decays. + - `single_channel`: Whether to use the single channel mode in higher + dimensions. In this case the the convection is `b₁ (∇ ⋅ 1)(u²)`. In + this case, the state always has a single channel, no matter the + spatial dimension. Default: False. + - `order`: The order of the Exponential Time Differencing Runge + Kutta method. Must be one of {0, 1, 2, 3, 4}. The option `0` only + solves the linear part of the equation. Use higher values for higher + accuracy and stability. The default choice of `2` is a good + compromise for single precision floats. + - `dealiasing_fraction`: The fraction of the wavenumbers to keep + before evaluating the nonlinearity. The default 2/3 corresponds to + Orszag's 2/3 rule. To fully eliminate aliasing, use 1/2. Default: + 2/3. + - `num_circle_points`: How many points to use in the complex contour + integral method to compute the coefficients of the exponential time + differencing Runge Kutta method. Default: 16. + - `circle_radius`: The radius of the contour used to compute the + coefficients of the exponential time differencing Runge Kutta + method. Default: 1.0. **Notes:** + - **Good Values:** - - There is an anlytical solution to the (inviscid, `ν = 0`) KdV of - `u(t, x) = - 1/2 c^2 sech^2(c/2 (x - ct - a))` with the - hyperbolic secant `sech` and arbitrarily selected speed `c` and - shift `a`. - - For a nice simulation with an initial condition that breaks into - solitons choose `domain_extent=20.0` and an initial condition - with the first 5-10 modes. Set dt=0.01, num points in the range - of 50-200 are sufficient. + + - There is an anlytical solution to the (inviscid, `ν = 0`) KdV of + `u(t, x) = - 1/2 c^2 sech^2(c/2 (x - ct - a))` with the hyperbolic + secant `sech` and arbitrarily selected speed `c` and shift `a`. + - For a nice simulation with an initial condition that breaks into + solitons choose `domain_extent=20.0` and an initial condition with + the first 5-10 modes. Set dt=0.01, num points in the range of 50-200 + are sufficient. """ self.convection_scale = convection_scale self.dispersivity = dispersivity diff --git a/exponax/stepper/_kuramoto_sivashinsky.py b/exponax/stepper/_kuramoto_sivashinsky.py index 573d07b..88d7d4c 100644 --- a/exponax/stepper/_kuramoto_sivashinsky.py +++ b/exponax/stepper/_kuramoto_sivashinsky.py @@ -62,72 +62,74 @@ def __init__( spatially. **Arguments:** - - `num_spatial_dims`: The number of spatial dimensions `d`. - - `domain_extent`: The size of the domain `L`; in higher dimensions - the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. - - `num_points`: The number of points `N` used to discretize the - domain. This **includes** the left boundary point and - **excludes** the right boundary point. In higher dimensions; the - number of points in each dimension is the same. Hence, the total - number of degrees of freedom is `Nᵈ`. - - `dt`: The timestep size `Δt` between two consecutive states. - - `gradient_norm_scale`: The gradient-norm coefficient `b₂`. Note - that the gradient norm is already scaled by 1/2. This factor - allows for further modification. Default: 1.0. - - `second_order_diffusivity`: The diffusivity `ν` in the KS - equation. The sign of this coefficient is interpreted as if the - term was on the left-hand side. Hence it should have a positive - value to act destabilizing. Default: 1.0. - - `fourth_order_diffusivity`: The hyper viscosity `μ` in the KS - equation. The sign of this coefficient is interpreted as if the - term was on the left-hand side. Hence it should have a positive - value to act stabilizing. Default: 1.0. - - `order`: The order of the Exponential Time Differencing Runge - Kutta method. Must be one of {0, 1, 2, 3, 4}. The option `0` - only solves the linear part of the equation. Use higher values - for higher accuracy and stability. The default choice of `2` is - a good compromise for single precision floats. - - `dealiasing_fraction`: The fraction of the wavenumbers to keep - before evaluating the nonlinearity. The default 2/3 corresponds - to Orszag's 2/3 rule. To fully eliminate aliasing, use 1/2. - Default: 2/3. - - `num_circle_points`: How many points to use in the complex contour - integral method to compute the coefficients of the exponential - time differencing Runge Kutta method. Default: 16. - - `circle_radius`: The radius of the contour used to compute the - coefficients of the exponential time differencing Runge Kutta - method. Default: 1.0. + + - `num_spatial_dims`: The number of spatial dimensions `d`. + - `domain_extent`: The size of the domain `L`; in higher dimensions + the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. + - `num_points`: The number of points `N` used to discretize the + domain. This **includes** the left boundary point and **excludes** + the right boundary point. In higher dimensions; the number of points + in each dimension is the same. Hence, the total number of degrees of + freedom is `Nᵈ`. + - `dt`: The timestep size `Δt` between two consecutive states. + - `gradient_norm_scale`: The gradient-norm coefficient `b₂`. Note + that the gradient norm is already scaled by 1/2. This factor allows + for further modification. Default: 1.0. + - `second_order_diffusivity`: The diffusivity `ν` in the KS + equation. The sign of this coefficient is interpreted as if the term + was on the left-hand side. Hence it should have a positive value to + act destabilizing. Default: 1.0. + - `fourth_order_diffusivity`: The hyper viscosity `μ` in the KS + equation. The sign of this coefficient is interpreted as if the term + was on the left-hand side. Hence it should have a positive value to + act stabilizing. Default: 1.0. + - `order`: The order of the Exponential Time Differencing Runge + Kutta method. Must be one of {0, 1, 2, 3, 4}. The option `0` only + solves the linear part of the equation. Use higher values for higher + accuracy and stability. The default choice of `2` is a good + compromise for single precision floats. + - `dealiasing_fraction`: The fraction of the wavenumbers to keep + before evaluating the nonlinearity. The default 2/3 corresponds to + Orszag's 2/3 rule. To fully eliminate aliasing, use 1/2. Default: + 2/3. + - `num_circle_points`: How many points to use in the complex contour + integral method to compute the coefficients of the exponential time + differencing Runge Kutta method. Default: 16. + - `circle_radius`: The radius of the contour used to compute the + coefficients of the exponential time differencing Runge Kutta + method. Default: 1.0. **Notes:** - - The KS equation enters a chaotic state if the domain extent is - chosen large enough. In this chaotic attractor it can run - indefinitely. It is in balancing state of the second-order term - producing new energy, the nonlinearity transporting it into - higher modes where the fourth-order term dissipates it. - - If the domain extent is chosen large enough to eventually enter a - chaotic state, the initial condition does not really matter. - Since the KS "produces its own energy", the energy spectrum for - the chaotic attractor is independent of the initial condition. - - However, since the KS develops a certain spectrum based on the - domain length, make sure to use enough discretization point to - capture the highes occuring mode. For a domain extent of 60, - this requires at least roughly 100 `num_points` in single - precision floats. - - For domain lengths smaller than the threshold to enter chaos, the - KS equation, exhibits various other patterns like propagating - waves, etc. - - For higher dimensions (i.e., `num_spatial_dims > 1`), a chaotic - state is already entered for smaller domain extents. For more - details and the kind of dynamics that can occur see: - https://royalsocietypublishing.org/doi/10.1098/rspa.2014.0932 + + - The KS equation enters a chaotic state if the domain extent is + chosen large enough. In this chaotic attractor it can run + indefinitely. It is in balancing state of the second-order term + producing new energy, the nonlinearity transporting it into higher + modes where the fourth-order term dissipates it. + - If the domain extent is chosen large enough to eventually enter a + chaotic state, the initial condition does not really matter. Since + the KS "produces its own energy", the energy spectrum for the + chaotic attractor is independent of the initial condition. + - However, since the KS develops a certain spectrum based on the + domain length, make sure to use enough discretization point to + capture the highes occuring mode. For a domain extent of 60, this + requires at least roughly 100 `num_points` in single precision + floats. + - For domain lengths smaller than the threshold to enter chaos, the + KS equation, exhibits various other patterns like propagating waves, + etc. + - For higher dimensions (i.e., `num_spatial_dims > 1`), a chaotic + state is already entered for smaller domain extents. For more + details and the kind of dynamics that can occur see: + https://royalsocietypublishing.org/doi/10.1098/rspa.2014.0932 **Good Values:** - - For a simple spatio-temporal chaos in 1d, set - `num_spatial_dims=1`, `domain_extent=60`, `num_points=100`, - `dt=0.1`. The initial condition can be anything, important is - that it is mean zero. The first 200-500 steps of the trajectory - will be the transitional phase, after that the chaotic attractor - is reached. + + - For a simple spatio-temporal chaos in 1d, set + `num_spatial_dims=1`, `domain_extent=60`, `num_points=100`, + `dt=0.1`. The initial condition can be anything, important is that + it is mean zero. The first 200-500 steps of the trajectory will be + the transitional phase, after that the chaotic attractor is reached. """ self.gradient_norm_scale = gradient_norm_scale self.second_order_diffusivity = second_order_diffusivity diff --git a/exponax/stepper/_linear.py b/exponax/stepper/_linear.py index 62773f1..05e6a79 100644 --- a/exponax/stepper/_linear.py +++ b/exponax/stepper/_linear.py @@ -44,31 +44,33 @@ def __init__( with `c ∈ ℝᵈ` being the velocity/advection vector. **Arguments:** - - `num_spatial_dims`: The number of spatial dimensions `d`. - - `domain_extent`: The size of the domain `L`; in higher dimensions - the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. - - `num_points`: The number of points `N` used to discretize the - domain. This **includes** the left boundary point and - **excludes** the right boundary point. In higher dimensions; the - number of points in each dimension is the same. Hence, the total - number of degrees of freedom is `Nᵈ`. - - `dt`: The timestep size `Δt` between two consecutive states. - - `velocity` (keyword-only): The advection speed `c`. In higher - dimensions, this can be a scalar (=float) or a vector of length - `d`. If a scalar is given, the advection speed is assumed to be - the same in all spatial dimensions. Default: `1.0`. + + - `num_spatial_dims`: The number of spatial dimensions `d`. + - `domain_extent`: The size of the domain `L`; in higher dimensions + the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. + - `num_points`: The number of points `N` used to discretize the + domain. This **includes** the left boundary point and **excludes** + the right boundary point. In higher dimensions; the number of points + in each dimension is the same. Hence, the total number of degrees of + freedom is `Nᵈ`. + - `dt`: The timestep size `Δt` between two consecutive states. + - `velocity` (keyword-only): The advection speed `c`. In higher + dimensions, this can be a scalar (=float) or a vector of length `d`. + If a scalar is given, the advection speed is assumed to be the same + in all spatial dimensions. Default: `1.0`. **Notes:** - - The stepper is unconditionally stable, not matter the choice of - any argument because the equation is solved analytically in - Fourier space. **However**, note that initial conditions with - modes higher than the Nyquist freuency (`(N//2)+1` with `N` - being the `num_points`) lead to spurious oscillations. - - Ultimately, only the factor `c Δt / L` affects the characteristic - of the dynamics. See also - [`exponax.normalized.NormalizedLinearStepper`][] with - `normalized_coefficients = [0, alpha_1]` with `alpha_1 = - - velocity * dt / domain_extent`. + + - The stepper is unconditionally stable, not matter the choice of + any argument because the equation is solved analytically in Fourier + space. **However**, note that initial conditions with modes higher + than the Nyquist freuency (`(N//2)+1` with `N` being the + `num_points`) lead to spurious oscillations. + - Ultimately, only the factor `c Δt / L` affects the characteristic + of the dynamics. See also + [`exponax.normalized.NormalizedLinearStepper`][] with + `normalized_coefficients = [0, alpha_1]` with `alpha_1 = - velocity + * dt / domain_extent`. """ # TODO: better checks on the desired type of velocity if isinstance(velocity, float): @@ -145,36 +147,38 @@ def __init__( ``` **Arguments:** - - `num_spatial_dims`: The number of spatial dimensions `d`. - - `domain_extent`: The size of the domain `L`; in higher dimensions - the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. - - `num_points`: The number of points `N` used to discretize the - domain. This **includes** the left boundary point and - **excludes** the right boundary point. In higher dimensions; the - number of points in each dimension is the same. Hence, the total - number of degrees of freedom is `Nᵈ`. - - `dt`: The timestep size `Δt` between two consecutive states. - - `diffusivity` (keyword-only): The diffusivity `ν`. In higher - dimensions, this can be a scalar (=float), a vector of length - `d`, or a matrix of shape `d ˣ d`. If a scalar is given, the - diffusivity is assumed to be the same in all spatial dimensions. - If a vector (of length `d`) is given, the diffusivity varies - across dimensions (=> diagonal diffusion). For a matrix, there - is fully anisotropic diffusion. In this case, `A` must be - symmetric positive definite (SPD). Default: `0.01`. + + - `num_spatial_dims`: The number of spatial dimensions `d`. + - `domain_extent`: The size of the domain `L`; in higher dimensions + the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. + - `num_points`: The number of points `N` used to discretize the + domain. This **includes** the left boundary point and **excludes** + the right boundary point. In higher dimensions; the number of points + in each dimension is the same. Hence, the total number of degrees of + freedom is `Nᵈ`. + - `dt`: The timestep size `Δt` between two consecutive states. + - `diffusivity` (keyword-only): The diffusivity `ν`. In higher + dimensions, this can be a scalar (=float), a vector of length `d`, + or a matrix of shape `d ˣ d`. If a scalar is given, the diffusivity + is assumed to be the same in all spatial dimensions. If a vector (of + length `d`) is given, the diffusivity varies across dimensions (=> + diagonal diffusion). For a matrix, there is fully anisotropic + diffusion. In this case, `A` must be symmetric positive definite + (SPD). Default: `0.01`. **Notes:** - - The stepper is unconditionally stable, not matter the choice of - any argument because the equation is solved analytically in - Fourier space. - - A `ν > 0` leads to stable and decaying solutions (i.e., energy is - removed from the system). A `ν < 0` leads to unstable and - growing solutions (i.e., energy is added to the system). - - Ultimately, only the factor `ν Δt / L²` affects the characteristic - of the dynamics. See also - [`exponax.normalized.NormalizedLinearStepper`][] with - `normalized_coefficients = [0, 0, alpha_2]` with `alpha_2 = - diffusivity * dt / domain_extent**2`. + + - The stepper is unconditionally stable, not matter the choice of + any argument because the equation is solved analytically in Fourier + space. + - A `ν > 0` leads to stable and decaying solutions (i.e., energy is + removed from the system). A `ν < 0` leads to unstable and growing + solutions (i.e., energy is added to the system). + - Ultimately, only the factor `ν Δt / L²` affects the characteristic + of the dynamics. See also + [`exponax.normalized.NormalizedLinearStepper`][] with + `normalized_coefficients = [0, 0, alpha_2]` with `alpha_2 = + diffusivity * dt / domain_extent**2`. """ # ToDo: more sophisticated checks here if isinstance(diffusivity, float): @@ -260,40 +264,42 @@ def __init__( anisotropic diffusion. **Arguments:** - - `num_spatial_dims`: The number of spatial dimensions `d`. - - `domain_extent`: The size of the domain `L`; in higher dimensions - the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. - - `num_points`: The number of points `N` used to discretize the - domain. This **includes** the left boundary point and - **excludes** the right boundary point. In higher dimensions; the - number of points in each dimension is the same. Hence, the total - number of degrees of freedom is `Nᵈ`. - - `dt`: The timestep size `Δt` between two consecutive states. - - `velocity` (keyword-only): The advection speed `c`. In higher - dimensions, this can be a scalar (=float) or a vector of length - `d`. If a scalar is given, the advection speed is assumed to be - the same in all spatial dimensions. Default: `1.0`. - - `diffusivity` (keyword-only): The diffusivity `ν`. In higher - dimensions, this can be a scalar (=float), a vector of length - `d`, or a matrix of shape `d ˣ d`. If a scalar is given, the - diffusivity is assumed to be the same in all spatial dimensions. - If a vector (of length `d`) is given, the diffusivity varies - across dimensions (=> diagonal diffusion). For a matrix, there - is fully anisotropic diffusion. In this case, `A` must be - symmetric positive definite (SPD). Default: `0.01`. + + - `num_spatial_dims`: The number of spatial dimensions `d`. + - `domain_extent`: The size of the domain `L`; in higher dimensions + the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. + - `num_points`: The number of points `N` used to discretize the + domain. This **includes** the left boundary point and **excludes** + the right boundary point. In higher dimensions; the number of points + in each dimension is the same. Hence, the total number of degrees of + freedom is `Nᵈ`. + - `dt`: The timestep size `Δt` between two consecutive states. + - `velocity` (keyword-only): The advection speed `c`. In higher + dimensions, this can be a scalar (=float) or a vector of length `d`. + If a scalar is given, the advection speed is assumed to be the same + in all spatial dimensions. Default: `1.0`. + - `diffusivity` (keyword-only): The diffusivity `ν`. In higher + dimensions, this can be a scalar (=float), a vector of length `d`, + or a matrix of shape `d ˣ d`. If a scalar is given, the diffusivity + is assumed to be the same in all spatial dimensions. If a vector (of + length `d`) is given, the diffusivity varies across dimensions (=> + diagonal diffusion). For a matrix, there is fully anisotropic + diffusion. In this case, `A` must be symmetric positive definite + (SPD). Default: `0.01`. **Notes:** - - The stepper is unconditionally stable, not matter the choice of - any argument because the equation is solved analytically in - Fourier space. **However**, note that initial conditions with - modes higher than the Nyquist freuency (`(N//2)+1` with `N` - being the `num_points`) lead to spurious oscillations. - - Ultimately, only the factors `c Δt / L` and `ν Δt / L²` affect the - characteristic of the dynamics. See also - [`exponax.normalized.NormalizedLinearStepper`][] with - `normalized_coefficients = [0, alpha_1, alpha_2]` with `alpha_1 = - - velocity * dt / domain_extent` and `alpha_2 = diffusivity * dt / - domain_extent**2`. + + - The stepper is unconditionally stable, not matter the choice of + any argument because the equation is solved analytically in Fourier + space. **However**, note that initial conditions with modes higher + than the Nyquist freuency (`(N//2)+1` with `N` being the + `num_points`) lead to spurious oscillations. + - Ultimately, only the factors `c Δt / L` and `ν Δt / L²` affect the + characteristic of the dynamics. See also + [`exponax.normalized.NormalizedLinearStepper`][] with + `normalized_coefficients = [0, alpha_1, alpha_2]` with `alpha_1 = - + velocity * dt / domain_extent` and `alpha_2 = diffusivity * dt / + domain_extent**2`. """ # TODO: more sophisticated checks here if isinstance(velocity, float): @@ -390,35 +396,37 @@ def __init__( with `𝒸 ∈ ℝᵈ` being the dispersivity vector **Arguments:** - - `num_spatial_dims`: The number of spatial dimensions `d`. - - `domain_extent`: The size of the domain `L`; in higher dimensions - the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. - - `num_points`: The number of points `N` used to discretize the - domain. This **includes** the left boundary point and - **excludes** the right boundary point. In higher dimensions; the - number of points in each dimension is the same. Hence, the total - number of degrees of freedom is `Nᵈ`. - - `dt`: The timestep size `Δt` between two consecutive states. - - `dispersivity` (keyword-only): The dispersivity `𝒸`. In higher - dimensions, this can be a scalar (=float) or a vector of length - `d`. If a scalar is given, the dispersivity is assumed to be the - same in all spatial dimensions. Default: `1.0`. - - `advect_on_diffusion` (keyword-only): If `True`, the second form - of the dispersion equation in higher dimensions is used. As a - consequence, there will be mixing in the spatial derivatives. - Default: `False`. + + - `num_spatial_dims`: The number of spatial dimensions `d`. + - `domain_extent`: The size of the domain `L`; in higher dimensions + the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. + - `num_points`: The number of points `N` used to discretize the + domain. This **includes** the left boundary point and **excludes** + the right boundary point. In higher dimensions; the number of points + in each dimension is the same. Hence, the total number of degrees of + freedom is `Nᵈ`. + - `dt`: The timestep size `Δt` between two consecutive states. + - `dispersivity` (keyword-only): The dispersivity `𝒸`. In higher + dimensions, this can be a scalar (=float) or a vector of length `d`. + If a scalar is given, the dispersivity is assumed to be the same in + all spatial dimensions. Default: `1.0`. + - `advect_on_diffusion` (keyword-only): If `True`, the second form + of the dispersion equation in higher dimensions is used. As a + consequence, there will be mixing in the spatial derivatives. + Default: `False`. **Notes:** - - The stepper is unconditionally stable, not matter the choice of - any argument because the equation is solved analytically in - Fourier space. **However**, note that initial conditions with - modes higher than the Nyquist freuency (`(N//2)+1` with `N` - being the `num_points`) lead to spurious oscillations. - - Ultimately, only the factor `𝒸 Δt / L³` affects the characteristic - of the dynamics. See also - [`exponax.normalized.NormalizedLinearStepper`][] with - `normalized_coefficients = [0, 0, 0, alpha_3]` with `alpha_3 = - dispersivity * dt / domain_extent**3`. + + - The stepper is unconditionally stable, not matter the choice of + any argument because the equation is solved analytically in Fourier + space. **However**, note that initial conditions with modes higher + than the Nyquist freuency (`(N//2)+1` with `N` being the + `num_points`) lead to spurious oscillations. + - Ultimately, only the factor `𝒸 Δt / L³` affects the + characteristic of the dynamics. See also + [`exponax.normalized.NormalizedLinearStepper`][] with + `normalized_coefficients = [0, 0, 0, alpha_3]` with `alpha_3 = + dispersivity * dt / domain_extent**3`. """ if isinstance(dispersivity, float): dispersivity = jnp.ones(num_spatial_dims) * dispersivity @@ -507,32 +515,34 @@ def __init__( The latter introduces spatial mixing. **Arguments:** - - `num_spatial_dims`: The number of spatial dimensions `d`. - - `domain_extent`: The size of the domain `L`; in higher dimensions - the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. - - `num_points`: The number of points `N` used to discretize the - domain. This **includes** the left boundary point and - **excludes** the right boundary point. In higher dimensions; the - number of points in each dimension is the same. Hence, the total - number of degrees of freedom is `Nᵈ`. - - `dt`: The timestep size `Δt` between two consecutive states. - - `hyper_diffusivity` (keyword-only): The hyper-diffusivity `ν`. - This stepper only supports scalar (=isotropic) - hyper-diffusivity. Default: 0.0001. - - `diffuse_on_diffuse` (keyword-only): If `True`, the second form - of the hyper-diffusion equation in higher dimensions is used. As - a consequence, there will be mixing in the spatial derivatives. - Default: `False`. + + - `num_spatial_dims`: The number of spatial dimensions `d`. + - `domain_extent`: The size of the domain `L`; in higher dimensions + the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. + - `num_points`: The number of points `N` used to discretize the + domain. This **includes** the left boundary point and **excludes** + the right boundary point. In higher dimensions; the number of points + in each dimension is the same. Hence, the total number of degrees of + freedom is `Nᵈ`. + - `dt`: The timestep size `Δt` between two consecutive states. + - `hyper_diffusivity` (keyword-only): The hyper-diffusivity `ν`. + This stepper only supports scalar (=isotropic) hyper-diffusivity. + Default: 0.0001. + - `diffuse_on_diffuse` (keyword-only): If `True`, the second form + of the hyper-diffusion equation in higher dimensions is used. As a + consequence, there will be mixing in the spatial derivatives. + Default: `False`. **Notes:** - - The stepper is unconditionally stable, not matter the choice of - any argument because the equation is solved analytically in - Fourier space. - - Ultimately, only the factor `μ Δt / L⁴` affects the characteristic - of the dynamics. See also - [`exponax.normalized.NormalizedLinearStepper`][] with - `normalized_coefficients = [0, 0, 0, 0, alpha_4]` with `alpha_4 - = - hyper_diffusivity * dt / domain_extent**4`. + + - The stepper is unconditionally stable, not matter the choice of + any argument because the equation is solved analytically in Fourier + space. + - Ultimately, only the factor `μ Δt / L⁴` affects the characteristic + of the dynamics. See also + [`exponax.normalized.NormalizedLinearStepper`][] with + `normalized_coefficients = [0, 0, 0, 0, alpha_4]` with `alpha_4 = - + hyper_diffusivity * dt / domain_extent**4`. """ self.hyper_diffusivity = hyper_diffusivity self.diffuse_on_diffuse = diffuse_on_diffuse diff --git a/exponax/stepper/_navier_stokes.py b/exponax/stepper/_navier_stokes.py index 3f9b612..cfad4a8 100644 --- a/exponax/stepper/_navier_stokes.py +++ b/exponax/stepper/_navier_stokes.py @@ -53,55 +53,58 @@ def __init__( `domain_extent`. **Arguments:** - - `num_spatial_dims`: The number of spatial dimensions `d`. - - `domain_extent`: The size of the domain `L`; in higher dimensions - the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. - - `num_points`: The number of points `N` used to discretize the - domain. This **includes** the left boundary point and - **excludes** the right boundary point. In higher dimensions; the - number of points in each dimension is the same. Hence, the total - number of degrees of freedom is `Nᵈ`. - - `dt`: The timestep size `Δt` between two consecutive states. - - `diffusivity`: The diffusivity coefficient `ν`. This affects the - Reynolds number. The lower the diffusivity, the "more - turbulent". Default is `0.01`. - - `vorticity_convection_scale`: The scaling factor for the vorticity - convection term. Default is `1.0`. - - `drag`: The drag coefficient `λ`. Default is `0.0`. - - `order`: The order of the Exponential Time Differencing Runge - Kutta method. Must be one of {0, 1, 2, 3, 4}. The option `0` - only solves the linear part of the equation. Use higher values - for higher accuracy and stability. The default choice of `2` is - a good compromise for single precision floats. - - `dealiasing_fraction`: The fraction of the wavenumbers to keep - before evaluating the nonlinearity. The default 2/3 corresponds - to Orszag's 2/3 rule. To fully eliminate aliasing, use 1/2. - Default: 2/3. - - `num_circle_points`: How many points to use in the complex contour - integral method to compute the coefficients of the exponential - time differencing Runge Kutta method. Default: 16. - - `circle_radius`: The radius of the contour used to compute the - coefficients of the exponential time differencing Runge Kutta - method. Default: 1.0. + + - `num_spatial_dims`: The number of spatial dimensions `d`. + - `domain_extent`: The size of the domain `L`; in higher dimensions + the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. + - `num_points`: The number of points `N` used to discretize the + domain. This **includes** the left boundary point and **excludes** + the right boundary point. In higher dimensions; the number of points + in each dimension is the same. Hence, the total number of degrees of + freedom is `Nᵈ`. + - `dt`: The timestep size `Δt` between two consecutive states. + - `diffusivity`: The diffusivity coefficient `ν`. This affects the + Reynolds number. The lower the diffusivity, the "more turbulent". + Default is `0.01`. + - `vorticity_convection_scale`: The scaling factor for the vorticity + convection term. Default is `1.0`. + - `drag`: The drag coefficient `λ`. Default is `0.0`. + - `order`: The order of the Exponential Time Differencing Runge + Kutta method. Must be one of {0, 1, 2, 3, 4}. The option `0` only + solves the linear part of the equation. Use higher values for higher + accuracy and stability. The default choice of `2` is a good + compromise for single precision floats. + - `dealiasing_fraction`: The fraction of the wavenumbers to keep + before evaluating the nonlinearity. The default 2/3 corresponds to + Orszag's 2/3 rule. To fully eliminate aliasing, use 1/2. Default: + 2/3. + - `num_circle_points`: How many points to use in the complex contour + integral method to compute the coefficients of the exponential time + differencing Runge Kutta method. Default: 16. + - `circle_radius`: The radius of the contour used to compute the + coefficients of the exponential time differencing Runge Kutta + method. Default: 1.0. **Notes:** - - The Reynolds number is measure of whether the problem is dominated - by diffusive or convective effects. The higher the Reynolds - number, the stronger the effect of the convective. Since this - term is the nonlinear one, the higher the Reynolds number, the - worse the ETDRK methods become in comparison to other - approaches. That is because those methods are better for - semi-linear PDEs in which the difficult part is the linear one. - - The higher the Reynolds number, the smaller the timestep size must - be to ensure stability. + + - The Reynolds number is measure of whether the problem is dominated + by diffusive or convective effects. The higher the Reynolds number, + the stronger the effect of the convective. Since this term is the + nonlinear one, the higher the Reynolds number, the worse the ETDRK + methods become in comparison to other approaches. That is because + those methods are better for semi-linear PDEs in which the difficult + part is the linear one. + - The higher the Reynolds number, the smaller the timestep size must + be to ensure stability. **Good Values:** - - `domain_extent = 1`, `num_points=50`, `dt=0.01`, - `diffusivity=0.0003`, together with an initial condition in - which only the first few wavenumbers are excited gives a nice - decaying turbulence demo. - - Use the repeated stepper to perform 10 substeps to have faster - dynamics. + + - `domain_extent = 1`, `num_points=50`, `dt=0.01`, + `diffusivity=0.0003`, together with an initial condition in which + only the first few wavenumbers are excited gives a nice decaying + turbulence demo. + - Use the repeated stepper to perform 10 substeps to have faster + dynamics. """ if num_spatial_dims != 2: raise ValueError(f"Expected num_spatial_dims = 2, got {num_spatial_dims}.") @@ -231,39 +234,40 @@ def __init__( **Arguments:** - - `num_spatial_dims`: The number of spatial dimensions `d`. - - `domain_extent`: The size of the domain `L`; in higher dimensions - the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. - - `num_points`: The number of points `N` used to discretize the - domain. This **includes** the left boundary point and - **excludes** the right boundary point. In higher dimensions; the - number of points in each dimension is the same. Hence, the total - number of degrees of freedom is `Nᵈ`. - - `dt`: The timestep size `Δt` between two consecutive states. - - `diffusivity`: The diffusivity coefficient `ν`. This affects the - Reynolds number. The lower the diffusivity, the "more - turbulent". Default is `0.001`. - - `convection_scale`: The scaling factor for the vorticity - convection term. Default is `1.0`. - - `drag`: The drag coefficient `λ`. Default is `-0.1`. - - `injection_mode`: The mode of the injection. Default is `4`. - - `injection_scale`: The scaling factor for the injection. Default - is `1.0`. - - `order`: The order of the Exponential Time Differencing Runge - Kutta method. Must be one of {0, 1, 2, 3, 4}. The option `0` - only solves the linear part of the equation. Use higher values - for higher accuracy and stability. The default choice of `2` is - a good compromise for single precision floats. - - `dealiasing_fraction`: The fraction of the wavenumbers to keep - before evaluating the nonlinearity. The default 2/3 corresponds - to Orszag's 2/3 rule. To fully eliminate aliasing, use 1/2. - Default: 2/3. - - `num_circle_points`: How many points to use in the complex contour - integral method to compute the coefficients of the exponential - time differencing Runge Kutta method. Default: 16. - - `circle_radius`: The radius of the contour used to compute the - coefficients of the exponential time differencing Runge Kutta - method. Default: 1.0. + + - `num_spatial_dims`: The number of spatial dimensions `d`. + - `domain_extent`: The size of the domain `L`; in higher dimensions + the domain is assumed to be a scaled hypercube `Ω = (0, L)ᵈ`. + - `num_points`: The number of points `N` used to discretize the + domain. This **includes** the left boundary point and **excludes** + the right boundary point. In higher dimensions; the number of points + in each dimension is the same. Hence, the total number of degrees of + freedom is `Nᵈ`. + - `dt`: The timestep size `Δt` between two consecutive states. + - `diffusivity`: The diffusivity coefficient `ν`. This affects the + Reynolds number. The lower the diffusivity, the "more turbulent". + Default is `0.001`. + - `convection_scale`: The scaling factor for the vorticity + convection term. Default is `1.0`. + - `drag`: The drag coefficient `λ`. Default is `-0.1`. + - `injection_mode`: The mode of the injection. Default is `4`. + - `injection_scale`: The scaling factor for the injection. Default + is `1.0`. + - `order`: The order of the Exponential Time Differencing Runge + Kutta method. Must be one of {0, 1, 2, 3, 4}. The option `0` only + solves the linear part of the equation. Use higher values for higher + accuracy and stability. The default choice of `2` is a good + compromise for single precision floats. + - `dealiasing_fraction`: The fraction of the wavenumbers to keep + before evaluating the nonlinearity. The default 2/3 corresponds to + Orszag's 2/3 rule. To fully eliminate aliasing, use 1/2. Default: + 2/3. + - `num_circle_points`: How many points to use in the complex contour + integral method to compute the coefficients of the exponential time + differencing Runge Kutta method. Default: 16. + - `circle_radius`: The radius of the contour used to compute the + coefficients of the exponential time differencing Runge Kutta + method. Default: 1.0. """ if num_spatial_dims != 2: raise ValueError(f"Expected num_spatial_dims = 2, got {num_spatial_dims}.") diff --git a/exponax/viz/__init__.py b/exponax/viz/__init__.py index 35e7284..5ae962c 100644 --- a/exponax/viz/__init__.py +++ b/exponax/viz/__init__.py @@ -19,12 +19,14 @@ from ._animate import ( animate_spatio_temporal, + animate_spatio_temporal_2d, animate_state_1d, animate_state_2d, animate_state_3d, ) from ._animate_facet import ( - animate_spatial_temporal_facet, + animate_spatio_temporal_2d_facet, + animate_spatio_temporal_facet, animate_state_1d_facet, animate_state_2d_facet, animate_state_3d_facet, @@ -59,7 +61,9 @@ "animate_state_2d", "animate_state_2d_facet", "animate_spatio_temporal", - "animate_spatial_temporal_facet", + "animate_spatio_temporal_2d", + "animate_spatio_temporal_facet", + "animate_spatio_temporal_2d_facet", "volume_render_state_3d", "plot_state_3d", "plot_spatio_temporal_2d", diff --git a/exponax/viz/_animate_facet.py b/exponax/viz/_animate_facet.py index f364b3f..d906436 100644 --- a/exponax/viz/_animate_facet.py +++ b/exponax/viz/_animate_facet.py @@ -112,7 +112,7 @@ def animate(i): return ani -def animate_spatial_temporal_facet( +def animate_spatio_temporal_facet( trjs: Union[Float[Array, "S T C N"], Float[Array, "B S T 1 N"]], *, facet_over_channels: bool = True, diff --git a/mkdocs.yml b/mkdocs.yml index d4457bc..fd9e29c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -85,17 +85,98 @@ nav: - Examples: - Basics: - 1D Advection: 'examples/simple_advection_example_1d.ipynb' + - 1D Solver Showcase: 'examples/solver_showcase_1d.ipynb' + - 1D Initial Condition Showcase: 'examples/initial_condition_showcase_1d.ipynb' + - Understanding General and Normalized Stepper: 'examples/understanding_general_and_normalized_stepper.ipynb' + - Subclassing a custom Solver: 'examples/creating_your_own_solvers_1d.ipynb' + - 2D Advection: 'examples/simple_advection_example_2d.ipynb' + - 2D Solver Showcase: 'examples/solver_showcase_2d.ipynb' + - Advanced: + - 1D Burgers Emulator Training: 'examples/learning_burgers_autoregressive_neural_operator.ipynb' + - Additional: + - Nice Features: 'examples/additional_features.ipynb' + - Performance Hints: 'examples/performance_hints.ipynb' - Stepper: - Physical: - Linear: - Advection: 'api/stepper/physical/linear/advection.md' + - Diffusion: 'api/stepper/physical/linear/diffusion.md' + - Advection-Diffusion: 'api/stepper/physical/linear/advection_diffusion.md' + - Dispersion: 'api/stepper/physical/linear/dispersion.md' + - Hyper-Diffusion: 'api/stepper/physical/linear/hyper_diffusion.md' + - Burgers: 'api/stepper/physical/burgers.md' + - Korteweg-de Vries: 'api/stepper/physical/kdv.md' + - Kuramoto-Sivashinsky: 'api/stepper/physical/ks.md' + - Kuramoto-Sivashinsky (Conservative): 'api/stepper/physical/ks_cons.md' + - Navier-Stokes: 'api/stepper/physical/navier_stokes.md' + - Reaction-Diffusion: + - Fisher-KPP: 'api/stepper/physical/reaction_diffusion/fisher_kpp.md' + - Allen-Cahn: 'api/stepper/physical/reaction_diffusion/allen_cahn.md' + - Cahn-Hilliard: 'api/stepper/physical/reaction_diffusion/cahn_hilliard.md' + - Swift-Hohenberg: 'api/stepper/physical/reaction_diffusion/swift_hohenberg.md' + - Gray-Scott: 'api/stepper/physical/reaction_diffusion/gray_scott.md' + - General: + - General Linear: 'api/stepper/physical/general/general_linear.md' + - General Convection: 'api/stepper/physical/general/general_convection.md' + - General Gradient Norm: 'api/stepper/physical/general/general_gradient_norm.md' + - General Polynomial: 'api/stepper/physical/general/general_polynomial.md' + - General Nonlinear: 'api/stepper/physical/general/general_nonlinear.md' + - General Vorticity Convection: 'api/stepper/physical/general/general_vorticity_convection.md' + - Poisson: 'api/stepper/physical/poisson.md' - Normalized: - Linear: 'api/stepper/normalized/linear.md' - # - Difficulty - # - Initial Conditions - # - Utilities - # - Visualization - # - ETDRK Backbone + - Convection: 'api/stepper/normalized/convection.md' + - Gradient Norm: 'api/stepper/normalized/gradient_norm.md' + - Polynomial: 'api/stepper/normalized/polynomial.md' + - Nonlinear: 'api/stepper/normalized/nonlinear.md' + - Vorticity Convection: 'api/stepper/normalized/vorticity_convection.md' + - Difficulty: + - Linear: 'api/stepper/difficulty/linear.md' + - Convection: 'api/stepper/difficulty/convection.md' + - Gradient Norm: 'api/stepper/difficulty/gradient_norm.md' + - Polynomial: 'api/stepper/difficulty/polynomial.md' + - Nonlinear: 'api/stepper/difficulty/nonlinear.md' + - Utilities: + - Nonlinear Functions: + - Zero: 'api/utilities/nonlin_fun/zero.md' + - Convection: 'api/utilities/nonlin_fun/convection.md' + - Gradient Norm: 'api/utilities/nonlin_fun/gradient_norm.md' + - Polynomial: 'api/utilities/nonlin_fun/polynomial.md' + - Vorticity Convection: 'api/utilities/nonlin_fun/vorticity_convection.md' + - Nonlinear: 'api/utilities/nonlin_fun/nonlinear.md' + - Repeated Stepper: 'api/utilities/repeated_stepper.md' + - Forced Stepper: 'api/utilities/forced_stepper.md' + - Initial Conditions: + - Sine Waves 1d: 'api/utilities/initial_conditions/sine_waves_1d.md' + - Truncated Fourier Series: 'api/utilities/initial_conditions/truncated_fourier_series.md' + - Gaussian Random Field: 'api/utilities/initial_conditions/gaussian_random_field.md' + - Diffused Noise: 'api/utilities/initial_conditions/diffused_noise.md' + - Gaussian Blob: 'api/utilities/initial_conditions/gaussian_blob.md' + - Discontinuities: 'api/utilities/initial_conditions/discontinuities.md' + - Helper: 'api/utilities/initial_conditions/helper.md' + - Rollout & Repeat: 'api/utilities/rollout_and_repeat.md' + - Grid Generation: 'api/utilities/grid_generation.md' + - Derivatives: 'api/utilities/derivatives.md' + - Normalized & Difficulty: 'api/utilities/normalized_and_difficulty.md' + - Metrics: + - MSE-based: 'api/utilities/metrics/mse_based.md' + - RMSE-based: 'api/utilities/metrics/rmse_based.md' + - Correlation: 'api/utilities/metrics/correlation.md' + - Fourier nRMSE: 'api/utilities/metrics/fourier_nrmse.md' + - Visualization: + - Plot States: 'api/utilities/visualization/plot_states.md' + - Plot Spatio-Temporal: 'api/utilities/visualization/plot_spatio_temporal.md' + - Plot States Facet: 'api/utilities/visualization/plot_states_facet.md' + - Plot Spatio-Temporal Facet: 'api/utilities/visualization/plot_spatio_temporal_facet.md' + - Animate States: 'api/utilities/visualization/animate_states.md' + - Animate Spatio-Temporal: 'api/utilities/visualization/animate_spatio_temporal.md' + - Animate States Facet: 'api/utilities/visualization/animate_states_facet.md' + - Animate Spatio-Temporal Facet: 'api/utilities/visualization/animate_spatio_temporal_facet.md' - Additional API: - Base: - - Base Stepper: 'api/stepper/base_stepper.md' \ No newline at end of file + - Base Stepper: 'api/stepper/base_stepper.md' + - Base Nonlinear Function: 'api/utilities/nonlin_fun/base.md' + - Base Initial Condition: 'api/utilities/initial_conditions/base_initial_condition.md' + - ETDRK Backbone: 'api/etdrk_backbone.md' + - Background: + - Design Decisions: 'background/design_decisions.md' \ No newline at end of file diff --git a/tests/test_builtin_solvers.py b/tests/test_builtin_solvers.py index baeb0dd..c9b36e5 100644 --- a/tests/test_builtin_solvers.py +++ b/tests/test_builtin_solvers.py @@ -55,7 +55,7 @@ def test_instantiate(): ex.normalized.NormalizedConvectionStepper, ex.normalized.NormalizedGradientNormStepper, ex.normalized.NormalizedPolynomialStepper, - ex.normalized.NormlizedGeneralNonlinearStepper, + ex.normalized.NormalizedGeneralNonlinearStepper, ]: normalized_simulator(num_spatial_dims, num_points)