diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index 52899cdb..46732cc9 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.10.4","generation_timestamp":"2024-08-20T23:11:52","documenter_version":"1.6.0"}} \ No newline at end of file +{"documenter":{"julia_version":"1.10.4","generation_timestamp":"2024-08-21T00:13:17","documenter_version":"1.6.0"}} \ No newline at end of file diff --git a/dev/api/index.html b/dev/api/index.html index 5d6edc32..50ee8ddf 100644 --- a/dev/api/index.html +++ b/dev/api/index.html @@ -1,3 +1,3 @@ -Library Reference · Decapodes.jl

Library Reference

Decapodes

Decapodes.compileMethod
compile(d::SummationDecapode, inputs::Vector{Symbol}, alloc_vectors::Vector{AllocVecCall}, optimizable_dec_operators::Set{Symbol}, dimension::Int, stateeltype::DataType, code_target::AbstractGenerationTarget, preallocate::Bool)

Function that compiles the computation body. d is the input Decapode, inputs is a vector of state variables and literals, alloc_vec should be empty when passed in, optimizable_dec_operators is a collection of all DEC operator symbols that can use special in-place methods, dimension is the dimension of the problem (usually 1 or 2), stateeltype is the type of the state elements (usually Float32 or Float64), code_target determines what architecture the code is compiled for (either CPU or CUDA), and preallocate which is set to true by default and determines if intermediate results can be preallocated..

source
Decapodes.compile_envMethod
compile_env(d::SummationDecapode, dec_matrices::Vector{Symbol}, con_dec_operators::Set{Symbol}, code_target::AbstractGenerationTarget)

This creates the symbol to function linking for the simulation output. Those run through the default_dec backend expect both an in-place and an out-of-place variant in that order. User defined operations only support out-of-place.

source
Decapodes.gensimMethod
gensim(user_d::SummationDecapode, input_vars::Vector{Symbol}; dimension::Int=2, stateeltype::DataType = Float64, code_target::AbstractGenerationTarget = CPUTarget(), preallocate::Bool = true)

Generates the entire code body for the simulation function. The returned simulation function can then be combined with a mesh, provided by CombinatorialSpaces, and a function describing symbol to operator mappings to return a simulator that can be used to solve the represented equations given initial conditions.

Arguments:

user_d: The user passed Decapode for which simulation code will be generated. (This is not modified)

input_vars is the collection of variables whose values are known at the beginning of the simulation. (Defaults to all state variables and literals in the Decapode)

Keyword arguments:

dimension: The dimension of the problem. (Defaults to 2)(Must be 1 or 2)

stateeltype: The element type of the state forms. (Defaults to Float64)(Must be Float32 or Float64)

code_target: The intended architecture target for the generated code. (Defaults to CPUTarget())(Use CUDATarget() for NVIDIA CUDA GPUs)

preallocate: Enables(true)/disables(false) pre-allocated caches for intermediate computations. Some functions, such as those that determine Jacobian sparsity patterns, or perform auto-differentiation, may require this to be disabled. (Defaults to true)

