Multigrid API

When using Decapodes to solve PDEs that use inverse Laplacians, you can use Multigrid to solve those linear systems.

API docs

CombinatorialSpaces.Multigrid.AbstractMultigridModeType
abstract type AbstractMultigridMode

Controls operator assembly in MultigridData construction.

  • DirectMode(): dualize and discretize at every level during the walk.
  • GalerkinMode(): only dualize the finest mesh; derive coarse operators via the Galerkin condition Aₖ₊₁ = Rₖ Aₖ Pₖ.
source
CombinatorialSpaces.Multigrid.MultigridDataMethod
MultigridData(s, scheme, levels, op, steps; alg, mode)

Construct a MultigridData from a base mesh using topology-only subdivision.

Keyword arguments

  • mode::AbstractMultigridMode = DirectMode(): controls operator assembly.
  • alg = Circumcenter(): dualization algorithm.

Examples

md = MultigridData(s, BinarySubdivision(), 4, s -> ∇²(0, s), 3)
md = MultigridData(s, BinarySubdivision(), 4, s -> ∇²(0, s), 3; mode=GalerkinMode())
source
CombinatorialSpaces.Multigrid.make_restrictionMethod
make_restriction(p::Transpose{<:Any, <:SparseMatrixCSC})

Build restriction R = row_normalize(S) directly from the subdivision matrix S = parent(p), sharing its colptr and rowval arrays. Only allocates a new nzval vector and a temporary row-sum buffer.

source
CombinatorialSpaces.Multigrid.propagate_pointsMethod
propagate_points(::BinarySubdivision, topo, coarse_points) -> fine_points

Interpolate vertex positions for binary subdivision. Original vertices are copied; midpoints are averaged from edge endpoints.

source
CombinatorialSpaces.Multigrid.propagate_pointsMethod
propagate_points(::CubicSubdivision, topo, coarse_points) -> fine_points

Interpolate vertex positions for cubic subdivision. Original vertices are copied; edge points at ⅓/⅔ positions and triangle centroids are computed from connectivity.

source
CombinatorialSpaces.Multigrid.propagate_pointsMethod
propagate_points(mat::SparseMatrixCSC, coarse_points) -> fine_points

Interpolate via column-wise SpMV on the subdivision matrix. Exported for external callers that have a matrix but no scheme type; all internal paths use the scheme-dispatched methods above.

source
CombinatorialSpaces.Multigrid.refineMethod
refine(::BinarySubdivision, topo) -> MeshTopology

Binary (medial) topology refinement: split each edge at its midpoint, subdivide each triangle into 4. No subdivision matrix is constructed.

source
CombinatorialSpaces.Multigrid.refineMethod
refine(::CubicSubdivision, topo) -> MeshTopology

Cubic topology refinement: two interior points per edge plus a centroid per triangle, subdividing each triangle into 9. No subdivision matrix is constructed.

source
CombinatorialSpaces.Multigrid.subdivision_matrixMethod
subdivision_matrix(::BinarySubdivision, topo) -> SparseMatrixCSC

Build the binary subdivision matrix (nvcoarse × nvfine) in direct CSC format. Identity block for original vertices, ½/½ averages for midpoints.

source
CombinatorialSpaces.Multigrid.subdivision_matrixMethod
subdivision_matrix(::CubicSubdivision, topo) -> SparseMatrixCSC

Build the cubic subdivision matrix (nvcoarse × nvfine) in direct CSC format. Identity block for original vertices, ⅓/⅔ weights for edge points, equal weights for centroids.

source