Swift-Hohenberg¤
exponax.stepper.reaction.SwiftHohenberg
¤
Bases: BaseStepper
Source code in exponax/stepper/reaction/_swift_hohenberg.py
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
|
__init__
¤
__init__(
num_spatial_dims: int,
domain_extent: float,
num_points: int,
dt: float,
*,
reactivity: float = 0.7,
critical_number: float = 1.0,
polynomial_coefficients: tuple[float, ...] = (
0.0,
0.0,
1.0,
-1.0,
),
order: int = 2,
dealiasing_fraction: float = 1 / 2,
num_circle_points: int = 16,
circle_radius: float = 1.0
)
Timestepper for the d-dimensional (d ∈ {1, 2, 3}
) Swift-Hohenberg
reaction-diffusion equation on periodic boundary conditions (works best
in 2d). This reaction-diffusion equation is a model for pattern
formation, for example, the fingerprints on a human finger.
In 1d, the Swift-Hohenberg equation is given by
uₜ = r u - (k + ∂ₓₓ)² u + g(u)
with r
the reactivity, k
the critical number, ∂ₓₓ
the second
derivative operator. g(u)
can be any smooth function. This equation
restricts to the case of polynomial functions, i.e.
g(u) = ∑ᵢ cᵢ uⁱ
with cᵢ
the polynomial coefficients.
The state only has one channel, no matter the spatial dimension. The higher dimensional generarlization reads
uₜ = r u - (k + Δ)² u + g(u)
with Δ
the Laplacian. Since the Laplacian is squared, there will be
spatial mixing.
The expected temporal behavior is a collective pattern formation which will be attained in a steady state.
Arguments:
num_spatial_dims
: The number of spatial dimensionsd
.domain_extent
: The size of the domainL
; in higher dimensions the domain is assumed to be a scaled hypercubeΩ = (0, L)ᵈ
.num_points
: The number of pointsN
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 isNᵈ
.dt
: The timestep sizeΔt
between two consecutive states.reactivity
: The reactivityr
. Default is0.7
.critical_number
: The critical numberk
. Default is1.0
.polynomial_coefficients
: The coefficientscᵢ
of the polynomial functiong(u)
. Default is(0.0, 0.0, 1.0, -1.0)
. This refers to a polynomial ofu² - u³
.dealiasing_fraction
: The fraction of the highest wavenumbers to dealias. Default is1/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 option0
only solves the linear part of the equation. Use higher values for higher accuracy and stability. The default choice of2
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.
Source code in exponax/stepper/reaction/_swift_hohenberg.py
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
|
__call__
¤
__call__(
u: Float[Array, "C ... N"]
) -> Float[Array, "C ... N"]
Perform one step of the time integration for a single state.
Arguments:
u
: The state vector, shape(C, ..., N,)
.
Returns:
u_next
: The state vector after one step, shape(C, ..., N,)
.
Tip
Use this call method together with exponax.rollout
to efficiently
produce temporal trajectories.
Info
For batched operation, use jax.vmap
on this function.
Source code in exponax/_base_stepper.py
240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 |
|