Project Chrono: chrono::vehicle::GranularTerrain Class Reference

Public Member Functions | Friends | List of all members
chrono::vehicle::GranularTerrain Class Reference
VEHICLE module » Terrain system

## Description

Granular terrain model.

This class implements a rectangular patch of granular terrain with spherical particles. Boundary conditions (model of a container bin) are imposed through a custom collision detection object.

`#include <GranularTerrain.h>`

Inheritance diagram for chrono::vehicle::GranularTerrain:
[legend]
Collaboration diagram for chrono::vehicle::GranularTerrain:
[legend]

## Public Member Functions
| GranularTerrain (ChSystem *system)
| Construct a default GranularTerrain.
void | SetContactMaterial (std::shared_ptr< ChContactMaterial > material)
| Set contact material (must be consistent with the containing system).
std::shared_ptr< ChContactMaterial > | GetContactMaterial () const
| Get the current contact material.
void | SetCollisionEnvelope (double envelope)
| Set outward collision envelope.
void | SetMinNumParticles (unsigned int min_num_particles)
| Set the minimum number of particles to be generated (default: 0).
void | EnableVerbose (bool val)
| Enable/disable verbose output (default: false).
void | EnableRoughSurface (int num_spheres_x, int num_spheres_y)
| Enable creation of particles fixed to bottom container.
void | EnableMovingPatch (std::shared_ptr< ChBody > body, double buffer_distance, double shift_distance, const ChVector3d &init_vel=ChVector3d())
| Enable moving patch and set parameters.
void | EnableVisualization (bool val)
| Enable/disable visualization of boundaries (default: false).
bool | IsVisualizationEnabled () const
std::shared_ptr< ChBody > | GetGroundBody ()
| Return a handle to the ground body.
void | Initialize (const ChVector3d &center, double length, double width, unsigned int num_layers, double radius, double density, const ChVector3d &init_vel=ChVector3d())
| Initialize the granular terrain system.
virtual void | Synchronize (double time) override
| Update the state of the terrain system at the specified time.
double | GetPatchFront () const
| Get current front boundary location (in positive X direction).
double | GetPatchRear () const
| Get current rear boundary location (in negative X direction).
double | GetPatchLeft () const
| Get left boundary location (in positive Y direction).
double | GetPatchRight () const
| Get right boundary location (in negative Y direction).
double | GetPatchBottom () const
| Get bottom boundary location.
bool | PatchMoved () const
| Report if the patch was moved during the last call to Synchronize().
unsigned int | GetNumParticles () const
| Get the number of particles.
virtual double | GetHeight (const ChVector3d &loc) const override
| Get the terrain height below the specified location.
virtual chrono::ChVector3d | GetNormal (const ChVector3d &loc) const override
| Get the terrain normal at the point below the specified location.
virtual float | GetCoefficientFriction (const ChVector3d &loc) const override
| Get the terrain coefficient of friction at the point below the specified location.
Public Member Functions inherited from chrono::vehicle::ChTerrain
virtual void | Advance (double step)
| Advance the state of the terrain system by the specified duration.
virtual void | GetProperties (const ChVector3d &loc, double &height, ChVector3d &normal, float &friction) const
| Get all terrain characteristics at the point below the specified location.
void | RegisterHeightFunctor (std::shared_ptr< HeightFunctor > functor)
| Specify the functor object to provide the terrain height at given locations.
void | RegisterNormalFunctor (std::shared_ptr< NormalFunctor > functor)
| Specify the functor object to provide the terrain normal at given locations.
void | RegisterFrictionFunctor (std::shared_ptr< FrictionFunctor > functor)
| Specify the functor object to provide the coefficient of friction at given locations.

## Friends
class | BoundaryContact

## Additional Inherited Members
Protected Attributes inherited from chrono::vehicle::ChTerrain
std::shared_ptr< HeightFunctor > | m_height_fun
| functor for location-dependent terrain height
std::shared_ptr< NormalFunctor > | m_normal_fun
| functor for location-dependent terrain normal
std::shared_ptr< FrictionFunctor > | m_friction_fun
| functor for location-dependent coefficient of friction

## Constructor & Destructor Documentation

## ◆ GranularTerrain()

