tulpaMesh

a mesh from scattered points

R-CMD-check Codecov test coverage License: MIT

Spatial meshes and finite-element matrices for SPDE models, built on a constrained Delaunay triangulation in C++.

Hand it a point cloud. tulpaMesh triangulates it, refines the triangles to a guaranteed minimum angle (Ruppert), and assembles the mass, stiffness, and projection matrices the SPDE approach (Lindgren, Rue & Lindstrom 2011) needs. The triangulation runs on the CDT header-only library with exact geometric predicates; the FEM assembly has no dependency beyond Rcpp and Matrix. It is the mesh backend for the tulpa Bayesian engine and runs standalone for any spatial triangulation task.

library(tulpaMesh)

coords <- cbind(runif(200), runif(200))
mesh   <- tulpa_mesh(coords, max_edge = 0.1)
fem    <- fem_matrices(mesh, obs_coords = coords)
# fem$C (mass), fem$G (stiffness), fem$A (projection), ready for SPDE

Drop-in for fmesher

If you already build SPDE meshes with fmesher, convert an existing mesh and get the same C, G, and A matrices:

library(fmesher)
fm  <- fm_mesh_2d(loc = coords, max.edge = c(0.3, 0.6))
tm  <- as_tulpa_mesh(fm)        # direct conversion
fem <- fem_matrices(tm)         # same C, G, A

Mesh generation

FEM assembly

fem_matrices() returns the mass (C), stiffness (G), and projection (A) sparse matrices. The options cover the cases SPDE work runs into:

Barrier model on a coastline

library(sf)

barrier <- st_polygon(list(rbind(c(3,3), c(7,3), c(7,7), c(3,7), c(3,3))))
bt      <- barrier_triangles(mesh, st_sfc(barrier))
fem     <- fem_matrices(mesh, barrier = bt)
# fem$G carries zero stiffness across the barrier triangles

Quality, diagnostics, and mesh operations

Installation

install.packages("tulpaMesh")            # CRAN

install.packages("pak")                  # development version
pak::pak("gcol33/tulpaMesh")

Documentation

Support

“Software is like sex: it’s better when it’s free.” — Linus Torvalds

I’m a PhD student who builds R packages in my free time because I believe good tools should be free and open. I started these projects for my own work and figured others might find them useful too.

If this package saved you some time, buying me a coffee is a nice way to say thanks. It helps with my coffee addiction.

Buy Me A Coffee

License

MIT (see the LICENSE.md file)

Citation

@software{tulpaMesh,
  author = {Colling, Gilles},
  title = {tulpaMesh: Constrained Delaunay Triangulation Meshes for Spatial SPDE Models},
  year = {2026},
  url = {https://CRAN.R-project.org/package=tulpaMesh},
  doi = {10.32614/CRAN.package.tulpaMesh}
}