Description
Base class for a terrain node.
Implements required functionality for a co-simulation node (Initialize(), Synchronize(), Advance()) and all MPI communication.
A derived class must implement functions to:
- specify the communication interface type (SupportsMeshInterface())
- construct and initialize the concrete terrain object (OnInitialize())
- accept new body states (UpdateRigidProxy() and/or UpdateMeshProxy())
- provide terrain forces acting on bodies (GetForceRigidProxy() and/or GetForceMeshProxy())
- advance the dynamic state of the terrain (OnAdvance())
Optionally, a derived class may implement functions to:
- perform additional operations after a synchronization data exchange (OnSynchronize())
- perform additional data output (OnOutputData())
- provide run-time visualization (Render())
#include <ChVehicleCosimTerrainNode.h>


| Public Member Functions | |
| virtual NodeType | GetNodeType () const override | 
| Return the node type as NodeType::TERRAIN. | |
| void | EnableRuntimeVisualization (bool render, double render_fps=100) | 
| Enable/disable run-time visualization (default: false).  More... | |
| void | SetDimensions (double length, double width) | 
| Set the terrain patch dimensions.  More... | |
| virtual void | Initialize () override final | 
| Initialize this node.  More... | |
| virtual void | Synchronize (int step_number, double time) override final | 
| Synchronize this node.  More... | |
| virtual void | Advance (double step_size) override final | 
| Advance simulation.  More... | |
| virtual void | OutputData (int frame) override final | 
| Output logging and debugging data. | |
| virtual void | OutputVisualizationData (int frame) override | 
| Output post-processing visualization data.  More... | |
| virtual int | GetNumContacts () const | 
| Return current number of contacts.  More... | |
|  Public Member Functions inherited from chrono::vehicle::ChVehicleCosimBaseNode | |
| std::string | GetNodeTypeString () const | 
| Return the node type as a string. | |
| bool | IsCosimNode () const | 
| Return true if this node is part of the co-simulation infrastructure. | |
| void | SetStepSize (double step) | 
| Set the integration step size (default: 1e-4). | |
| double | GetStepSize () const | 
| Get the integration step size. | |
| void | SetOutDir (const std::string &dir_name, const std::string &suffix) | 
| Set the name of the output directory and an identifying suffix.  More... | |
| void | SetVerbose (bool verbose) | 
| Enable/disable verbose messages during simulation (default: true). | |
| const std::string & | GetOutDirName () const | 
| Get the output directory name for this node. | |
| double | GetStepExecutionTime () const | 
| Get the simulation execution time for the current step on this node.  More... | |
| double | GetTotalExecutionTime () const | 
| Get the cumulative simulation execution time on this node. | |
| virtual void | WriteCheckpoint (const std::string &filename) const | 
| Write checkpoint to the specified file (which will be created in the output directory). | |
| Protected Member Functions | |
| ChVehicleCosimTerrainNode (double length, double width) | |
| Construct a terrain node to wrap a terrain patch of given length and width. | |
| virtual bool | SupportsMeshInterface () const =0 | 
| Specify whether or not the terrain node supports the MESH communication interface.  More... | |
| virtual double | GetInitHeight () const =0 | 
| Return the terrain initial height.  More... | |
| virtual void | OnInitialize (unsigned int num_objects)=0 | 
| Perform any additional operations after the initial data exchange with the MBS node, including creating any required proxies for the specified number of objects.  More... | |
| virtual void | OnSynchronize (int step_number, double time) | 
| Perform any additional operations after the data exchange and synchronization with the MBS node.  More... | |
| virtual void | OnAdvance (double step_size)=0 | 
| Advance the state of the terrain system by the specified step. | |
| virtual void | OnOutputData (int frame) | 
| Perform additional output at the specified frame (called from within OutputData). | |
| virtual void | Render (double time) | 
| Render simulation.  More... | |
| virtual void | UpdateMeshProxy (unsigned int i, MeshState &mesh_state) | 
| Update the state of the i-th proxy mesh.  More... | |
| virtual void | GetForceMeshProxy (unsigned int i, MeshContact &mesh_contact) | 
| Collect cumulative contact forces on the i-th proxy mesh.  More... | |
| virtual void | UpdateRigidProxy (unsigned int i, BodyState &rigid_state)=0 | 
| Update the state of the i-th proxy rigid.  More... | |
| virtual void | GetForceRigidProxy (unsigned int i, TerrainForce &rigid_contact)=0 | 
| Collect cumulative contact force and torque on the i-th proxy rigid.  More... | |
|  Protected Member Functions inherited from chrono::vehicle::ChVehicleCosimBaseNode | |
| ChVehicleCosimBaseNode (const std::string &name) | |
| void | SendGeometry (const ChVehicleGeometry &geom, int dest) const | 
| void | RecvGeometry (ChVehicleGeometry &geom, int source) const | 
| Protected Attributes | |
| bool | m_render | 
| if true, perform run-time rendering | |
| double | m_render_step | 
| time step between rendered frames | |
| double | m_hdimX | 
| patch half-length (X direction) | |
| double | m_hdimY | 
| patch half-width (Y direction) | |
| bool | m_wheeled | 
| comm node (true: TIRE nodes, false: tracked MBS node) | |
| InterfaceType | m_interface_type | 
| communication interface (body or mesh) | |
| int | m_num_objects | 
| number of interacting objects | |
| std::vector< ChVehicleGeometry::AABB > | m_aabb | 
| AABB of collision models for interacting objects. | |
| std::vector< ChVehicleGeometry > | m_geometry | 
| contact geometry and materials for interacting objects | |
| std::vector< double > | m_load_mass | 
| vertical load on interacting objects | |
| std::vector< int > | m_obj_map | 
| mapping from interacting object to shape | |
| std::vector< MeshState > | m_mesh_state | 
| mesh state (used for MESH communication) | |
| std::vector< BodyState > | m_rigid_state | 
| rigid state (used for BODY communication interface) | |
| std::vector< MeshContact > | m_mesh_contact | 
| mesh contact forces (used for MESH communication interface) | |
| std::vector< TerrainForce > | m_rigid_contact | 
| rigid contact force (used for BODY communication interface) | |
|  Protected Attributes inherited from chrono::vehicle::ChVehicleCosimBaseNode | |
| int | m_rank | 
| MPI rank of this node (in MPI_COMM_WORLD) | |
| double | m_step_size | 
| integration step size | |
| std::string | m_name | 
| name of the node | |
| std::string | m_out_dir | 
| top-level output directory | |
| std::string | m_node_out_dir | 
| node-specific output directory | |
| std::ofstream | m_outf | 
| output file stream | |
| unsigned int | m_num_wheeled_mbs_nodes | 
| unsigned int | m_num_tracked_mbs_nodes | 
| unsigned int | m_num_terrain_nodes | 
| unsigned int | m_num_tire_nodes | 
| ChTimer< double > | m_timer | 
| timer for integration cost | |
| double | m_cum_sim_time | 
| cumulative integration cost | |
| bool | m_verbose | 
| verbose messages during simulation? | |
| Additional Inherited Members | |
|  Public Types inherited from chrono::vehicle::ChVehicleCosimBaseNode | |
| enum | NodeType { NodeType::MBS_WHEELED, NodeType::MBS_TRACKED, NodeType::TERRAIN, NodeType::TIRE } | 
| Type of node participating in co-simulation.  More... | |
| enum | InterfaceType { InterfaceType::BODY, InterfaceType::MESH } | 
| Type of the tire-terrain communication interface.  More... | |
|  Static Public Member Functions inherited from chrono::vehicle::ChVehicleCosimBaseNode | |
| static std::string | OutputFilename (const std::string &dir, const std::string &root, const std::string &ext, int frame, int frame_digits) | 
| Utility function for creating an output file name.  More... | |
|  Static Protected Attributes inherited from chrono::vehicle::ChVehicleCosimBaseNode | |
| static const double | m_gacc = -9.81 | 
Member Function Documentation
◆ Advance()
| 
 | finaloverridevirtual | 
