Contents Menu Expand Light mode Dark mode Auto light/dark, in light mode Auto light/dark, in dark mode Skip to content
Conatus
Light Logo Dark Logo
Conatus
← Conatus website Tutorials

Conatus 0.1.1 · CPU supported, GPU (CUDA 12) in beta

Getting started

  • Installation
  • Tutorials
    • Getting started in ten minutes
    • 0. Getting started: convection between two plates
    • 1. A first eigenvalue problem: Orr–Sommerfeld
    • 2. A first initial-value problem: Rayleigh–Bénard 2D, CPU then GPU
    • 3. Symmetries and symmetry subspaces
    • 4. Nonlinear boundary-value problems and continuation: Bratu
    • 5. Invariant solutions: Kuramoto–Sivashinsky, L = 22
    • 8. Polar geometry: a drum, a pipe, two rotating cylinders
    • 10. Bifurcations: branch switching, cycles, codimension 2, normal forms
    • 11. Record, query, reproduce: the run registry
    • 12. Chaos and ensembles: Lyapunov spectrum, covariant vectors, Poincaré map, basins
    • 13. Where a global mode is born, and what the data say about it
    • 14. Coming from Dedalus
    • 15. Covariant Lyapunov vectors of Kuramoto–Sivashinsky: tangencies and the physical modes
    • 16. Lagrangian tracers and a numerical dye

