A Julia framework for solving partial differential equations using radial basis function (RBF) meshless methods. Instead of generating and managing a mesh, Macchiato.jl operates directly on scattered point clouds — simplifying geometry handling, avoiding mesh quality issues, and enabling straightforward refinement by simply adding points.
Macchiato.jl is part of the JuliaMeshless organization, which provides three composable packages:
| Package | Role |
|---|---|
| WhatsThePoint.jl | Point cloud generation — boundary discretization, surface splitting, interior fill algorithms |
| RadialBasisFunctions.jl | RBF interpolation and differential operators — Laplacian, gradient, partial derivatives, custom operators |
| Macchiato.jl | Physics simulation framework — models, boundary conditions, solvers, and post-processing |
WhatsThePoint.jl creates the geometry, RadialBasisFunctions.jl provides the numerical building blocks, and Macchiato.jl ties them together into complete simulations.
Steady-state heat conduction on a unit square with prescribed temperatures:
using WhatsThePoint, Macchiato, Unitful: m, °
# Geometry: unit square point cloud
part = PointBoundary(rectangle(1m, 1m)...)
split_surface!(part, 75°)
cloud = discretize(part, ConstantSpacing(1/33 * m), alg=VanDerSandeFornberg())
# Physics + BCs
model = SolidEnergy(k=1.0, ρ=1.0, cₚ=1.0)
bcs = Dict(
:surface1 => Temperature(0.0), # bottom
:surface2 => Temperature(0.0), # right
:surface3 => Temperature(100.0), # top
:surface4 => Temperature(0.0) # left
)
domain = Domain(cloud, bcs, model)
# Solve and extract results
sim = Simulation(domain)
run!(sim)
T = temperature(sim)- Heat Transfer —
SolidEnergy: steady-state and transient conduction with optional source terms, Dirichlet (Temperature), Neumann (HeatFlux,Adiabatic), and Robin (Convection) boundary conditions - Linear Elasticity —
LinearElasticity: 2D plane stress withDisplacementandTractionboundary conditions, body force support - Incompressible Fluids (in development) —
IncompressibleNavierStokeswith Newtonian and Carreau-Yasuda viscosity models
BCs are organized by mathematical type and physics domain:
| Math Type | Generic Type | Energy | Mechanics | Fluids |
|---|---|---|---|---|
| Dirichlet | PrescribedValue |
Temperature |
Displacement |
VelocityInlet / PressureOutlet |
| Neumann | PrescribedFlux / ZeroFlux |
HeatFlux / Adiabatic |
Traction / TractionFree |
VelocityOutlet |
| Robin | — | Convection |
— | — |
All BCs accept constant values or functions (x, t) -> value for spatially/temporally varying conditions.
using Pkg
Pkg.add(url="https://github.com/JuliaMeshless/Macchiato.jl")Or for development:
Pkg.develop(url="https://github.com/JuliaMeshless/Macchiato.jl")Full documentation is available at juliameshless.github.io/Macchiato.jl.
Contributions are welcome! The package uses a dispatch-based design that makes it straightforward to add new physics domains. See the Package Design section of the docs for the architecture overview and extension guide.