Advance simulation.
This function is called after a synchronization to allow the node to advance its state by the specified time step. A node is allowed to take as many internal integration steps as required, but no inter-node communication should occur.
Implements chrono::vehicle::ChVehicleCosimBaseNode.
◆ EnableRuntimeVisualization()
| void chrono::vehicle::ChVehicleCosimTerrainNode::EnableRuntimeVisualization | ( | bool | render, | 
| double | render_fps = 100 | ||
| ) | 
Enable/disable run-time visualization (default: false).
If enabled, rendering is done with the specified frequency. Note that a particular concrete terrain node may not support run-time visualization or may not render all physics elements.
◆ GetForceMeshProxy()
| 
 | inlineprotectedvirtual | 
Collect cumulative contact forces on the i-th proxy mesh.
Load indices of vertices in contact and the corresponding vertex forces (expressed in absolute frame) into the provided MeshContact struct.
◆ GetForceRigidProxy()
| 
 | protectedpure virtual | 
Collect cumulative contact force and torque on the i-th proxy rigid.
Load contact forces (expressed in absolute frame) into the provided TerrainForce struct.
◆ GetInitHeight()
| 
 | protectedpure virtual | 
Return the terrain initial height.
This value must be available before the call to Initialize() (and therefore, before the derived class's OnInitialize() is called).
Implemented in chrono::vehicle::ChVehicleCosimTerrainNodeChrono.
◆ GetNumContacts()
| 
 | inlinevirtual | 
Return current number of contacts.
(concrete terrain specific)
◆ Initialize()
| 
 | finaloverridevirtual | 
Initialize this node.
This function allows the node to initialize itself and, optionally, perform an initial data exchange with any other node.
Reimplemented from chrono::vehicle::ChVehicleCosimBaseNode.
◆ OnInitialize()
| 
 | protectedpure virtual | 
Perform any additional operations after the initial data exchange with the MBS node, including creating any required proxies for the specified number of objects.
A derived class has access to the following vectors, each of size m_num_shapes:
- m_aabb: collision model bounding box
- m_load_mass: vertical load on each object
- m_geometry: collision geometry and contact material for each object
Implemented in chrono::vehicle::ChVehicleCosimTerrainNodeChrono, and chrono::vehicle::ChVehicleCosimTerrainNodeGranularSPH.
◆ OnSynchronize()
| 
 | inlineprotectedvirtual | 
Perform any additional operations after the data exchange and synchronization with the MBS node.
A derived class has access to the following vectors (of size equal to the number of interacting objects):
- full dynamic state of the rigid bodies (through m_rigid_state) when using the BODY communication interface
- state of the mesh vertices (through m_mesh_state) when using the MESH communication interface
◆ OutputVisualizationData()
| 
 | inlineoverridevirtual | 
Output post-processing visualization data.
If implemented, this function should write a file in the "visualization" subdirectory of m_node_out_dir.
Implements chrono::vehicle::ChVehicleCosimBaseNode.
Reimplemented in chrono::vehicle::ChVehicleCosimTerrainNodeGranularOMP, chrono::vehicle::ChVehicleCosimTerrainNodeGranularGPU, chrono::vehicle::ChVehicleCosimTerrainNodeRigid, and chrono::vehicle::ChVehicleCosimTerrainNodeGranularSPH.
◆ Render()
| 
 | inlineprotectedvirtual | 
Render simulation.
This function is called from Advance() at the frequency spoecified in the call to EnableRuntimeVisualization(). Any call to Render occurs after a call to OnAdvance().
◆ SetDimensions()
| void chrono::vehicle::ChVehicleCosimTerrainNode::SetDimensions | ( | double | length, | 
| double | width | ||
| ) | 
Set the terrain patch dimensions.
If invoked, this function must be called before Initialize.
◆ SupportsMeshInterface()
| 
 | protectedpure virtual | 
Specify whether or not the terrain node supports the MESH communication interface.
See ChVehicleCosimBaseNode::InterfaceType. A terrain that also supports the MESH communication interface must override the functions UpdateMeshProxy() and GetForceMeshProxy().
◆ Synchronize()
| 
 | finaloverridevirtual | 
Synchronize this node.
This function is called at every co-simulation synchronization time to allow the node to exchange information with any other node.
Implements chrono::vehicle::ChVehicleCosimBaseNode.
◆ UpdateMeshProxy()
| 
 | inlineprotectedvirtual | 
Update the state of the i-th proxy mesh.
Use information in the provided MeshState struct (vertex positions and velocities expressed in absolute frame).
◆ UpdateRigidProxy()
| 
 | protectedpure virtual | 
Update the state of the i-th proxy rigid.
Use information in the provided BodyState struct (pose and velocities expressed in absolute frame).
The documentation for this class was generated from the following files:
- /builds/uwsbel/chrono/src/chrono_vehicle/cosim/ChVehicleCosimTerrainNode.h
- /builds/uwsbel/chrono/src/chrono_vehicle/cosim/ChVehicleCosimTerrainNode.cpp