Using Conatus

  • User guide
    • Geometries
    • Spherical shells
    • Channels between two surfaces
    • Equations
    • Boundary conditions
    • Ready problems
    • Units and conventions
    • Simulations and time steppers
    • Resolution
    • GPU
    • Diagnostics and visualization
    • Particles and dye of a simulation
    • Input and output
    • The Studio
    • Pilot a run from a script or an agent
    • For AI agents
    • Notebooks
    • Dynamics
      • Eigenvalues and stability
      • Onset of convection
      • Non-modal analysis
      • Invariant solutions
      • Continuation and bifurcations
      • Floquet analysis
      • Eigenvalues in a region
      • Chaos and ensembles
      • Invariant manifolds and slices
      • Symmetry subspaces
      • Adjoints and sensitivity
      • Tangent, adjoint and optimal perturbations
      • Data-driven analysis
    • explain() and the Methods paragraph
    • Numerical uncertainty
    • The run registry
    • Reproducibility and provenance
    • Checking an installation
    • Errors and what they mean
    • Experimental features
    • Coming from Dedalus
    • The expert layer
    • IR and operators
    • Bases and domains
    • Tau terms by hand
  • Gallery: fluids everywhere
    • Weakly nonlinear theory derived from the IR: Landau and Ginzburg–Landau coefficients
    • Rayleigh–Bénard onset in 3D: the nonlinear Boussinesq equations, linearized by the IR
    • Onset of rotating Rayleigh–Bénard convection on the f-plane (Chandrasekhar 1961, Ch. III)
    • Salt fingers: stationary double-diffusive onset in a layer with free walls (Stern 1960; Baines & Gill 1969, J. Fluid Mech. 37, 289-306)
    • Phase-space geometry in three steps
    • Womersley flow in a plane channel: exact profile (LBVP and IVP) and Floquet stability (Hill)
    • Turing instability of the Brusselator (Prigogine & Lefever 1968)
    • Complex Ginzburg–Landau equation: Benjamin–Feir–Newell and Eckhaus instabilities of plane waves
    • Swift–Hohenberg: onset of rolls, weakly nonlinear amplitude, roll branch by continuation, 2D rolls
    • Kelvin–Helmholtz instability of the tanh mixing layer (Michalke 1964), inviscid and viscous
    • Non-modal stability of plane Poiseuille flow: transient growth and the continuous adjoint
    • Wavemaker and base-flow sensitivity of Orszag’s Tollmien-Schlichting mode (plane Poiseuille, Re = 1e4, alpha = 1), then the steady-forcing sensitivity
    • Stratified Kelvin–Helmholtz: Taylor–Goldstein equation for the tanh/tanh layer (Hazel 1972)
  • API reference
    • User layer: import conatus as cn
      • conatus.Box
      • conatus.Channel
      • conatus.Disk
      • conatus.Annulus
      • conatus.Pipe
      • conatus.Sphere
      • conatus.Ball
      • conatus.Shell
      • conatus.TaylorCouette
      • conatus.MappedBox
      • conatus.periodic
      • conatus.walls
      • conatus.line
      • conatus.half_line
      • conatus.between
      • conatus.no_slip
      • conatus.free_slip
      • conatus.navier_slip
      • conatus.Model
      • conatus.model.Simulation
      • conatus.model.Linearization
      • conatus.model.Compiled
      • conatus.problems.channel
      • conatus.problems.channel_evp
      • conatus.problems.plane_couette
      • conatus.problems.plane_couette_evp
      • conatus.problems.rayleigh_benard
      • conatus.problems.rayleigh_benard_evp
      • conatus.problems.taylor_couette
      • conatus.problems.taylor_couette_evp
      • conatus.problems.pipe
      • conatus.problems.pipe_evp
      • conatus.problems.kuramoto_sivashinsky
      • conatus.problems.kolmogorov
      • conatus.problems.swift_hohenberg
      • conatus.problems.rotating_shell_convection
      • conatus.problems.rotating_shell_convection_evp
      • conatus.problems.Ready
      • conatus.runs.track
      • conatus.runs.record
      • conatus.runs.find
      • conatus.runs.get
      • conatus.runs.compare
      • conatus.runs.lineage
      • conatus.runs.reproduce
      • conatus.runs.to_dataframe
      • conatus.runs.export
      • conatus.runs.explain
      • conatus.runs.Run
      • conatus.runs.RunList
      • conatus.runs.Registry
      • conatus.series
      • conatus.spectrum
      • conatus.profile
      • conatus.view
      • conatus.time_average
      • conatus.uncertainty
      • conatus.StopRun
      • conatus.doctor
      • conatus.from_dedalus
      • conatus.parse_equation
      • conatus.parse_expr
      • conatus.box
      • conatus.contour.count
      • conatus.contour.beyn
      • conatus.contour.CountResult
      • conatus.contour.BeynResult
      • conatus.contour.RegionEVPResult
    • Expert layer: conatus.expert
      • Expert layer by module
        • conatus.expert.Check
        • conatus.expert.VerificationReport
        • conatus.expert.verify
        • conatus.expert.CartesianCoordinates
        • conatus.expert.PolarCoordinates
        • conatus.expert.CylindricalCoordinates
        • conatus.expert.S2Coordinates
        • conatus.expert.SphericalCoordinates
        • conatus.expert.RealFourier
        • conatus.expert.ComplexFourier
        • conatus.expert.Jacobi
        • conatus.expert.Chebyshev
        • conatus.expert.ChebyshevT
        • conatus.expert.ChebyshevU
        • conatus.expert.ChebyshevV
        • conatus.expert.Legendre
        • conatus.expert.Ultraspherical
        • conatus.expert.DiskBasis
        • conatus.expert.AnnulusBasis
        • conatus.expert.SphereBasis
        • conatus.expert.ShellBasis
        • conatus.expert.BallBasis
        • conatus.expert.Hermite
        • conatus.expert.Laguerre
        • conatus.expert.CompoundChebyshev
        • conatus.expert.Domain
        • conatus.expert.Field
        • conatus.expert.VectorField
        • conatus.expert.TensorField
        • conatus.expert.Parameter
        • conatus.expert.dot
        • conatus.expert.cross
        • conatus.expert.outer
        • conatus.expert.conj
        • conatus.expert.comp
        • conatus.expert.diff
        • conatus.expert.grad
        • conatus.expert.div
        • conatus.expert.lap
        • conatus.expert.curl
        • conatus.expert.dt
        • conatus.expert.integ
        • conatus.expert.interp
        • conatus.expert.lift
        • conatus.expert.unit_vector
        • conatus.expert.exp
        • conatus.expert.log
        • conatus.expert.sin
        • conatus.expert.cos
        • conatus.expert.tanh
        • conatus.expert.sqrt
        • conatus.expert.absolute
        • conatus.expert.sign
        • conatus.expert.Problem
        • conatus.expert.IVP
        • conatus.expert.LBVP
        • conatus.expert.EVP
        • conatus.expert.NLBVP
        • conatus.expert.NonlinearLHSError
        • conatus.expert.ProblemError
        • conatus.expert.RankReport
        • conatus.expert.EVEN
        • conatus.expert.ODD
        • conatus.expert.Reflection
        • conatus.expert.SymmetrySubspace
        • conatus.expert.SymmetryError
        • conatus.expert.SymmetryBreakingError
        • conatus.expert.ShiftReflect
        • conatus.expert.AzimuthalMFold
        • conatus.expert.EquatorialParity
        • conatus.expert.MappedChebyshev
        • conatus.expert.RationalMap
        • conatus.expert.TanhMap
        • conatus.expert.TanMap
        • conatus.expert.parse_equation
        • conatus.expert.parse_expr
        • conatus.expert.ChannelBaseFlow
        • conatus.expert.channel
        • conatus.expert.UnitSystem
        • conatus.expert.convert
        • conatus.expert.Energy
        • conatus.expert.ChannelUnits
        • conatus.expert.DiscretizationError
        • conatus.expert.LBVPSolution
        • conatus.expert.Plan
        • conatus.expert.RankError
        • conatus.expert.discretize
        • conatus.expert.FieldData
        • conatus.expert.grid
        • conatus.expert.EVPResult
        • conatus.expert.solve_dense
        • conatus.expert.solve_sparse
        • conatus.expert.eigenvalues
        • conatus.expert.ParametricEVP
        • conatus.expert.CriticalPoint
        • conatus.expert.critical
        • conatus.expert.NewtonSolver
        • conatus.expert.NLBVPSolution
        • conatus.expert.NewtonNotConverged
        • conatus.expert.PeriodicNewtonSolver
        • conatus.expert.linearize
        • conatus.expert.InnerProduct
        • conatus.expert.CFL
        • conatus.expert.EmbeddedError
        • conatus.expert.TauWatch
        • conatus.expert.IVPSolver
        • conatus.expert.SCHEMES
        • conatus.expert.SpectralError
        • conatus.expert.FlowMap
        • conatus.expert.VJPSuspended
        • conatus.expert.revolve_cost
        • conatus.expert.FourierOps
        • conatus.expert.NewtonKrylovHookstep
        • conatus.expert.Equilibrium
        • conatus.expert.equilibrium_eigenvalues
        • conatus.expert.find_equilibrium
        • conatus.expert.find_travelling_wave
        • conatus.expert.find_relative_periodic_orbit
        • conatus.expert.floquet_multipliers
        • conatus.expert.symmetry_breaking_check
        • conatus.expert.EdgeTracker
        • conatus.expert.ThresholdBisection
        • conatus.expert.ContinuationSettings
        • conatus.expert.NLBVPContinuation
        • conatus.expert.KSDomainContinuation
        • conatus.expert.HillBlocks
        • conatus.expert.hill_from_plan
        • conatus.expert.secant_root
        • conatus.expert.exponents_dense
        • conatus.expert.HillGPU
        • conatus.expert.CertifiedRoot
        • conatus.expert.SecantRoot
        • conatus.expert.shell_floquet
        • conatus.expert.floquet_exponents
        • conatus.expert.optimal_gain
        • conatus.expert.periodic_operator
        • conatus.expert.energy_factor
        • conatus.expert.gain
        • conatus.expert.propagator
        • conatus.expert.Y
        • conatus.expert.compare_adjoints
        • conatus.expert.max_growth
        • conatus.expert.numerical_abscissa
        • conatus.expert.parallel_shear_flow
        • conatus.expert.state_space
        • conatus.expert.CHANNEL_SYSTEMS
        • conatus.expert.laminar_poiseuille
        • conatus.expert.methods
        • conatus.expert.ConatusError
        • conatus.expert.EquationError
        • conatus.expert.UndeclaredVariableError
        • conatus.expert.ParameterError
        • conatus.expert.BoundaryConditionError
        • conatus.expert.EquationSyntaxError
        • conatus.expert.ResolutionError
        • conatus.expert.CoordinateError
        • conatus.expert.OptionError
        • conatus.expert.InputTypeError
        • conatus.expert.DtypeError
        • conatus.expert.TensorError
        • conatus.expert.ConvergenceError
        • conatus.expert.NumericalError
        • conatus.expert.UnderResolvedWarning
        • conatus.expert.IllPosedWarning
        • conatus.expert.InitialDataWarning
        • conatus.expert.BackendError
        • conatus.expert.MissingDependencyError
        • conatus.expert.MissingFileError
        • conatus.expert.UnsupportedError
        • conatus.expert.AmbiguousNameError
        • conatus.expert.ResolutionWarning
        • conatus.expert.CorrectnessWarning
        • conatus.expert.BaseStateWarning
        • conatus.expert.GroupWarning
        • conatus.expert.DefaultChoiceWarning
        • conatus.expert.ExperimentalWarning
        • conatus.expert.gpu_available
        • conatus.expert.gpu_report
        • conatus.expert.ir_system
        • conatus.expert.ode_problem
        • conatus.expert.continue_equilibria
        • conatus.expert.normal_form
        • conatus.expert.CollocationMesh
        • conatus.expert.PeriodicOrbitProblem
        • conatus.expert.continue_orbits
        • conatus.expert.branch_switch
        • conatus.expert.continue_codim2
        • conatus.expert.amplitude_equation
        • conatus.expert.ginzburg_landau
        • conatus.expert.cos_mode_observable
        • conatus.expert.FirstFourierModeSlice
        • conatus.expert.find_rpo_in_slice
        • conatus.expert.slice_equilibrium_check
        • conatus.expert.PoincareSection
        • conatus.expert.first_return_map
        • conatus.expert.globalize
        • conatus.expert.unstable_manifold
        • conatus.expert.find_connection
        • conatus.expert.scan_connection
        • conatus.expert.ecs_system
        • conatus.expert.base_flow_sensitivity
        • conatus.expert.ginzburg_landau_exact
        • conatus.expert.linear_ginzburg_landau
        • conatus.expert.structural_sensitivity
        • conatus.expert.DMD
        • conatus.expert.DataInnerProduct
        • conatus.expert.SPOD
        • conatus.expert.dmd
        • conatus.expert.edmd
        • conatus.expert.monomials
        • conatus.expert.pod
        • conatus.expert.rbf
        • conatus.expert.spod
        • conatus.expert.kaplan_yorke
        • conatus.expert.lyapunov_spectrum
        • conatus.expert.poincare_section
        • conatus.expert.Ensemble
        • conatus.expert.ensemble_fate
        • conatus.expert.proportion_ci
        • conatus.expert.CountResult
        • conatus.expert.BeynResult
        • conatus.expert.RegionEVPResult

