AGX Dynamics 2.42.2.1
Loading...
Searching...
No Matches
TerrainPhysics.h
Go to the documentation of this file.
1/*
2Copyright 2007-2025. Algoryx Simulation AB.
3
4All AGX source code, intellectual property, documentation, sample code,
5tutorials, scene files and technical white papers, are copyrighted, proprietary
6and confidential material of Algoryx Simulation AB. You may not download, read,
7store, distribute, publish, copy or otherwise disseminate, use or expose this
8material unless having a written signed agreement with Algoryx Simulation AB, or having been
9advised so by Algoryx Simulation AB for a time limited evaluation, or having purchased a
10valid commercial license from Algoryx Simulation AB.
11
12Algoryx Simulation AB disclaims all responsibilities for loss or damage caused
13from using this software, unless otherwise stated in written agreements with
14Algoryx Simulation AB.
15*/
16
17#pragma once
18
19#include <agxTerrain/Terrain.h>
20
21namespace agxTerrain
22{
27 {
28 public:
52 const agx::Vec3i& voxelIndex,
53 agx::Real stress,
54 agx::Real timeFactor,
55 agx::Real& newCompaction);
56
83 const agx::Vec3i& voxelIndex,
84 agx::Real stress,
85 agx::Real timeFactor,
86 agx::Real& newCompaction);
87
98
107 static agx::Real calculateBoussinesqFrolichSubSoilStress(agx::Real depth, agx::Real surfaceForce, agx::Real concentrationFactor, const agx::Vec3& rk_vec);
108
116
129
136 static agx::Real getAngleOfReposeMultiplier(Terrain* terrain, const agx::Vec3i& voxelIndex);
137
144 static agx::Real getAngleOfReposeMultiplier(Terrain* terrain, const agx::Vec3i& voxelIndex, const agx::Real compaction);
145
154 static agx::Real calculateReposeHeight(Terrain* terrain, const agx::Vec2i& receivingIndex, const agx::Vec2i& reposingIndex);
155
156
157 /*
158 Calculate tan(\alpha) where \alpha is the effective repose angle in the given reposing index, which is
159 determined by the material angle of repose and the local compaction.
160
161 To get the actual height difference allowed between two neighboring vertices, this needs to be multiplied by
162 the distance between them. This is elementSize for adjacent vertices and elementSize * SQRT(2) for diagonal
163 vertices.
164 */
165 static agx::Real calculateTanReposeAngle(Terrain* terrain, const agx::Vec2i& reposingIndex);
166
167
168
173 const agx::Vec3i& receivingSurfaceVoxelIndex,
174 const agx::Vec3i& reposingSurfaceVoxelIndex,
175 const agx::Vec2& tanReposeAngles);
176
177
182 const agx::Vec3i& receivingSurfaceVoxelIndex,
183 const agx::Vec3i& reposingSurfaceVoxelIndex,
184 const agx::Vec2& tanReposeAngles,
185 const agx::Real& receivingSurfaceCompaction,
186 const agx::Real& reposingSurfaceCompaction);
187
195 static agx::Real calculateYoungsModulus_POW2(agx::Real originalYoungsModulus, agx::Real hardeningRate, agx::Real compaction);
196
211 static agx::Real calculateYoungsModulus_CAM_CLAY(agx::Real originalYoungsModulus, agx::Real k_e, agx::Real n_e, agx::Real compaction);
212
227
235
243
254 static agx::Real calculateDilatancyAngleVoxel( const Terrain* terrain, const agx::Vec3i& voxelIndex );
255
268 static agx::Real calculateDilatancyAngle(agx::Real dilatancyAngleScalingFactor, agx::Real dilatancyAngle, agx::Real compaction);
269
280 static agx::Real calculateEffectiveFrictionAngleVoxel( const Terrain* terrain, const agx::Vec3i& voxelIndex );
281
292
303 static agx::Real calculateEffectiveFrictionAngleTerrainIndex( const Terrain* terrain, const agx::Vec2i& terrainIndex );
304
319 agx::Real dilatancyAngleScalingFactor,
320 agx::Real nominalDilatancyAngle,
321 agx::Real compaction);
322
333 static agx::Real estimateCriticalCompaction(agx::Real dilatancyAngleScalingFactor, agx::Real dilatancyAngle);
334 };
335}
This class is used to describe the general material properties of the Terrain.
Utility class where most of the physics calculation used in agxTerrain is gathered.
static agx::Real calculateHardnessMultiplier_CAM_CLAY(agx::Real k_e, agx::Real n_e, agx::Real compaction)
Calculate the hardness multiplier for the the Cam-Clay model from critical-state theories.
static agx::Real calculateBoussinesqFrolichSubSoilStress(agx::Real depth, agx::Real surfaceForce, agx::Real concentrationFactor, const agx::Vec3 &rk_vec)
Calculate stress at a given depth and distance from a surface point force using the Boussinesq-Frolic...
static agx::Real calculateStressFromUniformDiskLoad(agx::Real depth, agx::Real surfaceLoad, agx::Real diskRadius)
Calculate stress at a given depth directly under the middle axis of a uniform disk,...
static agx::Real calculateDilatancyAngle(agx::Real dilatancyAngleScalingFactor, agx::Real dilatancyAngle, agx::Real compaction)
Calculate the dilatancy angle for a TerrainMaterial given a specific compaction.
static agx::Real estimateCriticalCompaction(agx::Real dilatancyAngleScalingFactor, agx::Real dilatancyAngle)
Estimate the critical compaction of a TerrainMaterial which is used in calculating the local dilatanc...
static agx::Real calculateDilatancyAngleVoxel(const Terrain *terrain, const agx::Vec3i &voxelIndex)
Calculate the local dilatancy angle in a specified voxel in the terrain.
static agx::Real getAngleOfReposeMultiplier(Terrain *terrain, const agx::Vec3i &voxelIndex, const agx::Real compaction)
Calculate the multiplier which is used to modify the local angle of repose of the material given the ...
static bool calculateNewCompactionFromStressLog10(Terrain *terrain, const agx::Vec3i &voxelIndex, agx::Real stress, agx::Real timeFactor, agx::Real &newCompaction)
Estimate new compaction in a voxel from an applied stress using the density log10 method.
static bool calculateNewCompactionFromStressVoidRatio(Terrain *terrain, const agx::Vec3i &voxelIndex, agx::Real stress, agx::Real timeFactor, agx::Real &newCompaction)
Estimate new compaction in a voxel from an applied stress using the void ratio method.
static agx::Real calculateTanReposeAngle(Terrain *terrain, const agx::Vec2i &reposingIndex)
static agx::Real calculateEffectiveFrictionAngleVoxel(const Terrain *terrain, const agx::Vec3i &voxelIndex)
Calculate the effective friction angle of a voxel in a specific terrain.
static agx::Real calculateEffectiveFrictionAngleTerrainIndex(const Terrain *terrain, const agx::Vec2i &terrainIndex)
Calculate the effective friction angle at the surface of a specific terrain with a given terrain inde...
static agx::Real calculateCompressionMultiplier(agx::Real hardnessRate, agx::Real compaction)
Calculate the compression multiplier which is used to modify the Young's Modulus of terrain contacts ...
static agx::Real calculateYoungsModulus_POW2(agx::Real originalYoungsModulus, agx::Real hardeningRate, agx::Real compaction)
Calculate a new Young's modulus given a hardening rate and compaction.
static agx::Real calculatePreconsolidationStressVoidRatio(Terrain *terrain, const agx::Vec3i &voxelIndex)
Calculate the pre-consolidation stress of the material in a voxel with specified index using the void...
static agx::Vec2 calculateReposeHeights(Terrain *terrain, const agx::Vec3i &receivingSurfaceVoxelIndex, const agx::Vec3i &reposingSurfaceVoxelIndex, const agx::Vec2 &tanReposeAngles)
Performs the same calculations as calculateReposeHeight and also computes the height difference for t...
static agx::Real calculateEffectiveFrictionAngle(agx::Real nominalFrictionAngle, agx::Real dilatancyAngleScalingFactor, agx::Real nominalDilatancyAngle, agx::Real compaction)
Calculate the effective friction angle of a TerrainMaterial given a specified compaction.
static agx::Real calculatePreconsolidationStressLog10(Terrain *terrain, const agx::Vec3i &voxelIndex)
Calculate the pre-consolidation stress of the material in a voxel with specified index using the void...
static agx::Real calculateYoungsModulus_CAM_CLAY(agx::Real originalYoungsModulus, agx::Real k_e, agx::Real n_e, agx::Real compaction)
Calculate a new Young's modulus using the Cam-Clay model from critical-state theories.
static agx::Real calculateReposeHeight(Terrain *terrain, const agx::Vec2i &receivingIndex, const agx::Vec2i &reposingIndex)
Calculate the local repose height, i.e the height difference where above that avalanching will begin,...
static agx::Real calculateCompactionTimeFactor(agx::Real contactTime, agx::Real tau_c)
Calculate the compaction time factor used to relax the compaction rate of the material.
static agx::Real getAngleOfReposeMultiplier(Terrain *terrain, const agx::Vec3i &voxelIndex)
Calculate the multiplier which is used to modify the local angle of repose of the material given the ...
static agx::Real calculateEffectiveReposeAngle(const TerrainMaterial *terrainMaterial)
Calculate the effective repose angle of a specific terrain, unmodified by compaction.
static agx::Vec2 calculateReposeHeights(Terrain *terrain, const agx::Vec3i &receivingSurfaceVoxelIndex, const agx::Vec3i &reposingSurfaceVoxelIndex, const agx::Vec2 &tanReposeAngles, const agx::Real &receivingSurfaceCompaction, const agx::Real &reposingSurfaceCompaction)
Performs the same calculations as calculateReposeHeight and also computes the height difference for t...
A terrain model based a 3D grid model with overlapping height field that can be deformed by interacti...
Definition: Terrain.h:92
The agxTerrain namespace contains a 3D model for a dynamic deformable Terrain and related classes.
Definition: Geometry.h:59
double Real
Definition: Real.h:41