source
[ Info: Page built in 2 seconds.
-[ Info: This page was last built at 2024-08-20T23:01:50.864.
+Library Reference · Decapodes.jl

Library Reference

Decapodes

Decapodes.compileMethod
compile(d::SummationDecapode, inputs::Vector{Symbol}, alloc_vectors::Vector{AllocVecCall}, optimizable_dec_operators::Set{Symbol}, dimension::Int, stateeltype::DataType, code_target::AbstractGenerationTarget, preallocate::Bool)

Function that compiles the computation body. d is the input Decapode, inputs is a vector of state variables and literals, alloc_vec should be empty when passed in, optimizable_dec_operators is a collection of all DEC operator symbols that can use special in-place methods, dimension is the dimension of the problem (usually 1 or 2), stateeltype is the type of the state elements (usually Float32 or Float64), code_target determines what architecture the code is compiled for (either CPU or CUDA), and preallocate which is set to true by default and determines if intermediate results can be preallocated..

source
Decapodes.compile_envMethod
compile_env(d::SummationDecapode, dec_matrices::Vector{Symbol}, con_dec_operators::Set{Symbol}, code_target::AbstractGenerationTarget)

This creates the symbol to function linking for the simulation output. Those run through the default_dec backend expect both an in-place and an out-of-place variant in that order. User defined operations only support out-of-place.

source
Decapodes.gensimMethod
gensim(user_d::SummationDecapode, input_vars::Vector{Symbol}; dimension::Int=2, stateeltype::DataType = Float64, code_target::AbstractGenerationTarget = CPUTarget(), preallocate::Bool = true)

Generates the entire code body for the simulation function. The returned simulation function can then be combined with a mesh, provided by CombinatorialSpaces, and a function describing symbol to operator mappings to return a simulator that can be used to solve the represented equations given initial conditions.

Arguments:

user_d: The user passed Decapode for which simulation code will be generated. (This is not modified)

input_vars is the collection of variables whose values are known at the beginning of the simulation. (Defaults to all state variables and literals in the Decapode)

Keyword arguments:

dimension: The dimension of the problem. (Defaults to 2)(Must be 1 or 2)

stateeltype: The element type of the state forms. (Defaults to Float64)(Must be Float32 or Float64)

code_target: The intended architecture target for the generated code. (Defaults to CPUTarget())(Use CUDATarget() for NVIDIA CUDA GPUs)

preallocate: Enables(true)/disables(false) pre-allocated caches for intermediate computations. Some functions, such as those that determine Jacobian sparsity patterns, or perform auto-differentiation, may require this to be disabled. (Defaults to true)

source
[ Info: Page built in 2 seconds.
+[ Info: This page was last built at 2024-08-21T00:02:56.651.
diff --git a/dev/ascii/index.html b/dev/ascii/index.html index 6672ccf4..2af25468 100644 --- a/dev/ascii/index.html +++ b/dev/ascii/index.html @@ -1,3 +1,3 @@ ASCII Operators · Decapodes.jl

ASCII and Vector Calculus Operators

Some users may have trouble entering unicode characters like ⋆ or ∂ in their development environment. So, we offer the following ASCII equivalents. Further, some users may like to use vector calculus symbols instead of exterior calculus symbols where possible. We offer support for such symbols as well.

ASCII Equivalents

UnicodeASCIIMeaning
∂ₜdtderivative w.r.t. time
starHodge star, generalizing transpose
Δlapllaplacian
wedgewedge product, generalizing the cross product
⋆⁻¹star_invHodge star, generalizing transpose
∘(⋆,d,⋆)divdivergence, a.k.a. ∇⋅
avg₀₁avg_01average values stored on endpoints of edges

Vector Calculus Equivalents

VecDECHow to enter
graddgrad
div∘(⋆,d,⋆)div
curl∘(d,⋆)curl
d\nabla
∇ᵈ∘(⋆,d,⋆)\nabla \<tab\> \^d \<tab\>
∇x∘(d,⋆)\nabla \<tab\> x
adv(X,Y)∘(⋆,d,⋆)(X∧Y)adv
[ Info: Page built in 0 seconds.
-[ Info: This page was last built at 2024-08-20T23:01:51.013.
+[ Info: This page was last built at 2024-08-21T00:02:56.810. diff --git a/dev/bc/bc_debug/index.html b/dev/bc/bc_debug/index.html index 120d5936..5c6044d6 100644 --- a/dev/bc/bc_debug/index.html +++ b/dev/bc/bc_debug/index.html @@ -340,5 +340,5 @@ # Animation record(fig, "diff_adv_right.gif", range(0.0, 100.0; length=150); framerate = 30) do t pmsh.color = sol(t).C -end
"diff_adv_right.gif"

Diffusion-Advection result and your first BC Decapode!

[ Info: Page built in 102 seconds.
-[ Info: This page was last built at 2024-08-20T23:03:33.098.
+end
"diff_adv_right.gif"

Diffusion-Advection result and your first BC Decapode!

[ Info: Page built in 106 seconds.
+[ Info: This page was last built at 2024-08-21T00:04:43.004.
diff --git a/dev/bsh/budyko_sellers_halfar/index.html b/dev/bsh/budyko_sellers_halfar/index.html index bd5c6778..24389158 100644 --- a/dev/bsh/budyko_sellers_halfar/index.html +++ b/dev/bsh/budyko_sellers_halfar/index.html @@ -427,5 +427,5 @@ @show soln.retcode @info("Done")
[ Info: Solving
 soln.retcode = SciMLBase.ReturnCode.Success
-[ Info: Done

We can save the solution file to examine later.

@save "budyko_sellers_halfar.jld2" soln

Visualize

Quickly examine the final conditions for temperature:

lines(map(x -> x[1], point(s)), soln(tₑ).Tₛ)
Example block output

Quickly examine the final conditions for ice height:

lines(map(x -> x[1], point(s)), soln(tₑ).halfar_dynamics_h)
Example block output

BSH_Temperature

BSH_IceHeight

[ Info: Page built in 52 seconds.
-[ Info: This page was last built at 2024-08-20T23:04:25.358.
+[ Info: Done

We can save the solution file to examine later.

@save "budyko_sellers_halfar.jld2" soln

Visualize

Quickly examine the final conditions for temperature:

lines(map(x -> x[1], point(s)), soln(tₑ).Tₛ)
Example block output

Quickly examine the final conditions for ice height:

lines(map(x -> x[1], point(s)), soln(tₑ).halfar_dynamics_h)
Example block output

BSH_Temperature

BSH_IceHeight

[ Info: Page built in 54 seconds.
+[ Info: This page was last built at 2024-08-21T00:05:37.089.
diff --git a/dev/canon/index.html b/dev/canon/index.html index a5e0b840..29754f3c 100644 --- a/dev/canon/index.html +++ b/dev/canon/index.html @@ -3,37 +3,37 @@ (D, cosϕᵖ, cosϕᵈ)::Constant -HT == (D ./ cosϕᵖ) .* (⋆)(d(cosϕᵈ .* (⋆)(d(Tₛ))))source
Decapodes.Canon.Physics.:outgoing_longwave_radiationConstant

Outgoing Longwave Radiation

Source

Model

(Tₛ, OLR)::Form0
+HT == (D ./ cosϕᵖ) .* (⋆)(d(cosϕᵈ .* (⋆)(d(Tₛ))))
source
Decapodes.Canon.Physics.:outgoing_longwave_radiationConstant

Outgoing Longwave Radiation

Source

Model

(Tₛ, OLR)::Form0
               
 (A, B)::Constant
               
-OLR == A .+ B .* Tₛ
source
Decapodes.Canon.Physics.absorbed_shortwave_radiationConstant

Absorbed Shortwave Radiation

Source

The proportion of light reflected by a surface is the albedo. The absorbed shortwave radiation is the complement of this quantity.

Model

(Q, ASR)::Form0
+OLR == A .+ B .* Tₛ
source
Decapodes.Canon.Physics.absorbed_shortwave_radiationConstant

Absorbed Shortwave Radiation

Source

The proportion of light reflected by a surface is the albedo. The absorbed shortwave radiation is the complement of this quantity.

Model

(Q, ASR)::Form0
               
 α::Constant
               
-ASR == (1 .- α) .* Q
source
Decapodes.Canon.Physics.advectionConstant

Advection

Source

Advection refers to the transport of a bulk along a vector field.

Model

C::Form0
+ASR == (1 .- α) .* Q
source
Decapodes.Canon.Physics.advectionConstant

Advection

Source

Advection refers to the transport of a bulk along a vector field.

Model

C::Form0
               
 (ϕ, V)::Form1
               
-ϕ == C ∧₀₁ V
source
Decapodes.Canon.Physics.ficks_lawConstant

Ficks Law

Source

Equation for diffusion first stated by Adolf Fick. The diffusion flux is proportional to the concentration gradient.

Model

C::Form0
+ϕ == C ∧₀₁ V
source
Decapodes.Canon.Physics.ficks_lawConstant

Ficks Law

Source

Equation for diffusion first stated by Adolf Fick. The diffusion flux is proportional to the concentration gradient.

Model

C::Form0
               
 ϕ::Form1
               
-ϕ == k(d₀(C))
source
Decapodes.Canon.Physics.iceblockingwaterConstant

IceBlockingWater

Source

Model

h::Form0
+ϕ == k(d₀(C))
source
Decapodes.Canon.Physics.iceblockingwaterConstant

IceBlockingWater

Source

Model

h::Form0
               
 (𝐮, w)::DualForm1
               
-w == (1 - σ(h)) ∧ᵖᵈ₀₁ 𝐮
source
Decapodes.Canon.Physics.jko_schemeConstant

Jordan-Kinderlehrer-Otto

Source

Jordan, R., Kinderlehrer, D., & Otto, F. (1998). The Variational Formulation of the Fokker–Planck Equation. In SIAM Journal on Mathematical Analysis (Vol. 29, Issue 1, pp. 1–17). Society for Industrial & Applied Mathematics (SIAM). https://doi.org/10.1137/s0036141096303359

Model

(ρ, Ψ)::Form0
+w == (1 - σ(h)) ∧ᵖᵈ₀₁ 𝐮
source
Decapodes.Canon.Physics.jko_schemeConstant

Jordan-Kinderlehrer-Otto

Source

Jordan, R., Kinderlehrer, D., & Otto, F. (1998). The Variational Formulation of the Fokker–Planck Equation. In SIAM Journal on Mathematical Analysis (Vol. 29, Issue 1, pp. 1–17). Society for Industrial & Applied Mathematics (SIAM). https://doi.org/10.1137/s0036141096303359

Model

(ρ, Ψ)::Form0
               
 β⁻¹::Constant
               
-∂ₜ(ρ) == (∘(⋆, d, ⋆))(d(Ψ) ∧ ρ) + β⁻¹ * Δ(ρ)
source
Decapodes.Canon.Physics.lieConstant

Lie

Source

Model

C::Form0
+∂ₜ(ρ) == (∘(⋆, d, ⋆))(d(Ψ) ∧ ρ) + β⁻¹ * Δ(ρ)
source
Decapodes.Canon.Physics.lieConstant

Lie

Source

Model

C::Form0
               
 V::Form1
               
 dX::Form1
               
-V == ((⋆) ∘ (⋆))(C ∧ dX)
source
Decapodes.Canon.Physics.mohamed_flowConstant

Mohamed Eq. 10, N2

Source

Model

(𝐮, w)::DualForm1
+V == ((⋆) ∘ (⋆))(C ∧ dX)
source
Decapodes.Canon.Physics.mohamed_flowConstant

Mohamed Eq. 10, N2

Source

Model

(𝐮, w)::DualForm1
               
 (P, 𝑝ᵈ)::DualForm0
               
@@ -41,7 +41,7 @@
               
 𝑝ᵈ == P + 0.5 * ι₁₁(w, w)
               
-∂ₜ(𝐮) == μ * (∘(d, ⋆, d, ⋆))(w) + -1 * (⋆₁⁻¹)(w ∧ᵈᵖ₁₀ (⋆)(d(w))) + d(𝑝ᵈ)
source
Decapodes.Canon.Physics.momentumConstant

Momentum

Source

Model

(f, b)::Form0
+∂ₜ(𝐮) == μ * (∘(d, ⋆, d, ⋆))(w) + -1 * (⋆₁⁻¹)(w ∧ᵈᵖ₁₀ (⋆)(d(w))) + d(𝑝ᵈ)
source
Decapodes.Canon.Physics.momentumConstant

Momentum

Source

Model

(f, b)::Form0
               
 (v, V, g, Fᵥ, uˢ, v_up)::Form1
               
@@ -53,7 +53,7 @@
               
 v_up == (((((((-1 * L(v, v) - L(V, v)) - L(v, V)) - f ∧ v) - (∘(⋆, d, ⋆))(uˢ) ∧ v) - d(p)) + b ∧ g) - (∘(⋆, d, ⋆))(τ)) + uˢ̇ + Fᵥ
               
-uˢ̇ == force(U)
source
Decapodes.Canon.Physics.navier_stokesConstant

Navier-Stokes

Source

Partial differential equations which describe the motion of viscous fluid surfaces.

Model

(V, V̇, G)::Form1{X}
+uˢ̇ == force(U)
source
Decapodes.Canon.Physics.navier_stokesConstant

Navier-Stokes

Source

Partial differential equations which describe the motion of viscous fluid surfaces.

Model

(V, V̇, G)::Form1{X}
               
 (ρ, ṗ, p)::Form0{X}
               
@@ -63,7 +63,7 @@
               
 ṗ == neg₀((⋆₀⁻¹)(L₀(V, (⋆₀)(p))))
               
-∂ₜ(p) == ṗ
source
Decapodes.Canon.Physics.oscillatorConstant

Oscillator

Source

Equation governing the motion of an object whose acceleration is negatively-proportional to its position.

Model

X::Form0
+∂ₜ(p) == ṗ
source
Decapodes.Canon.Physics.oscillatorConstant

Oscillator

Source

Equation governing the motion of an object whose acceleration is negatively-proportional to its position.

Model

X::Form0
               
 V::Form0
               
@@ -71,7 +71,7 @@
               
 ∂ₜ(X) == V
               
-∂ₜ(V) == -k * X
source
Decapodes.Canon.Physics.poiseuilleConstant

Poiseuille

Source

A relation between the pressure drop in an incompressible and Newtownian fluid in laminar flow flowing through a long cylindrical pipe.

Model

P::Form0
+∂ₜ(V) == -k * X
source
Decapodes.Canon.Physics.poiseuilleConstant

Poiseuille

Source

A relation between the pressure drop in an incompressible and Newtownian fluid in laminar flow flowing through a long cylindrical pipe.

Model

P::Form0
               
 q::Form1
               
@@ -83,7 +83,7 @@
               
 ∂ₜ(q) == q̇
               
-q̇ == μ̃ * ∂q(Δq) + ∇P + R * q
source
Decapodes.Canon.Physics.poiseuille_densityConstant

Poiseuille Density

Source

Model

q::Form1
+q̇ == μ̃ * ∂q(Δq) + ∇P + R * q
source
Decapodes.Canon.Physics.poiseuille_densityConstant

Poiseuille Density

Source

Model

q::Form1
               
 (P, ρ)::Form0
               
@@ -101,13 +101,13 @@
               
 ρ_up == (∘(⋆, d, ⋆))(-1 * (ρ ∧₀₁ q))
               
-ρ̇ == ∂ρ(ρ_up)
source
Decapodes.Canon.Physics.schroedingerConstant

Schroedinger

Source

The evolution of the wave function over time.

Model

(i, h, m)::Constant
+ρ̇ == ∂ρ(ρ_up)
source
Decapodes.Canon.Physics.schroedingerConstant

Schroedinger

Source

The evolution of the wave function over time.

Model

(i, h, m)::Constant
               
 V::Parameter
               
 Ψ::Form0
               
-∂ₜ(Ψ) == (((-1 * h ^ 2) / (2m)) * Δ(Ψ) + V * Ψ) / (i * h)
source
Decapodes.Canon.Physics.superpositionConstant

Superposition

Source

Model

(C, Ċ)::Form0
+∂ₜ(Ψ) == (((-1 * h ^ 2) / (2m)) * Δ(Ψ) + V * Ψ) / (i * h)
source
Decapodes.Canon.Physics.superpositionConstant

Superposition

Source

Model

(C, Ċ)::Form0
               
 (ϕ, ϕ₁, ϕ₂)::Form1
               
@@ -115,7 +115,7 @@
               
 Ċ == (⋆₀⁻¹)(dual_d₁((⋆₁)(ϕ)))
               
-∂ₜ(C) == Ċ
source

Chemistry

Decapodes.Canon.Chemistry.GrayScottConstant

Gray-Scott

Source

A model of reaction-diffusion

Model

(U, V)::Form0
+∂ₜ(C) == Ċ
source

Chemistry

Decapodes.Canon.Chemistry.GrayScottConstant

Gray-Scott

Source

A model of reaction-diffusion

Model

(U, V)::Form0
               
 UV2::Form0
               
@@ -131,7 +131,7 @@
               
 ∂ₜ(U) == U̇
               
-∂ₜ(V) == V̇
source
Decapodes.Canon.Chemistry.brusselatorConstant

Brusselator

Source

A model of reaction-diffusion for an oscillatory chemical system.

Model

(U, V)::Form0
+∂ₜ(V) == V̇
source
Decapodes.Canon.Chemistry.brusselatorConstant

Brusselator

Source

A model of reaction-diffusion for an oscillatory chemical system.

Model

(U, V)::Form0
               
 U2V::Form0
               
@@ -149,33 +149,33 @@
               
 ∂ₜ(U) == U̇
               
-∂ₜ(V) == V̇
source

Biology

Decapodes.Canon.Biology.kealyConstant

Kealy

Source

Model

(n, w)::DualForm0
+∂ₜ(V) == V̇
source

Biology

Decapodes.Canon.Biology.kealyConstant

Kealy

Source

Model

(n, w)::DualForm0
               
 dX::Form1
               
 (a, ν)::Constant
               
-∂ₜ(w) == ((a - w) - w * n ^ 2) + ν * Δ(w)
source
Decapodes.Canon.Biology.klausmeier_2aConstant

Klausmeier (Eq. 2a)

Source

Klausmeier, CA. “Regular and irregular patterns in semiarid vegetation.” Science (New York, N.Y.) vol. 284,5421 (1999): 1826-8. doi:10.1126/science.284.5421.1826

Model

(n, w)::DualForm0
+∂ₜ(w) == ((a - w) - w * n ^ 2) + ν * Δ(w)
source
Decapodes.Canon.Biology.klausmeier_2aConstant

Klausmeier (Eq. 2a)

Source

Klausmeier, CA. “Regular and irregular patterns in semiarid vegetation.” Science (New York, N.Y.) vol. 284,5421 (1999): 1826-8. doi:10.1126/science.284.5421.1826

Model

(n, w)::DualForm0
               
 dX::Form1
               
 (a, ν)::Constant
               
-∂ₜ(w) == ((a - w) - w * n ^ 2) + ν * ℒ(dX, w)
source
Decapodes.Canon.Biology.klausmeier_2bConstant

Klausmeier (Eq. 2b)

Source

ibid.

Model

(n, w)::DualForm0
+∂ₜ(w) == ((a - w) - w * n ^ 2) + ν * ℒ(dX, w)
source
Decapodes.Canon.Biology.klausmeier_2bConstant

Klausmeier (Eq. 2b)

Source

ibid.

Model

(n, w)::DualForm0
               
 m::Constant
               
-∂ₜ(n) == (w * n ^ 2 - m * n) + Δ(n)
source
Decapodes.Canon.Biology.lejeuneConstant

Lejeune

Source

Lejeune, O., & Tlidi, M. (1999). A Model for the Explanation of Vegetation Stripes (Tiger Bush). Journal of Vegetation Science, 10(2), 201–208. https://doi.org/10.2307/3237141

Model

ρ::Form0
+∂ₜ(n) == (w * n ^ 2 - m * n) + Δ(n)
source
Decapodes.Canon.Biology.lejeuneConstant

Lejeune

Source

Lejeune, O., & Tlidi, M. (1999). A Model for the Explanation of Vegetation Stripes (Tiger Bush). Journal of Vegetation Science, 10(2), 201–208. https://doi.org/10.2307/3237141

Model

ρ::Form0
               
 (μ, Λ, L)::Constant
               
-∂ₜ(ρ) == (ρ * (((1 - μ) + (Λ - 1) * ρ) - ρ * ρ) + 0.5 * (L * L - ρ) * Δ(ρ)) - 0.125 * ρ * Δ(ρ) * Δ(ρ)
source
Decapodes.Canon.Biology.turing_continuous_ringConstant

Turing Continuous Ring

Source

Model

(X, Y)::Form0
+∂ₜ(ρ) == (ρ * (((1 - μ) + (Λ - 1) * ρ) - ρ * ρ) + 0.5 * (L * L - ρ) * Δ(ρ)) - 0.125 * ρ * Δ(ρ) * Δ(ρ)
source
Decapodes.Canon.Biology.turing_continuous_ringConstant

Turing Continuous Ring

Source

Model

(X, Y)::Form0
               
 (μ, ν, a, b, c, d)::Constant
               
 ∂ₜ(X) == a * X + b * Y + μ * Δ(X)
               
-∂ₜ(Y) == c * X + d * Y + ν * Δ(X)
source

Environment

Decapodes.Canon.Environment.boundary_conditionsConstant

Boundary Conditions

Source

Model

(S, T)::Form0
+∂ₜ(Y) == c * X + d * Y + ν * Δ(X)
source

Environment

Decapodes.Canon.Environment.boundary_conditionsConstant

Boundary Conditions

Source

Model

(S, T)::Form0
               
 (Ṡ, T_up)::Form0
               
@@ -191,37 +191,37 @@
               
 Ṫ == ∂_spatial(T_up)
               
-v̇ == ∂_noslip(v_up)
source
Decapodes.Canon.Environment.energy_balanceConstant

Energy balance

Source

energy balance equation from Budyko Sellers

Model

(Tₛ, ASR, OLR, HT)::Form0
+v̇ == ∂_noslip(v_up)
source
Decapodes.Canon.Environment.energy_balanceConstant

Energy balance

Source

energy balance equation from Budyko Sellers

Model

(Tₛ, ASR, OLR, HT)::Form0
               
 C::Constant
               
 Tₛ̇ == ∂ₜ(Tₛ)
               
-Tₛ̇ == ((ASR - OLR) + HT) ./ C
source
Decapodes.Canon.Environment.equation_of_stateConstant

Equation of State

Source

Model

(b, T, S)::Form0
+Tₛ̇ == ((ASR - OLR) + HT) ./ C
source
Decapodes.Canon.Environment.equation_of_stateConstant

Equation of State

Source

Model

(b, T, S)::Form0
               
 (g, α, β)::Constant
               
-b == g * (α * T - β * S)
source
Decapodes.Canon.Environment.glenConstant

Glens Law

Source

Nye, J. F. (1957). The Distribution of Stress and Velocity in Glaciers and Ice-Sheets. Proceedings of the Royal Society of London. Series A, Mathematical and Physical Sciences, 239(1216), 113–133. http://www.jstor.org/stable/100184

Model

Γ::Form1
+b == g * (α * T - β * S)
source
Decapodes.Canon.Environment.glenConstant

Glens Law

Source

Nye, J. F. (1957). The Distribution of Stress and Velocity in Glaciers and Ice-Sheets. Proceedings of the Royal Society of London. Series A, Mathematical and Physical Sciences, 239(1216), 113–133. http://www.jstor.org/stable/100184

Model

Γ::Form1
               
 (A, ρ, g, n)::Constant
               
-Γ == (2 / (n + 2)) * A * (ρ * g) ^ n
source
Decapodes.Canon.Environment.halfar_eq2Constant

Halfar (Eq. 2)

Source

Halfar, P. (1981), On the dynamics of the ice sheets, J. Geophys. Res., 86(C11), 11065–11072, doi:10.1029/JC086iC11p11065

Model

h::Form0
+Γ == (2 / (n + 2)) * A * (ρ * g) ^ n
source
Decapodes.Canon.Environment.halfar_eq2Constant

Halfar (Eq. 2)

Source

Halfar, P. (1981), On the dynamics of the ice sheets, J. Geophys. Res., 86(C11), 11065–11072, doi:10.1029/JC086iC11p11065

Model

h::Form0
               
 Γ::Form1
               
 n::Constant
               
-∂ₜ(h) == (∘(⋆, d, ⋆))(((Γ * d(h)) ∧ mag(♯(d(h))) ^ (n - 1)) ∧ h ^ (n + 2))
source
Decapodes.Canon.Environment.insolationConstant

Insolation

Source

Model

Q::Form0
+∂ₜ(h) == (∘(⋆, d, ⋆))(((Γ * d(h)) ∧ mag(♯(d(h))) ^ (n - 1)) ∧ h ^ (n + 2))
source
Decapodes.Canon.Environment.insolationConstant

Insolation

Source

Model

Q::Form0
               
 cosϕᵖ::Constant
               
-Q == 450cosϕᵖ
source
Decapodes.Canon.Environment.tracerConstant

Tracer

Source

Model

(c, C, F, c_up)::Form0
+Q == 450cosϕᵖ
source
Decapodes.Canon.Environment.tracerConstant

Tracer

Source

Model

(c, C, F, c_up)::Form0
               
 (v, V, q)::Form1
               
-c_up == (((-1 * (⋆)(L(v, (⋆)(c))) - (⋆)(L(V, (⋆)(c)))) - (⋆)(L(v, (⋆)(C)))) - (∘(⋆, d, ⋆))(q)) + F
source
Decapodes.Canon.Environment.warmingConstant

Warming

Source

Model

Tₛ::Form0
+c_up == (((-1 * (⋆)(L(v, (⋆)(c))) - (⋆)(L(V, (⋆)(c)))) - (⋆)(L(v, (⋆)(C)))) - (∘(⋆, d, ⋆))(q)) + F
source
Decapodes.Canon.Environment.warmingConstant

Warming

Source

Model

Tₛ::Form0
               
 A::Form1
               
-A == avg₀₁(5.8282 * 10 ^ (-0.236Tₛ) * 1.65e7)
source
[ Info: Page built in 0 seconds.
-[ Info: This page was last built at 2024-08-20T23:04:25.405.
+A == avg₀₁(5.8282 * 10 ^ (-0.236Tₛ) * 1.65e7)source
[ Info: Page built in 0 seconds.
+[ Info: This page was last built at 2024-08-21T00:05:37.141.
diff --git a/dev/ch/cahn-hilliard/index.html b/dev/ch/cahn-hilliard/index.html index 238d7b5b..a05ada0e 100644 --- a/dev/ch/cahn-hilliard/index.html +++ b/dev/ch/cahn-hilliard/index.html @@ -31,5 +31,5 @@ fₘ = sim(sd, nothing, DiagonalHodge());
(::Main.var"#f#5"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}}) (generic function with 1 method)

Getting the Solution

Now that everything is set up and ready, we can solve the equation. We run the simulation for 200 time units to see the long-term evolution of the fluid. Note we only save the solution at intervals of 0.1 time units in order to reduce the memory-footprint of the solve.

tₑ = 200
 prob = ODEProblem(fₘ, u₀, (0, tₑ), constants)
 soln = solve(prob, Tsit5(), saveat=0.1);
-soln.retcode
ReturnCode.Success = 1

And we can see the result as a gif.

"CahnHilliardRes"

[ Info: Page built in 185 seconds.
-[ Info: This page was last built at 2024-08-20T23:07:30.537.
+soln.retcode
ReturnCode.Success = 1

And we can see the result as a gif.

"CahnHilliardRes"

[ Info: Page built in 186 seconds.
+[ Info: This page was last built at 2024-08-21T00:08:43.170.
diff --git a/dev/cism/cism/index.html b/dev/cism/cism/index.html index 4fe50a55..268f96e2 100644 --- a/dev/cism/cism/index.html +++ b/dev/cism/cism/index.html @@ -204,14 +204,14 @@ [ Info: Done

We can benchmark the compiled simulation with @benchmarkable. This macro runs many samples of the simulation function so we get an accurate estimate of the simulation time. The simulation time is quite fast compared to the CISM benchmarks. These results are run automatically via GitHub Actions as part of our docs build, which is not optimized for numerical simulations.

# Time the simulation
 
 b = @benchmarkable solve(prob, Tsit5(), saveat=0.1)
-c = run(b)
BenchmarkTools.Trial: 176 samples with 1 evaluation.
- Range (minmax):  25.997 ms57.136 ms   GC (min … max): 0.00% … 11.39%
- Time  (median):     26.487 ms               GC (median):    0.00%
- Time  (mean ± σ):   28.160 ms ±  4.986 ms   GC (mean ± σ):  2.50% ±  5.96%
+c = run(b)
BenchmarkTools.Trial: 174 samples with 1 evaluation.
+ Range (minmax):  26.578 ms52.454 ms   GC (min … max): 0.00% … 0.00%
+ Time  (median):     26.875 ms               GC (median):    0.00%
+ Time  (mean ± σ):   28.405 ms ±  3.851 ms   GC (mean ± σ):  2.85% ± 6.72%
 
-  █             ▁                                             
-  █▇▄▁▁▁▁▄▁▁▄▁▄█▇▄▁▁▄▁▁▁▁▄▁▁▄▁▁▄▄▁▄▁▁▄▁▁▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▄ ▄
-  26 ms        Histogram: log(frequency) by time      53.1 ms <
+  █                                                      
+  ██▆▁▁▄▁▁▁▄▁▁▁▄▁▄▁▁▁▁▁▁▁▁▁▁▁▇▆▆▇▆▆▁▄▁▁▁▁▆▁▁▄▁▁▁▁▁▁▄▁▁▁▁▁▁▄ ▄
+  26.6 ms      Histogram: log(frequency) by time      42.1 ms <
 
  Memory estimate: 71.44 MiB, allocs estimate: 5198.

Here we save the solution information to a file.

@save "ice_dynamics2D.jld2" soln

We recall that these dynamics are of the "shallow slope" and "shallow ice" approximations. So, at the edge of our parabolic dome of ice, we expect increased error as the slope increases. On the interior of the dome, we expect the dynamics to match more closely that given by the analytic model. We will see that the CISM results likewise accumulate error in the same neighborhood.

"Halfar Small Ice Approximation Quote"

# Plot the final conditions
 function plot_final_conditions()
@@ -270,5 +270,5 @@
   record(fig, "ice_dynamics_cism.gif", range(0.0, tₑ; length=frames); framerate = 30) do t
     msh.color = soln(t).dynamics_h
   end
-end
"ice_dynamics_cism.gif"

"Ice Dynamics

For comparison's sake, we paste the results produced by CISM below. We observe that the error likewise accumulates around the edge of the dome, with more accurate predictions on the interior. We note that our simulation produces slight over-estimates on the interior, but there are further strategies that one can employ to increase accuracy, such as tweaking the error tolerance of the solver, and so on.

Not that since the DEC is based on triangulated meshes, the "resolution" of the CISM benchmark and the Decapodes implementation cannot be directly compared. An advantage of the DEC is that we do not need to operate on uniform grids. For example, you could construct a mesh that is finer along the dome edge, where you need more resolution, and coarser as you are farther away from the reach of the ice.

CISM Results

We saw in this document how to create performant and accurate simulations in the Decapodes framework, and compared against the CISM library . Although we do not expect to be both more performant and accurate compared to every hand-crafted simulation, Decapodes makes up for this difference in terms of development time, flexibility, and composition. For example, the original implementation of the Decapodes shallow ice model took place over a couple of afternoons.

Since Decapodes targets high-level representations of physics, it is uniquely suited to incorporating knowledge from subject matter experts to increase simulation accuracy. This process does not require an ice dynamics expert to edit physics equations that have already been weaved into solver code.

Further improvements to the Decapodes library are made continuously. We are creating implementations of DEC operators that are constructed and execute faster. And we are in the beginning stages of 3D simulations using the DEC.

[ Info: Page built in 31 seconds.
-[ Info: This page was last built at 2024-08-20T23:08:01.940.
+end
"ice_dynamics_cism.gif"

"Ice Dynamics

For comparison's sake, we paste the results produced by CISM below. We observe that the error likewise accumulates around the edge of the dome, with more accurate predictions on the interior. We note that our simulation produces slight over-estimates on the interior, but there are further strategies that one can employ to increase accuracy, such as tweaking the error tolerance of the solver, and so on.

Not that since the DEC is based on triangulated meshes, the "resolution" of the CISM benchmark and the Decapodes implementation cannot be directly compared. An advantage of the DEC is that we do not need to operate on uniform grids. For example, you could construct a mesh that is finer along the dome edge, where you need more resolution, and coarser as you are farther away from the reach of the ice.

CISM Results

We saw in this document how to create performant and accurate simulations in the Decapodes framework, and compared against the CISM library . Although we do not expect to be both more performant and accurate compared to every hand-crafted simulation, Decapodes makes up for this difference in terms of development time, flexibility, and composition. For example, the original implementation of the Decapodes shallow ice model took place over a couple of afternoons.

Since Decapodes targets high-level representations of physics, it is uniquely suited to incorporating knowledge from subject matter experts to increase simulation accuracy. This process does not require an ice dynamics expert to edit physics equations that have already been weaved into solver code.

Further improvements to the Decapodes library are made continuously. We are creating implementations of DEC operators that are constructed and execute faster. And we are in the beginning stages of 3D simulations using the DEC.

[ Info: Page built in 34 seconds.
+[ Info: This page was last built at 2024-08-21T00:09:17.528.
diff --git a/dev/equations/equations/index.html b/dev/equations/equations/index.html index a07a011f..5b8a143a 100644 --- a/dev/equations/equations/index.html +++ b/dev/equations/equations/index.html @@ -992,4 +992,4 @@ '/>

Often you will have a linear material where you are scaling by a constant, and a nonlinear version of that material where that scaling is replaced by a generic nonlinear function. This is why we allow Decapodes to represent both of these types of equations.

[ Info: Page built in 1 second.
-[ Info: This page was last built at 2024-08-20T23:08:03.088.
+[ Info: This page was last built at 2024-08-21T00:09:18.929. diff --git a/dev/grigoriev/grigoriev/index.html b/dev/grigoriev/grigoriev/index.html index eb883914..63ec3fb8 100644 --- a/dev/grigoriev/grigoriev/index.html +++ b/dev/grigoriev/grigoriev/index.html @@ -127,5 +127,5 @@ @save "grigoriev.jld2" soln
[ Info: Solving Grigoriev Ice Cap
 soln.retcode = SciMLBase.ReturnCode.Success
-[ Info: Done

Results and Discussion

We observe the usual Halfar model phenomena of ice "melting". Note that since the "shallow slope" approximation does not hold on the boundaries (due to the so-called "ice cliffs" described in the Van Tricht et al. paper), we do not expect the "creep" effect to be physical in this region of the domain. Rather, the Halfar model's predictive power is tuned for the interiors of ice caps and glaciers. Note that we also assume here that the bedrock that the ice rests on is flat. We may in further documents demonstrate how to use topographic data from Digital Elevation Models to inform the elevation of points in the mesh itself.

Grigoriev_ICs

Grigoriev_FCs

Grigoriev_Dynamics

[ Info: Page built in 33 seconds.
-[ Info: This page was last built at 2024-08-20T23:08:36.191.
+[ Info: Done

Results and Discussion

We observe the usual Halfar model phenomena of ice "melting". Note that since the "shallow slope" approximation does not hold on the boundaries (due to the so-called "ice cliffs" described in the Van Tricht et al. paper), we do not expect the "creep" effect to be physical in this region of the domain. Rather, the Halfar model's predictive power is tuned for the interiors of ice caps and glaciers. Note that we also assume here that the bedrock that the ice rests on is flat. We may in further documents demonstrate how to use topographic data from Digital Elevation Models to inform the elevation of points in the mesh itself.

Grigoriev_ICs

Grigoriev_FCs

Grigoriev_Dynamics

[ Info: Page built in 36 seconds.
+[ Info: This page was last built at 2024-08-21T00:09:54.830.
diff --git a/dev/halmo/halmo/index.html b/dev/halmo/halmo/index.html index 3d3c1baf..53e68367 100644 --- a/dev/halmo/halmo/index.html +++ b/dev/halmo/halmo/index.html @@ -336,5 +336,5 @@ record(fig, "halmo_ice.gif", range(0.0, tₑ; length=frames); framerate = 20) do t msh.color = soln(t).ice_thickness end -end
"halmo_ice.gif"

HalfarMohamedIce

[ Info: Page built in 43 seconds.
-[ Info: This page was last built at 2024-08-20T23:09:19.691.
+end
"halmo_ice.gif"

HalfarMohamedIce

[ Info: Page built in 46 seconds.
+[ Info: This page was last built at 2024-08-21T00:10:41.264.
diff --git a/dev/ice_dynamics/ice_dynamics/index.html b/dev/ice_dynamics/ice_dynamics/index.html index 220613d0..87491c34 100644 --- a/dev/ice_dynamics/ice_dynamics/index.html +++ b/dev/ice_dynamics/ice_dynamics/index.html @@ -310,5 +310,5 @@ record(fig, "ice_dynamics2D_sphere.gif", range(0.0, tₑ/64; length=frames); framerate = 20) do t msh.color = soln(t).dynamics_h end -end
"ice_dynamics2D_sphere.gif"

IceDynamics2DSphere

[ Info: Page built in 49 seconds.
-[ Info: This page was last built at 2024-08-20T23:10:08.791.
+end
"ice_dynamics2D_sphere.gif"

IceDynamics2DSphere

[ Info: Page built in 53 seconds.
+[ Info: This page was last built at 2024-08-21T00:11:34.511.
diff --git a/dev/index.html b/dev/index.html index f8b3efa5..9edda4be 100644 --- a/dev/index.html +++ b/dev/index.html @@ -1,2 +1,2 @@ -Decapodes.jl · Decapodes.jl

Decapodes.jl

Decapodes.jl is a framework for developing, composing, and simulating physical systems.

Decapodes.jl is the synthesis of Applied Category Theory (ACT) techniques for formalizing and composing physics equations, and Discrete Exterior Calculus (DEC) techniques for formalizing differential operators. CombinatorialSpaces.jl hosts tools for discretizing space and defining DEC operators on simplicial complexes, and DiagrammaticEquations.jl hosts tooling for representing the equations as formal ACT diagrams. This repository combines these two packages, compiling diagrams down to runnable simulation code.

By combining the power of ACT and the DEC, we seek to improve the scientific computing workflow. Decapodes simulations are hierarchically composable, generalize over any type of manifold, and are performant and accurate with a declarative domain specific language (DSL) that is human-readable.

Grigoriev Ice Cap Dynamics

Getting started

Walkthroughs creating, composing, and solving Decapodes are available in the side-bar of this documentation page. Further example scripts are available in the examples folder of the Decapodes.jl GitHub repo, and will be added to this documentation site soon.

Under Active Development

This library is currently under active development, and so is not yet at a point where a constant API/behavior can be assumed. That being said, if this project looks interesting/relevant please contact us and let us know!

+Decapodes.jl · Decapodes.jl

Decapodes.jl

Decapodes.jl is a framework for developing, composing, and simulating physical systems.

Decapodes.jl is the synthesis of Applied Category Theory (ACT) techniques for formalizing and composing physics equations, and Discrete Exterior Calculus (DEC) techniques for formalizing differential operators. CombinatorialSpaces.jl hosts tools for discretizing space and defining DEC operators on simplicial complexes, and DiagrammaticEquations.jl hosts tooling for representing the equations as formal ACT diagrams. This repository combines these two packages, compiling diagrams down to runnable simulation code.

By combining the power of ACT and the DEC, we seek to improve the scientific computing workflow. Decapodes simulations are hierarchically composable, generalize over any type of manifold, and are performant and accurate with a declarative domain specific language (DSL) that is human-readable.

Grigoriev Ice Cap Dynamics

Getting started

Walkthroughs creating, composing, and solving Decapodes are available in the side-bar of this documentation page. Further example scripts are available in the examples folder of the Decapodes.jl GitHub repo, and will be added to this documentation site soon.

Under Active Development

This library is currently under active development, and so is not yet at a point where a constant API/behavior can be assumed. That being said, if this project looks interesting/relevant please contact us and let us know!

diff --git a/dev/klausmeier/klausmeier/index.html b/dev/klausmeier/klausmeier/index.html index 98ddac6e..3ec74091 100644 --- a/dev/klausmeier/klausmeier/index.html +++ b/dev/klausmeier/klausmeier/index.html @@ -157,5 +157,5 @@ time[] = t end end -save_dynamics(:N, 20, "klausmeier.gif")
"klausmeier.gif"

Klausmeier

We can observe a few interesting phenomena that we wanted to capture:

Conclusion

Due to the ease of composition of Decapodes, representing the Klausmeier model opens up many areas for future work. For example, we can now compose these dynamics with a model of temperature dynamics informed by the Budyko-Sellers model. We can take advantage of the fact that the Lie derivative generalizes partial derivatives, and model the flow of water according to any vector field. Or, we can extend this model by composing it with a model that can recreate the so-called "leopard pattern" of vegetation, such as an "Interaction-Dispersion" model of vegetation dynamics given by Lejeune et al[4].

References

[1] W. A. Macfadyen, “Vegetation Patterns in the Semi-Desert Plains of British Somaliland,” The Geographical Journal, vol. 116, no. 4/6, p. 199, Oct. 1950, doi: 10.2307/1789384.

[2] C. A. Klausmeier, “Regular and Irregular Patterns in Semiarid Vegetation,” Science, vol. 284, no. 5421, pp. 1826–1828, Jun. 1999, doi: 10.1126/science.284.5421.1826.

[3] W. A. Macfadyen, “Soil and Vegetation in British Somaliland,” Nature, vol. 165, no. 4186, Art. no. 4186, Jan. 1950, doi: 10.1038/165121a0.

[4] O. Lejeune and M. Tlidi, “A Model for the Explanation of Vegetation Stripes (Tiger Bush),” Journal of Vegetation Science, vol. 10, no. 2, pp. 201–208, 1999, doi: 10.2307/3237141.

[ Info: Page built in 26 seconds.
-[ Info: This page was last built at 2024-08-20T23:10:35.121.
+save_dynamics(:N, 20, "klausmeier.gif")
"klausmeier.gif"

Klausmeier

We can observe a few interesting phenomena that we wanted to capture:

Conclusion

Due to the ease of composition of Decapodes, representing the Klausmeier model opens up many areas for future work. For example, we can now compose these dynamics with a model of temperature dynamics informed by the Budyko-Sellers model. We can take advantage of the fact that the Lie derivative generalizes partial derivatives, and model the flow of water according to any vector field. Or, we can extend this model by composing it with a model that can recreate the so-called "leopard pattern" of vegetation, such as an "Interaction-Dispersion" model of vegetation dynamics given by Lejeune et al[4].

References

[1] W. A. Macfadyen, “Vegetation Patterns in the Semi-Desert Plains of British Somaliland,” The Geographical Journal, vol. 116, no. 4/6, p. 199, Oct. 1950, doi: 10.2307/1789384.

[2] C. A. Klausmeier, “Regular and Irregular Patterns in Semiarid Vegetation,” Science, vol. 284, no. 5421, pp. 1826–1828, Jun. 1999, doi: 10.1126/science.284.5421.1826.

[3] W. A. Macfadyen, “Soil and Vegetation in British Somaliland,” Nature, vol. 165, no. 4186, Art. no. 4186, Jan. 1950, doi: 10.1038/165121a0.

[4] O. Lejeune and M. Tlidi, “A Model for the Explanation of Vegetation Stripes (Tiger Bush),” Journal of Vegetation Science, vol. 10, no. 2, pp. 201–208, 1999, doi: 10.2307/3237141.

[ Info: Page built in 27 seconds.
+[ Info: This page was last built at 2024-08-21T00:12:01.386.
diff --git a/dev/navier_stokes/ns/index.html b/dev/navier_stokes/ns/index.html index 7719100b..1dfa4e62 100644 --- a/dev/navier_stokes/ns/index.html +++ b/dev/navier_stokes/ns/index.html @@ -12,4 +12,4 @@ gcd = great_circle_dist(pnt,cntr) p.τ / (cosh(3gcd/p.a)^2) end

Based on the configuration, you can see different results that match the expected solutions from the literature.

Here is one set of results from using the inviscid Poisson formulation:

Vorticity

We can visualize the distribution of vorticity at the $\theta = 0.4$ latitude. The difference between the distributions at $t=0$ and $t=12$ is accumulated error.

Azimuth Profile

[ Info: Page built in 0 seconds.
-[ Info: This page was last built at 2024-08-20T23:10:35.162.
+[ Info: This page was last built at 2024-08-21T00:12:01.427. diff --git a/dev/nhs/nhs_lite/index.html b/dev/nhs/nhs_lite/index.html index b3723d91..f01d3135 100644 --- a/dev/nhs/nhs_lite/index.html +++ b/dev/nhs/nhs_lite/index.html @@ -504,5 +504,5 @@ Downloads.download("https://cise.ufl.edu/~luke.morris/torus.obj", "torus.obj") s = EmbeddedDeltaSet2D("torus.obj") sd = EmbeddedDeltaDualComplex2D{Bool,Float64,Point3D}(s) -subdivide_duals!(sd, Barycenter())

"NHS_torus"

Results

In the DEC, vorticity is encoded with d⋆, and speed can be encoded with norm ♯. We can use our operators from CombinatorialSpaces.jl to create our GIFs.

Vorticity

Speed

[ Info: Page built in 7 seconds.
-[ Info: This page was last built at 2024-08-20T23:10:41.865.
+subdivide_duals!(sd, Barycenter())

"NHS_torus"

Results

In the DEC, vorticity is encoded with d⋆, and speed can be encoded with norm ♯. We can use our operators from CombinatorialSpaces.jl to create our GIFs.

Vorticity

Speed

[ Info: Page built in 6 seconds.
+[ Info: This page was last built at 2024-08-21T00:12:07.667.
diff --git a/dev/objects.inv b/dev/objects.inv index 75cb9ffe..38f08a0d 100644 Binary files a/dev/objects.inv and b/dev/objects.inv differ diff --git a/dev/overview/overview/index.html b/dev/overview/overview/index.html index 512a8827..120e8fd2 100644 --- a/dev/overview/overview/index.html +++ b/dev/overview/overview/index.html @@ -788,5 +788,5 @@ # Animation record(fig, "diff_adv.gif", range(0.0, 100.0; length=150); framerate = 30) do t pmsh.color = sol(t).C[point_map] -end
"diff_adv.gif"

Your first composed Decapode!

[ Info: Page built in 35 seconds.
-[ Info: This page was last built at 2024-08-20T23:11:16.657.
+end
"diff_adv.gif"

Your first composed Decapode!

[ Info: Page built in 36 seconds.
+[ Info: This page was last built at 2024-08-21T00:12:43.288.
diff --git a/dev/poiseuille/poiseuille/index.html b/dev/poiseuille/poiseuille/index.html index 870ff50b..8ba8d28f 100644 --- a/dev/poiseuille/poiseuille/index.html +++ b/dev/poiseuille/poiseuille/index.html @@ -314,4 +314,4 @@ ComponentVector{Float64}(q = [6.191992507394705e13, -8.567979424049697e13, 1.9201063923323504e13, 4.3782178252160254e12, 1.8030315315600098e11, 2.8426426848218614e8, 710.8746080616181, 6.748007174123632, 6.604264003184105, 6.922786733820603, 6.682957266911191, 6.945403323059743, 6.711137618204406, 6.656096082264093, 6.479123002819502, 6.147464654651834, 6.0393618316538, 5.652147818372922, 6.154271690686492], ρ = [5.0, 1.7757938426905157e29, -6.814063376444455e28, -1.3074140954487203e28, -5.179044153438138e26, -8.152399905268033e23, -2.0200371105361587e18, -1.2631584523233224e7, 147.2461061913548, 56.36699131400445, 74.77129872544576, 19.020919678896387, 7.77362053745385, 24.816711099030634, -7.713715579414645, 9.350784798695937, -41.20554006890849, -6.373736972474428, -107.83102822687196, 5.0]) ComponentVector{Float64}(q = [1.1872271742208814e14, -1.6427891326322578e14, 3.681533018120626e13, 8.394614772117885e12, 3.4570584996538104e11, 5.450366177513396e8, 1357.0292842418091, 6.748007178150859, 6.6042640031840945, 6.922786733820602, 6.6829572669111865, 6.945403323059738, 6.711137618204411, 6.656096082264087, 6.479123002819504, 6.147464654651828, 6.039361831653803, 5.652147818372913, 6.154271690686511], ρ = [5.0, 6.528288582778251e29, -2.5050302052818274e29, -4.806400555751653e28, -1.9039538266899406e27, -2.9970381735307163e24, -7.426191586687182e18, -4.6034136041072555e7, 147.2461048352682, 56.3669913140081, 74.7712987254481, 19.020919678900064, 7.773620537453578, 24.816711099031508, -7.713715579413784, 9.350784798697658, -41.20554006890773, -6.37373697247144, -107.83102822687206, 5.0]) ComponentVector{Float64}(q = [2.2763124383665466e14, -3.14977741197434e14, 7.058732804821097e13, 1.6095290300619385e13, 6.628339915924113e11, 1.0450178891610495e9, 2595.9077082757617, 6.748007185817237, 6.604264003184089, 6.922786733820601, 6.682957266911184, 6.945403323059735, 6.711137618204414, 6.656096082264084, 6.479123002819505, 6.147464654651825, 6.039361831653805, 5.652147818372908, 6.154271690686521], ρ = [5.0, 2.3999125809047874e30, -9.208927315306011e29, -1.7669165534657745e29, -6.999265863648581e27, -1.1017634310287478e25, -2.7299973773030162e19, -1.6845665050515872e8, 147.24610225132864, 56.366991314009994, 74.77129872544933, 19.020919678901983, 7.773620537453436, 24.816711099031963, -7.713715579413335, 9.350784798698557, -41.20554006890733, -6.3737369724698825, -107.83102822687212, 5.0])

Notice that the solution contains both a vector of flows and a vector of pressures.

[ Info: Page built in 16 seconds.
-[ Info: This page was last built at 2024-08-20T23:11:32.558.
+[ Info: This page was last built at 2024-08-21T00:12:59.259.