About

  • Principles
  • Mathematics
    • Spectral discretisation and the tau method
    • Curvilinear geometries: regular bases
    • Implicit–explicit time stepping
    • Eigenproblems, residuals and the physical adjoint
    • Invariant solutions: Newton–Krylov–hookstep
    • Continuation and bifurcations
    • Floquet–Hill analysis of time-periodic flows
    • Non-modal analysis: transient growth
    • Lyapunov exponents, covariant vectors and ensembles
    • Symmetry subspaces, slices and phase-space geometry
  • Citing Conatus
Back to top

Gallery: fluids everywhere¶

One script per canonical case, written as in the paper that introduced it: the equation, physical comments, explain(), and a result checked against a published value or a closed form: each script ends with an assert against that value, with its tolerance, so it stops with an error if the value is not reproduced. The pages below are generated from examples/ at each build; the values are those recorded in examples/README.md.

Case

Obtained

Reference

Weakly nonlinear theory derived from the IR: Landau and Ginzburg–Landau coefficients

—

—

Rayleigh–Bénard onset in 3D: the nonlinear Boussinesq equations, linearized by the IR

Ra = 1707.76178 at

k

Onset of rotating Rayleigh–Bénard convection on the f-plane (Chandrasekhar 1961, Ch. III)

one pencil for all Ta (√Ta declared); free walls: Ra_c(Ta) = closed form to ≤ 2e-15 (Ta = 0…1e5); rigid: 1756.347 / 2151.341 / 4712.042 (Ta = 1e2, 1e3, 1e4)

