Scope
This page explains two Chrono::CRM performance features for vehicle-terrain simulation:
- active domains
- reduced neighbor-search frequency (
num_proximity_search_steps)
Both are available in the Chrono::FSI-SPH backend used by CRMTerrain.
What Active Domains Do
Active domains restrict per-step SPH work to particles near interacting bodies.
- Active particles are inside the active box.
- Extended-active particles are outside the active box, but within an additional solver-defined margin around it.
- Inactive particles are not processed in the current step.
In practice, only active and extended-active particles are sorted, included in neighbor search, and integrated.

What The Active Box Means
In CRMTerrain, SetActiveDomain(ChVector3d(Lx, Ly, Lz)) defines a fixed box size used by the solver.
- The same box dimensions are applied to FSI objects registered for CRM interaction.
- With the high-level
CRMTerrainAPI, this is typically done throughAddRigidBody(...)andAddFeaMesh(...). - At the lower level, this corresponds to
AddFsiBody(...)/AddFsiMesh...(...)calls. - The active region is the union of these fixed-size boxes around all registered interacting entities.
So from a user perspective: it is one fixed box definition that is applied around all bodies/meshes added to the FSI side of the CRM terrain problem.
Code-Level Implementation
Vehicle-side API:
CRMTerrain::SetActiveDomain(...)andCRMTerrain::SetActiveDomainDelay(...)- implemented as wrappers in:
src/chrono_vehicle/terrain/CRMTerrain.hsrc/chrono_vehicle/terrain/CRMTerrain.cpp
SPH-side implementation:
ChFsiFluidSystemSPH::OnDoStepDynamics(...)updates particle activity, optionally rebuilds neighbor lists, and then advances dynamics (src/chrono_fsi/sph/ChFsiFluidSystemSPH.cpp).- Activity flags are computed in
UpdateActivityD(...)(src/chrono_fsi/sph/physics/SphFluidDynamics.cu). - The activity test uses positions of registered FSI bodies and FEA nodes (from FSI state arrays on device).
- In
UpdateActivityD(...), the extended region is computed as:ExAcdomain = bodyActiveDomain + 2 * h_multiplier * h. - Neighbor-list rebuild cadence is controlled by:
m_frame % num_proximity_search_steps == 0inOnDoStepDynamics(...). - Neighbor lists are built through cell hashing/sorting in
src/chrono_fsi/sph/physics/SphCollisionSystem.cu.
How To Enable
Set active domains in CRMTerrain:
Set neighbor-search frequency through SPH parameters:
Equivalent low-level call on the SPH system:
Practical Tuning Guidance
- Start with
num_proximity_search_steps = 1. - Increase to
4, then10, and compare force/sinkage/traction metrics for your case. - Use active domains whenever soil disturbance is localized around moving bodies.
- Use
SetActiveDomainDelay(...)if you run an initial settling phase. - Keep active boxes large enough to contain the full interaction region.
For broader SPH parameter guidance, see Chrono::FSI-SPH Parameter Selection Guide.
Important note:
- Active domains are intended for CRM terramechanics simulations (not general CFD usage).
Performance Reported in the Paper
Reference:
A Physics-Based Continuum Model for Versatile, Scalable, and Fast Terramechanics Simulation
Key reported results:
- Persistent neighbor lists (
ps_freq = 10) provided about1.28xto1.36xspeedup (23-27% wall-clock reduction), with no significant loss in accuracy in the validation benchmarks. - Active domains alone (
ps_freq = 1) provided:2.93xspeedup (MGRU3 wheel)2.11xspeedup (RASSOR drum) with no significant loss in accuracy.
- Combined (
ps_freq = 10+ active domains), speedups above7xwere reported in multiple benchmarks, with up to15.9xin the tracked-vehicle benchmark (relative to the baseline implementation in the paper).
Related demos:
src/demos/vehicle/terrain/demo_VEH_CRMTerrain_WheeledVehicle.cppsrc/demos/vehicle/terrain/demo_VEH_CRMTerrain_TrackedVehicle.cppsrc/demos/fsi/sph/demo_FSI-SPH_RassorDrum.cpp