The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

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}
}

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.