Chandrasekhar 1961, ch. III

Salt fingers: stationary double-diffusive onset in a layer with free walls (Stern 1960; Baines & Gill 1969, J. Fluid Mech. 37, 289-306)

R_S/τ − R_T = 27π⁴/4 to ≤ 4e-16 (4 pairs)

Stern 1960; Baines & Gill 1969, JFM 37

Phase-space geometry in three steps

two-mode model: RPO “1” in the slice, T = 3.6415119771, θ = 0.0809697054; Lorenz homoclinic orbit as a connection, r = 13.9265574075

Budanur, Borrero-Echeverry & Cvitanović (arXiv:1411.3303), Table I: 3.64151221; Sparrow 1982: 13.926

Womersley flow in a plane channel: exact profile (LBVP and IVP) and Floquet stability (Hill)

profile to 9e-16 (N = 24); RK443 order 2.85, SBDF2 1.95; Floquet ε = 0 = Orszag to 1e-9, O(ε²) deviation

Womersley 1955; Orszag 1971, JFM 50, Table 3

Turing instability of the Brusselator (Prigogine & Lefever 1968)

b_c to ≤ 9e-16 relative (3 sets)

Prigogine & Lefever 1968; Peña & Pérez-García 2001, PRE 64

Complex Ginzburg–Landau equation: Benjamin–Feir–Newell and Eckhaus instabilities of plane waves