chrono::vehicle::GranularTerrain::GranularTerrain | ( | ChSystem * | system | ) |

Construct a default GranularTerrain.

The user is responsible for calling various Set methods before Initialize.

Parameters

  [in] | system | pointer to the containing multibody system

## Member Function Documentation

## ◆ EnableMovingPatch()

void chrono::vehicle::GranularTerrain::EnableMovingPatch | ( | std::shared_ptr< ChBody > | body,
|  | double | buffer_distance,
|  | double | shift_distance,
|  | const ChVector3d & | init_vel = ChVector3d() )

Enable moving patch and set parameters.

Parameters

  body | monitored body
  buffer_distance | look-ahead distance
  shift_distance | chunk size of relocated particles
  init_vel | initial particle velocity

## ◆ EnableRoughSurface()

void chrono::vehicle::GranularTerrain::EnableRoughSurface | ( | int | num_spheres_x,
|  | int | num_spheres_y )

Enable creation of particles fixed to bottom container.

Parameters

  num_spheres_x | number of fixed spheres in X direction
  num_spheres_y | number of fixed spheres in Y direction

## ◆ GetCoefficientFriction()

float chrono::vehicle::GranularTerrain::GetCoefficientFriction | ( | const ChVector3d & | loc | ) | const
| overridevirtual

Get the terrain coefficient of friction at the point below the specified location.

This coefficient of friction value may be used by certain tire models to modify the tire characteristics, but it will have no effect on the interaction of the terrain with other objects (including tire models that do not explicitly use it). For GranularTerrain, this function defers to the user-provided functor object of type ChTerrain::FrictionFunctor, if one was specified. Otherwise, it returns the constant value specified through SetContactFrictionCoefficient.

Reimplemented from chrono::vehicle::ChTerrain.

## ◆ GetHeight()

double chrono::vehicle::GranularTerrain::GetHeight | ( | const ChVector3d & | loc | ) | const
| overridevirtual

Get the terrain height below the specified location.

This function returns the highest point over all granular particles.

Reimplemented from chrono::vehicle::ChTerrain.

## ◆ GetNormal()

ChVector3d chrono::vehicle::GranularTerrain::GetNormal | ( | const ChVector3d & | loc | ) | const
| overridevirtual

Get the terrain normal at the point below the specified location.

Reimplemented from chrono::vehicle::ChTerrain.

## ◆ Initialize()

void chrono::vehicle::GranularTerrain::Initialize | ( | const ChVector3d & | center,
|  | double | length,
|  | double | width,
|  | unsigned int | num_layers,
|  | double | radius,
|  | double | density,
|  | const ChVector3d & | init_vel = ChVector3d() )

Initialize the granular terrain system.

The granular material is created in successive layers within the specified volume, using the specified generator, until the number of particles exceeds the specified minimum value (see SetMinNumParticles). The initial particle locations are obtained with Poisson Disk sampling, using the given minimum separation distance.

Parameters

  [in] | center | center of bottom
  [in] | length | patch dimension in X direction
  [in] | width | patch dimension in Y direction
  [in] | num_layers | number of layers
  [in] | radius | particle radius
  [in] | density | particle density
  [in] | init_vel | particle initial velocity

## ◆ SetCollisionEnvelope()

void chrono::vehicle::GranularTerrain::SetCollisionEnvelope | ( | double | envelope | ) |
| inline

Set outward collision envelope.

This value is used for the internal custom collision detection for imposing boundary conditions. Note that if the underlying system is of SMC type (i.e., using a penalty-based contact method), the envelope is automatically set to 0. For NSC systems (i.e., when using a complementarity-based contact method), if the envelope is not specified, the default value is 5% of the particle radius.

## ◆ Synchronize()

void chrono::vehicle::GranularTerrain::Synchronize | ( | double | time | ) |
| overridevirtual

Update the state of the terrain system at the specified time.

Reimplemented from chrono::vehicle::ChTerrain.

The documentation for this class was generated from the following files:

- D:/W/B/src/chrono-9.0.1/src/chrono_vehicle/terrain/GranularTerrain.h
- D:/W/B/src/chrono-9.0.1/src/chrono_vehicle/terrain/GranularTerrain.cpp