complex form (conj() on the LHS, doubled system declared); BFN threshold: 1 + c₁c₃ < 1e-12 (Richardson k → 0); Eckhaus q_E² to 1e-7

Newell 1974; Aranson & Kramer 2002, RMP 74

Swift–Hohenberg: onset of rolls, weakly nonlinear amplitude, roll branch by continuation, 2D rolls

threshold (r, q) on a single pencil (q a parameter, RealFourier); A(r = 0.1) = 0.3652433 (A² − 4r/3 → r²/144); periodic NLBVP (declared phase) = odd subspace to 1e-12; 2D IVP on the branch to 1e-9

Swift & Hohenberg 1977; Cross & Hohenberg 1993

Kelvin–Helmholtz instability of the tanh mixing layer (Michalke 1964), inviscid and viscous

max ω_i = 0.189702 at α = 0.44492 (L = 20, N = 384); viscous → inviscid in O(1/Re)

Michalke 1964, JFM 19, Table 1: 0.1897 at α = 0.4446

Non-modal stability of plane Poiseuille flow: transient growth and the continuous adjoint

G_max = 4896.948 at t = 379.075 (Re = 5000, kz = 2.044; N = 48–96 identical to 1e-10); continuous vs discrete adjoint

Butler & Farrell 1992; Reddy & Henningson 1993: 4897 at t = 379

Wavemaker and base-flow sensitivity of Orszag’s Tollmien-Schlichting mode (plane Poiseuille, Re = 1e4, alpha = 1), then the steady-forcing sensitivity

wavemaker maximum S = 11.4856 at y = ±0.87387 (critical layer U = c_r); derivative of the pencil = Richardson finite difference to 5e-11; density (continuous adjoint) → pencil to 2e-12 (N = 80)

no exact published value in a channel; closed forms of Chomaz (2005) for Ginzburg–Landau (tests/sensitivity)

Stratified Kelvin–Helmholtz: Taylor–Goldstein equation for the tanh/tanh layer (Hazel 1972)

whole line (tanh map, L = 2/α) + shifted complex path: J_n(1/2) = 1/4 to 2.5e-12 (N = 192) and J_n(0.3) = 0.21 to 3.8e-9 by Newton on c_i(J) = 0, without extrapolation, independent of L and δ; J = 0.3: every mode damped

Hazel 1972, JFM 51 (R = 1); Miles 1961 / Howard 1961: J_c = 1/4

Where a script meets a capability that the library does not have, it says so and says what it does instead; nothing is worked around silently.

Next
Weakly nonlinear theory derived from the IR: Landau and Ginzburg–Landau coefficients
Previous
Tau terms by hand
Copyright © 2026, Ruben Dahan and contributors
Made with Sphinx and @pradyunsg's Furo