Please find below documentation of plugins. Note that this page was autogenerated with the granoo -d command
[BroadPhase<DEM::DiscreteElement, DEM::DiscreteElement>] : Between2SetOf[BroadPhase<DEM::DiscreteElement, DEM::DiscreteElement>] : Hash[BroadPhase<DEM::DiscreteElement, DEM::DiscreteElement>] : LCM[BroadPhase<DEM::DiscreteElement, DEM::DiscreteElement>] : Raw[BroadPhase<DEM::DiscreteElement, DEM::SupportShape>] : SupportShape[BroadPhase<DEM::DiscreteElement, DEM::Tool>] : Tool[BroadPhase<Physic::Body, Physic::Body>] : AABBTree[BroadPhase<Physic::Body, Physic::Body>] : Hash[BroadPhase<Physic::Body, Physic::Body>] : Lcm[BroadPhase<Physic::Body, Physic::Body>] : Raw[BroadPhase<Physic::Body, Physic::Ground>] : Raw[BroadPhase<Physic::Particle, Physic::Ground>] : Raw[BroadPhase<SPH::Particle, SPH::Particle>] : Lcm[CallBack<DEM::DiscreteElement, DEM::DiscreteElement>] : Standard[CallBack<DEM::DiscreteElement, DEM::SupportShape>] : Standard[CallBack<DEM::DiscreteElement, DEM::Tool>] : Standard[CallBack<Physic::Body, Physic::Body>] : Standard[CallBack<Physic::Body, Physic::Ground>] : Standard[CallBack<Physic::Particle, Physic::Ground>] : Standard[DEM::SupportShape] : Box[DEM::SupportShape] : Cone[DEM::SupportShape] : Cylinder[DEM::SupportShape] : Polyhedron[DEM::SupportShape] : Sphere[DEM::Tool] : Box[DEM::Tool] : Cone[DEM::Tool] : Cylinder[DEM::Tool] : Polyhedron[DEM::Tool] : Sphere[GranOO] : GranOO[Math::Function] : NormalRandom[Math::Function] : RampAndConstant[Math::Function] : SineRamp[Math::Function] : UniRandom[NarrowPhase<Physic::Body, Physic::Body>] : WithShape[NarrowPhase<Physic::Body, Physic::Ground>] : WithShape[NarrowPhase<Physic::Particle, Physic::Ground>] : WithShape[Physic::Ground] : Box[Physic::Ground] : Cone[Physic::Ground] : Cylinder[Physic::Ground] : Disk[Physic::Ground] : Plane[Physic::Ground] : Polyhedron[Physic::Ground] : Rectangle[Physic::Ground] : Sphere[PlugIn] : _AddVoltageSource[PlugIn] : _ApplyBondLoad[PlugIn] : _ApplyBrittleFracture[PlugIn] : _ApplyFELoad[PlugIn] : _ApplyForce[PlugIn] : _ApplyGravity[PlugIn] : _ApplyTorque[PlugIn] : _BuildDelaunayElementPair[PlugIn] : _BuildGridDomain[PlugIn] : _BuildNeighbourElementPair[PlugIn] : _Check[PlugIn] : _ClearLoad[PlugIn] : _ComputeOptimalTimeStep[PlugIn] : _ComputeStrainTensor[PlugIn] : _ComputeVirialStress[PlugIn] : _ComputeVolumeFraction[PlugIn] : _ConductCurrent[PlugIn] : _ConductHeat[PlugIn] : _ConductHeatWithFS[PlugIn] : _Convert[PlugIn] : _ConvertBondToElementPair[PlugIn] : _ConvertElementPairToBeam[PlugIn] : _ConvertElementPairToFlatBond[PlugIn] : _ConvertElementPairToPlasticBeam[PlugIn] : _ConvertElementPairToPlasticBeamIT[PlugIn] : _ConvertElementPairToSpring[PlugIn] : _Delete[PlugIn] : _DeleteUnbondedElement[PlugIn] : _DisplayInfo[PlugIn] : _EnergyBalance[PlugIn] : _ExportToPVD[PlugIn] : _ImposeDisplacement[PlugIn] : _ImposeFEDisplacement[PlugIn] : _ImposeOrientation[PlugIn] : _ImposeRotation[PlugIn] : _ImposeTemperature[PlugIn] : _InitElectricalProperties[PlugIn] : _InitThermalProperties[PlugIn] : _IntegrateAcceleration[PlugIn] : _InteractionHistogram[PlugIn] : _ManageCollision[PlugIn] : _MonitorItemNumber[PlugIn] : _NewExpression[PlugIn] : _NewFrame[PlugIn] : _NewGround[PlugIn] : _NewPoint[PlugIn] : _NewQuaternion[PlugIn] : _NewSupportShape[PlugIn] : _NewTimeStep[PlugIn] : _NewTool[PlugIn] : _NewVariable[PlugIn] : _NewVector[PlugIn] : _PutInContact[PlugIn] : _ReadDomain[PlugIn] : _ReadFEDomain[PlugIn] : _RecordExpression[PlugIn] : _ReleaseElPowerAsHeat[PlugIn] : _Rotate[PlugIn] : _SaveDomain[PlugIn] : _SetContinuousDensity[PlugIn] : _SetDensity[PlugIn] : _SetElasticProperty[PlugIn] : _SetFEMaterial[PlugIn] : _SetLinearVelocity[PlugIn] : _SetOfOperator[PlugIn] : _SetOverallMass[PlugIn] : _SolverCD[PlugIn] : _SphApplyPressureForce[PlugIn] : _SphApplyViscousForce[PlugIn] : _SphClearInteraction[PlugIn] : _SphUpdateInteraction[PlugIn] : _SphUpdateLocalDensity[PlugIn] : _SphUpdatePressure[PlugIn] : _ThermalExpansion[PlugIn] : _Translate[PlugIn] : _UpdateSupportShape[PlugIn] : _UpdateVoronoiDomain[PlugIn] : _VoronoiDomain[PlugIn] : _WriteSensorData[ShapeBase] : Box[ShapeBase] : Cone[ShapeBase] : Cylinder[ShapeBase] : Disk[ShapeBase] : Plane[ShapeBase] : Polyhedron[ShapeBase] : Rectangle[ShapeBase] : Sphere[UpdateStrategy<DEM::DiscreteElement, DEM::DiscreteElement>] : IterLoop[UpdateStrategy<DEM::DiscreteElement, DEM::SupportShape>] : IterLoop[UpdateStrategy<DEM::DiscreteElement, DEM::Tool>] : IterLoop[UpdateStrategy<Physic::Body, Physic::Body>] : IterLoop[UpdateStrategy<Physic::Body, Physic::Ground>] : IterLoop[UpdateStrategy<Physic::Particle, Physic::Ground>] : IterLoop[Variable] : dt[Variable] : it[Variable] : tBetween2SetOf/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libDEM/ContactDetection/Between2SetOf.cppThe Between2SetOf broadphase uses raw method to detect method between two SetOf of DEM::DiscreteElement. Note that this algo is optimized for DEM::DiscreteElement, you don't need a NarrowPhase approach.
DEM::DiscreteElementDEM::DiscreteElement
DEM::DiscreteElement
<... BroadPhase="Between2SetOf" Set1="Xmin" Set2="Boundary" .../>
Hash/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCollision/BroadPhase/Hash.cppThe Hash broadphase method implements the "Nearest Neighbor Search" Hashing method 1. This method must be validated and optimized, use it with attention. This algo use space partitioning method and is quite similar to the Lcm method.
To work with all kind of shape, the bounding sphere of each shape are considered instead of their real shapes.
Because of this approximation, you need a NarrowPhase approach in addition of this method.
Physic::Body andPhysic::Particle`<... BroadPhase="Hash" .../>
1 Indyk, P., & Motwani, R. (1998, May). Approximate nearest neighbors: towards removing the curse of dimensionality. In Proceedings of the thirtieth annual ACM symposium on Theory of computing (pp. 604-613). ACM.
LCM/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libDEM/ContactDetection/LCM.cppThe Lcm broadphase method uses the Linked Cell algorithm 1 to search contacts in the whole domain.
Note that this LCM version is optimized for DEM::DiscreteElement, so you do not need a NarrowPhase approach in addition of this method.
DEM::DiscreteElement<... BroadPhase="LCM" .../>
1 Welling, U., & Germano, G. (2011). Efficiency of linked cell algorithms. Computer Physics Communications, 182(3), 611-615.
Raw/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libDEM/ContactDetection/Raw.cppThe Raw broadphase method uses a really stupid and non-optimized method to search contacts in the whole domain.
Note that this LCM version is designed for DEM::DiscreteElement, so you do not need a NarrowPhase approach in addition of this method
DEM::DiscreteElement<... BroadPhase="Raw" Set="Boundary" .../>
SupportShape/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libDEM/ContactDetection/SupportShape.cppThe SupportShape broadphase method allows to detect contact between a DEM::SupportShape and DEM::DiscreteElement.
Note that this version is optimized for DEM::DiscreteElement, so you do not need a NarrowPhase approach in addition of this method.
DEM::DiscreteElement / DEM::SupportShapeDEM::DiscreteElement SetOf to perform the contact detection.
<... BroadPhase="SupportShape" SupportShapeID="Box" Mode="INSIDE" .../>
Tool/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libDEM/ContactDetection/Tool.cppThe Tool broadphase method allows to detect contact between a DEM::Tool and DEM::DiscreteElement.
Note that this version is optimized for DEM::DiscreteElement, so you do not need a NarrowPhase approach in addition of this method.
DEM::DiscreteElement / DEM::ToolDEM::DiscreteElement SetOf to perform the contact detection.
<.... BroadPhase="Tool" ToolID="Box" .../>
AABBTree/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCollision/BroadPhase/AABBTree.cppThe AABBTree broadphase method takes advantage of an Axis Aligned Bounding Boxes Tree to speed-up the search of contacts in the whole domain or in a set of Physic::Body.
The AABB tree is built at the first run of this broad phase. It consists in the insertion of all bodies stored inside the defined by Set. Once the tree is built, the update operations consist in the update of the position of the AABBs that hold each body.
The contact search consists in searching each pair of AABBs that overlap themselves, which means potential contact between the bodies they hold. Once the pairs of potentially colliding bodies are found, the actual contact detection is performed by the selected NarrowPhase method.
Note that tree updates in terms of add or removal of bodies are triggered by the set from which the AABB Tree was built, and only works with non-global sets. Thus, if the set on which the tree is built is intended to be modified, you need to create a custom set.
Physic::Bodyfat AABBs is an increased number of potential contacting bodies, and thus more NarrowPhase operations.
<.... BroadPhase="AABBTree" Set="myCustomSet" AABBsFatness="0.05" />
Hash/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCollision/BroadPhase/Hash.cppThe Hash broadphase method implements the "Nearest Neighbor Search" Hashing method 1. This method must be validated and optimized, use it with attention. This algo use space partitioning method and is quite similar to the Lcm method.
To work with all kind of shape, the bounding sphere of each shape are considered instead of their real shapes.
Because of this approximation, you need a NarrowPhase approach in addition of this method.
Physic::Body andPhysic::Particle`<... BroadPhase="Hash" .../>
1 Indyk, P., & Motwani, R. (1998, May). Approximate nearest neighbors: towards removing the curse of dimensionality. In Proceedings of the thirtieth annual ACM symposium on Theory of computing (pp. 604-613). ACM.
Lcm/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCollision/BroadPhase/Lcm.cppThe Lcm broadphase method uses the Linked Cell algorithm 1 to search contacts in the whole domain.
To work with all kind of shape, the bounding sphere of each shape are considered instead of their real shapes.
Because of this approximation, you need a NarrowPhase approach in addition of this method.
Physic::Body, SPH::Particle<... BroadPhase="Lcm" .../>
1 Welling, U., & Germano, G. (2011). Efficiency of linked cell algorithms. Computer Physics Communications, 182(3), 611-615.
Raw/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCollision/BroadPhase/Raw.cppThe Raw broadphase method uses a really stupid and non-optimized method to search contacts in the whole domain.
Note that you can use this method in "bi-Set" mode. In this case the method is less stupid and go fastest because the contacts are only searched between two independent SetOf. Tu use it in "bi-set" mode you must specify the Set1 and Set2 attributes
Physic::Body, SPH::ParticleNote that : - The Set1 required the Set2 param. - You can not use the Set param with Set1 or Set2
<.... BroadPhase="Raw" Set1="Wall" Set2="Xmin"/>
<.... BroadPhase="Raw" Set="Boundary" />
Raw/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCollision/BroadPhase/Raw.cppThe Raw broadphase method uses a really stupid and non-optimized method to search contacts in the whole domain.
Note that you can use this method in "bi-Set" mode. In this case the method is less stupid and go fastest because the contacts are only searched between two independent SetOf. Tu use it in "bi-set" mode you must specify the Set1 and Set2 attributes
Physic::Body, SPH::ParticleNote that : - The Set1 required the Set2 param. - You can not use the Set param with Set1 or Set2
<.... BroadPhase="Raw" Set1="Wall" Set2="Xmin"/>
<.... BroadPhase="Raw" Set="Boundary" />
Raw/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCollision/BroadPhase/Raw.cppThe Raw broadphase method uses a really stupid and non-optimized method to search contacts in the whole domain.
Note that you can use this method in "bi-Set" mode. In this case the method is less stupid and go fastest because the contacts are only searched between two independent SetOf. Tu use it in "bi-set" mode you must specify the Set1 and Set2 attributes
Physic::Body, SPH::ParticleNote that : - The Set1 required the Set2 param. - You can not use the Set param with Set1 or Set2
<.... BroadPhase="Raw" Set1="Wall" Set2="Xmin"/>
<.... BroadPhase="Raw" Set="Boundary" />
Lcm/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCollision/BroadPhase/Lcm.cppThe Lcm broadphase method uses the Linked Cell algorithm 1 to search contacts in the whole domain.
To work with all kind of shape, the bounding sphere of each shape are considered instead of their real shapes.
Because of this approximation, you need a NarrowPhase approach in addition of this method.
Physic::Body, SPH::Particle<... BroadPhase="Lcm" .../>
1 Welling, U., & Germano, G. (2011). Efficiency of linked cell algorithms. Computer Physics Communications, 182(3), 611-615.
Standard/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libDEM/ContactLaw/Standard.cppThe description is not available
Standard/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libDEM/ContactLaw/Standard.cppThe description is not available
Standard/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libDEM/ContactLaw/Standard.cppThe description is not available
Standard/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCollision/CallBack/Standard.cppThe standard Contact CallBack in GranOO. Use it to give physical meaning of the contact and control contact response such as : stiffness, adhesion, etc...
Physic::Body, Physic::Ground, Physic::Particle<... CallBack="Standard" Stiffness="1e5" RestitutionCoeff="0.1"
RegularizationType="piecewise" DryFrictionSlope="1e5"
StaticDryFrictionCoeff="0.3" DynamicDryFrictionCoeff="0.2"/>
<... CallBack="Standard" NormalForce="440*d+598*d^2"/>
Standard/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCollision/CallBack/Standard.cppThe standard Contact CallBack in GranOO. Use it to give physical meaning of the contact and control contact response such as : stiffness, adhesion, etc...
Physic::Body, Physic::Ground, Physic::Particle<... CallBack="Standard" Stiffness="1e5" RestitutionCoeff="0.1"
RegularizationType="piecewise" DryFrictionSlope="1e5"
StaticDryFrictionCoeff="0.3" DynamicDryFrictionCoeff="0.2"/>
<... CallBack="Standard" NormalForce="440*d+598*d^2"/>
Standard/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCollision/CallBack/Standard.cppThe standard Contact CallBack in GranOO. Use it to give physical meaning of the contact and control contact response such as : stiffness, adhesion, etc...
Physic::Body, Physic::Ground, Physic::Particle<... CallBack="Standard" Stiffness="1e5" RestitutionCoeff="0.1"
RegularizationType="piecewise" DryFrictionSlope="1e5"
StaticDryFrictionCoeff="0.3" DynamicDryFrictionCoeff="0.2"/>
<... CallBack="Standard" NormalForce="440*d+598*d^2"/>
Box/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libDEM/SupportShapeT.cppUse it to build something with a Shape::Box shape
Class Box is a Volume with rectangular sections:
^ Y
|
|
---------|-----------
/ | /|
dimZ / | / |
/ . / |
/ . / |
/--------------------/ |
| . | |
| .......|...---------> X
| . | |
dimY | . | /
| / | /
| / | /
| / | /
|-------/------------|/
/ dimX
Z
<..something... DimX="1." DimY="1." DimZ="1." />
Cone/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libDEM/SupportShapeT.cppUse it to build something with a Shape::Cone shape.
^ Y
|
|
<---------------- Lenth -------------->
------ |
/ ^ \\-----|
/ R \ \------
/ a \ . \-----
/ d \ . \------
| i | .G \-----
| u | ............................X-----------> X
| s | . /-----
\ + / . /------
\ / . /-----
\ / . /------
\ -----
------/
/
Z
Note that : - the gravity center 'G' is at 1/4 x length from its base - the symmetry axis is along its local X axis
<..something... Radius=".1" Length="1." />
Cylinder/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libDEM/SupportShapeT.cppUse it to build something with a Shape::Cylinder shape
^ Y
|
|
|
|
Length
-------------------------------------
/ R \ . / \
/ a \ - / \
| d | . | |
| i | ..................+--------> X
| u | . | |
\ s / . \ /
\ / . \ /
-------------------------------------
/
/
/
Z
Note that the symmetry axis is along its local X axis
<..something... Radius=".1" Length="1." />
Polyhedron/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libDEM/SupportShapeT.cppUse it to build something with a Shape::Polyhedron shape. A polyhedron model any kind of shape
<..something... File="Bunny.off"/>
Sphere/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libDEM/SupportShapeT.cppUse it to build something with a Shape::Sphere shape.
^ Y
|
|
|
-----+-----
---/ . \---
-/ . \-
/ . \
/ - \
/ . R a d i u s \
| . ............|-----> X
\ . /
\ . /
\ . /
-\ . /-
---\. /---
/-----------
/
Z
<..something... Radius=".1" />
Box/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libDEM/ToolT.cppUse it to build something with a Shape::Box shape
Class Box is a Volume with rectangular sections:
^ Y
|
|
---------|-----------
/ | /|
dimZ / | / |
/ . / |
/ . / |
/--------------------/ |
| . | |
| .......|...---------> X
| . | |
dimY | . | /
| / | /
| / | /
| / | /
|-------/------------|/
/ dimX
Z
<..something... DimX="1." DimY="1." DimZ="1." />
Cone/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libDEM/ToolT.cppUse it to build something with a Shape::Cone shape.
^ Y
|
|
<---------------- Lenth -------------->
------ |
/ ^ \\-----|
/ R \ \------
/ a \ . \-----
/ d \ . \------
| i | .G \-----
| u | ............................X-----------> X
| s | . /-----
\ + / . /------
\ / . /-----
\ / . /------
\ -----
------/
/
Z
Note that : - the gravity center 'G' is at 1/4 x length from its base - the symmetry axis is along its local X axis
<..something... Radius=".1" Length="1." />
Cylinder/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libDEM/ToolT.cppUse it to build something with a Shape::Cylinder shape
^ Y
|
|
|
|
Length
-------------------------------------
/ R \ . / \
/ a \ - / \
| d | . | |
| i | ..................+--------> X
| u | . | |
\ s / . \ /
\ / . \ /
-------------------------------------
/
/
/
Z
Note that the symmetry axis is along its local X axis
<..something... Radius=".1" Length="1." />
Polyhedron/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libDEM/ToolT.cppUse it to build something with a Shape::Polyhedron shape. A polyhedron model any kind of shape
<..something... File="Bunny.off"/>
Sphere/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libDEM/ToolT.cppUse it to build something with a Shape::Sphere shape.
^ Y
|
|
|
-----+-----
---/ . \---
-/ . \-
/ . \
/ - \
/ . R a d i u s \
| . ............|-----> X
\ . /
\ . /
\ . /
-\ . /-
---\. /---
/-----------
/
Z
<..something... Radius=".1" />
GranOO/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCore/Problem.cppThe Problem Xml tag allows to set the main parameters of a simulation. This tag is required in all input files. The structure of a typical GranOO input file is :
<GranOO Version="2.0">
<Problem TotIteration="100000" TimeStep="3e-6" OutDir="Domain"/>
<PreProcessing>
( ... Put pre-processing PlugIn here ...)
</PreProcessing>
<Processing>
( ... Put processing PlugIn here ...)
</Processing>
<PostProcessing>
( ... Put post-processing PlugIn here ...)
</PostProcessing>
</GranOO>
<Problem TotIteration="inf" TimeStep="3e-6" OutDir="Result"/>
NormalRandom/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libMath/FunctionT.hppNormal random fonction. It picks a value following a normal distribution The distribution is defined by it mean and standard deviation values
Use it simply as NormRnd(meanVal, stdVal)
RampAndConstant/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libMath/FunctionT.hppRamp and constant function, useful to apply a progressive loading
| _________Cst__________
| /.
| / .
| / .
|/___________________________
lim
RAC(it, 1000, 1e6)
SineRamp/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libMath/FunctionT.hppSinus ramp function, useful function to apply smooth loading
max| - - - - - - - . . . . . . . . . . . . .
| . |
| . |
| . |
min|. . ____________________________________
duration x (-> Inf)
f(x) = sin((xM_PI)/duration-M_PI_2/2)(final-initial)/2.0+(initial+final)/2.0
SineRamp(t, 0, 1, 2e-4, 0)
UniRandom/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libMath/FunctionT.hppUniform random fonction. It picks a value in the range [min, max] Use it simply as UniRnd(min, max)
WithShape/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCollision/NarrowPhase/WithShape.cppThe "WithShape" narrow phase method allows to (i) detect a contact between a couple of object and (ii) compute exactly the contact parameters (point, normal, etc...) of this couple. For performance reasons, the couple of objects is generally given by a BroadPhase method.
Note that this method is very smart and select the most effective algorithms to compute contacts. At this time two algorithms are provided : - the standard sphere/sphere algorithm - the EPA and GJK algorithms for other kind of shape.
Physic::Body, Physic::Particle, Physic::Ground<... NarrowPhase="WithShape" MaxPenetrationWithSurface="0.01" ... />
WithShape/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCollision/NarrowPhase/WithShape.cppThe "WithShape" narrow phase method allows to (i) detect a contact between a couple of object and (ii) compute exactly the contact parameters (point, normal, etc...) of this couple. For performance reasons, the couple of objects is generally given by a BroadPhase method.
Note that this method is very smart and select the most effective algorithms to compute contacts. At this time two algorithms are provided : - the standard sphere/sphere algorithm - the EPA and GJK algorithms for other kind of shape.
Physic::Body, Physic::Particle, Physic::Ground<... NarrowPhase="WithShape" MaxPenetrationWithSurface="0.01" ... />
WithShape/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCollision/NarrowPhase/WithShape.cppThe "WithShape" narrow phase method allows to (i) detect a contact between a couple of object and (ii) compute exactly the contact parameters (point, normal, etc...) of this couple. For performance reasons, the couple of objects is generally given by a BroadPhase method.
Note that this method is very smart and select the most effective algorithms to compute contacts. At this time two algorithms are provided : - the standard sphere/sphere algorithm - the EPA and GJK algorithms for other kind of shape.
Physic::Body, Physic::Particle, Physic::Ground<... NarrowPhase="WithShape" MaxPenetrationWithSurface="0.01" ... />
Box/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPhysic/GroundT.cppUse it to build something with a Shape::Box shape
Class Box is a Volume with rectangular sections:
^ Y
|
|
---------|-----------
/ | /|
dimZ / | / |
/ . / |
/ . / |
/--------------------/ |
| . | |
| .......|...---------> X
| . | |
dimY | . | /
| / | /
| / | /
| / | /
|-------/------------|/
/ dimX
Z
<..something... DimX="1." DimY="1." DimZ="1." />
Cone/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPhysic/GroundT.cppUse it to build something with a Shape::Cone shape.
^ Y
|
|
<---------------- Lenth -------------->
------ |
/ ^ \\-----|
/ R \ \------
/ a \ . \-----
/ d \ . \------
| i | .G \-----
| u | ............................X-----------> X
| s | . /-----
\ + / . /------
\ / . /-----
\ / . /------
\ -----
------/
/
Z
Note that : - the gravity center 'G' is at 1/4 x length from its base - the symmetry axis is along its local X axis
<..something... Radius=".1" Length="1." />
Cylinder/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPhysic/GroundT.cppUse it to build something with a Shape::Cylinder shape
^ Y
|
|
|
|
Length
-------------------------------------
/ R \ . / \
/ a \ - / \
| d | . | |
| i | ..................+--------> X
| u | . | |
\ s / . \ /
\ / . \ /
-------------------------------------
/
/
/
Z
Note that the symmetry axis is along its local X axis
<..something... Radius=".1" Length="1." />
Disk/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPhysic/GroundT.cppUse it to build something with a Shape::Disk shape. A disk shape is a surface shape.
-
/ ^ \
/ R \
/ a \
/ d \
| i |
| u - --------> X
| s |
\ /
\ /
\ /
\ -
----
Note that the normal is oriented along its local X axis
<..something... Radius=".1" />
Plane/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPhysic/GroundT.cppUse it to build something with a Shape::Plane shape. A plane shape is an infinite surface shape.
/+
/- |
/-- |
/-- |
/- |
--| |
| |
| |
| ---------------> X
| |
| |
| -+
| --/
| -/
| --/
+/
Note that the normal is oriented along its local X axis
<..something... />
Polyhedron/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPhysic/GroundT.cppUse it to build something with a Shape::Polyhedron shape. A polyhedron model any kind of shape
<..something... File="Bunny.off"/>
Rectangle/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPhysic/GroundT.cppUse it to build something with a Shape::Rectangle shape. Note that the Shape::Rectangle is a surface shape.
|Y /+
| /- |
/+- |
/-- | |
/- | |
--| | |
| | |
| | |
| -+--------------> X
| -/ |
+-/ |
-/| -+
Z-/ | --/
| -/
| --/
+/
Note that the normal is oriented along its local X axis
<..something... DimY="1." DimZ="1." />
Sphere/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPhysic/GroundT.cppUse it to build something with a Shape::Sphere shape.
^ Y
|
|
|
-----+-----
---/ . \---
-/ . \-
/ . \
/ - \
/ . R a d i u s \
| . ............|-----> X
\ . /
\ . /
\ . /
-\ . /-
---\. /---
/-----------
/
Z
<..something... Radius=".1" />
_AddVoltageSource/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/AddVoltageSource.cppCreates a voltage source in a DEM::DiscreteElement domain between two discrete elements sets. This plugin must be used in conjunction with the InitElectricalProperties and ConductCurrent plugins.
DEM::Element set that own a DEM::Electrical property<PlugIn Id="_AddVoltageSource" GroundSetOf="Box-xMin" PositiveSetOf="Box-xMax" DCVoltage="1.0"/>
_ApplyBondLoad/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ApplyBondLoad.cppComputes the loads (forces and/or torques) applied by DEM::Bond on the two bonded elements. The calculation is based on the positions and orientations newly computed for each discrete element. Depending on the type of bond, torques are computed or not.
DEM::Bond setDEM::Bond SetOf ID to apply the treatment
<PlugIn Id="_ApplyBondLoad" DeleteDisableBond="Yes" />
_ApplyBrittleFracture/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ApplyBrittleFracture.cppUse the virial stress description to compute brittle fracture. Note that this a work in progress. Not documented yet !
This plugin implement the virial stress failure criterion, for details about this model see 1.
DEM::Element set that own a DEM::BrittleFracture property1 André, D., Jebahi, M., Iordanoff, I., Charles, J. L., & Néauport, J. (2013). Using the discrete element method to simulate brittle fracture in the indentation of a silica glass with a blunt indenter. Computer Methods in Applied Mechanics and Engineering, 265, 136-147.
_ApplyFELoad/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ApplyFELoad.cppCreates a voltage source in a DEM::DiscreteElement domain between two discrete elements sets. This plugin must be used in conjunction with the InitElectricalProperties and ConductCurrent plugins.
DEM::Element set that own a DEM::Electrical property<PlugIn Id="_ReadFEDomain" GroundSetOf="Box-xMin" PositiveSetOf="Box-xMax" DCVoltage="1.0"/>
_ApplyForce/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ApplyForce.cppApplies a force vector with components X, Y and Z to all the Physic::Particle of the associated SetOf. If Resultant option is set to True, the provided vector components are divided by the number of particle in the SetOf.
Physic::Particle setPhysic::Particle SetOf ID to apply the force
<PlugIn Id="_ApplyForce" X="100." Y="-1.*sin(it)" Z="0." Set="xMax"/>
_ApplyGravity/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ApplyGravity.cppApplies the gravity to all the Physic::Particle of the associated SetOf. The gravity is considered as a uniform vector field.
Physic::ParticlePhysic::Particle SetOf ID to apply the gravity<PlugIn Id="_ApplyGravity" X="0." Y="-9.91" Z="0." Set="Global"/>
_ApplyTorque/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ApplyTorque.cppApplies a torque vector with components X, Y and Z to all the Physic::Body of the associated SetOf. If Resultant option is set to True, the provided vector components are divided by the number of particle in the SetOf.
Physic::Body setPhysic::Body SetOf ID to apply the torque
<PlugIn Id="_ApplyTorque" X="100." Y="-1.*sin(it)" Z="0." Set="xMax"/>
_BuildDelaunayElementPairsource file : /home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/BuildDelaunayElementPair.cpp
Build DEM::ElementPair in the provided DEM::DiscreteElement set based on a Delaunay tessellation. The cutoff distance is given by the parameter BondLengthRatioCutoff, which is used to calculate maximum distance between two discrete elements to consider them as bonded. The maximum distance between two discrete elements is expressed in terms of the mean radius of the DEM::Element.
+ Process on : `DEM::ElementPair` set
+ Multithreaded : No
+ Recommended section: PreProcessing, PostProcessing
BondLengthRatioCutoff (float, default=2.0)
: The maximal acceptable length of bonds.
```
<PlugIn Id="_BuildDelaunayElementPair" BondLengthRatioCutoff="2.0" />
```
_BuildGridDomain/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/BuildGridDomain.cppBuild a parallelepiped discrete elements domain, with dimensions DimX, DimY and DimZ, with number of DEM::DiscreteElement defined by ElementNumber. By default, a dispersion factor is be applied to each discrete element position and radius, using parameters Dispersion and RadiusDispersion, respectively. To generate a simple cubic crystalline domain, both dispersion parameters must be set to 0. Finally, the discrete elements belonging to faces of the parallelepiped will have their center perfectly adjusted on their respective plane, except if PerfectBoundaries is set to False. Note that you may use this PlugIn in addition to the BuildDelaunayBond to build a full DEM discrete domain.
DEM::DiscreteElement<PlugIn Id="_BuildGridDomain" DimX="0.01" DimY="0.01" DimZ="0.1" ElementNumber="2000"/>
_BuildNeighbourElementPair/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/BuildNeighbourElementPair.cppThis plugin allows to build bonds between neighbouring DEM::DiscreteElement in the SetOf. Two discrete elements are considered as bonded when an interpenetration is detected. In this first case, the coordination number of the domain is an output.
It is also possible to force the coordination number by turning parameter ForceCardinality to True, and by setting the value of WantedCardinalityValue, which thus becomes an input. In this second case, you must specify a valid SetOf name to parameter BoundarySet. This set of discrete elements is used to increase the precision of the coordination number calculation.
DEM::ElementPair set<PlugIn Id="_BuildNeighbourElementPair" ForceCardinality="Yes" WantedCardinalityValue="8." BoundarySet="Boundary"/>
_Check/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/Check.cppThis plugin checks the validity of numerical computation. If any NaN (Not a Numerical) value is found in data, the calculation is immediately stopped. It can be used at any place where you want to ensure numerical computation integrity.
Physic::Particle<PlugIn Id="_Check"/>
_ClearLoad/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ClearLoad.cppResets all the external loads (forces and torques) associated to the Physic::Particle and Physic::Body of the domain.
Physic::Particle and Physic::Body SetOf ID to apply the treatment
<PlugIn Id="_ClearLoad"/>
_ComputeOptimalTimeStep/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ComputeOptimalTimeStep.cppComputes an indicator on the greatest time step value that ensures numerical integration stability. This value is related to 2piomega, where omega is the highest natural frequency of all the mass-stiffness resonators.
Physic::CriticalTime objectsPhysic::Time ID to use. This alternatrive time step may be created with the NewTimeStep plugin. By default the main time step is chosen.
<PlugIn Id="_ComputeOptimalTimeStep" Ratio="0.1"/>
_ComputeStrainTensor/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ComputeStrainTensor.cppThis PlugIn computes strain tensors based on a least square method.
DEM::Element with DEM::StrainTensor property_ComputeVirialStress/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ComputeVirialStress.cppThis PlugIn computes the virial stress [1,2] for each specified DEM::Element The virial stress used here can be used as the classical cauchy stress tensor in continuum mechanics. Note that this plugin is quiet complex, you can use the simplest interface with the SetElasticProperty plugin.
DEM::Element with DEM::VirialStress propertys1, s2 and s3 variables. Note that s1 > s2 > s3. For example, if you put s1 > 10e6, you set a max principal stress criterion equal to 10 MPa. You can use the syntax allowed by [3], to build complex criterion such as s1 > 10e6 or s3 < -100e6. In this case, a new criterion is added in compression.
DEM::Element that reach the failure criterion are added to a particular SetOf named "crack"
DEM::Bond connected with the DEM::Element * HALF_PLANE : the failure criterion is applied on the half DEM::Bond connected with the DEM::Element * CLOSEST : the failure criterion is applied on only one DEM::Bond connected with the DEM::Element
<PlugIn Id="_ComputeVirialStress" NeighbourLevel="1" MaxPrincipalCriterion="65"
ApplyCriterionOn="CLOSEST" FailureMode="BRITTLE" IncludeVelocity ="True" />
<PlugIn Id="_ComputeVirialStress" FailureMode="BRITTLE" ApplyCriterionOnSet="Breakable"
NeighbourLevel="0" IterLoop="5"
CriterionLaw="s1>C1 or s3<C2"
CriterionVar="C1=UniRnd(8e6,12e6);C2=UniRnd(-120e6,-80e6)"/>
[2]: Andre, D., Jebahi, M., Iordanoff, I., Charles, J. L., & Neauport, J. (2013). Using the discrete element method to simulate brittle fracture in the indentation of a silica glass with a blunt indenter. Computer Methods in Applied Mechanics and Engineering, 265, 136-147. [3]: https://github.com/ArashPartow/exprtk
_ComputeVolumeFraction/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ComputeVolumeFraction.cppThis plugin compute the volume fraction of arbitrary granular domains thanks to a voronoi tesselation.
DEM::DiscreteElement<PlugIn Id="_ComputeVolumeFraction"/>
_ConductCurrent/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ConductCurrent.cppSolves the electrical state related to the applied voltage source through the AddVoltageSource plugin. The domain is assumed as a large electrical resistances network, where a resistance exists when two discrete elements are in contact. The system assembly is performed using the Graphs method, and is solved in one time step using a Conjugate Gradient iterative (implicit) solver. This means that if there is no change in the domain geometry, this plugin can be called only once, for instance by setting Max to IterLoop.
At the end of the plugin processing, the electrical state of the discrete domain is fully known, i.e. the electrical potentials, electrical currents and domain equivalent resistance between the electrical pins defined by the AddVoltageSource plugin. The details of the implementation are given in 1.
DEM::DiscreteElement set that own a DEM::Electrical property<PlugIn Id="_ConductCurrent" Verbose="Yes" IterLoop="Max"/>
1 Hubert, C., André, D., Dubar, L., Iordanoff, I., & Charles, J. L. (2017). Simulation of continuum electrical conduction and Joule heating using DEM domains. International Journal for Numerical Methods in Engineering, 110(9), 862-877.
_ConductHeat/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ConductHeat.cppComputes the new thermal state of the discrete domain, related to the thermal boundary conditions applied through the ApplyThermalLoading plugin. The thermal solution is calculated explicitly, based on the mechanical stable time increment (calculated by the ComputeOptimalTimeStep plugin), or based on the global time increment defined in the Problem XML tag.
DEM::DiscreteElement set that own a DEM::Thermal propertyDEM::DiscreteElement SetOf ID to apply the treatment
Physic::Time ID to use. This alternatrive time step may be created with the NewTimeStep plugin. By default the main time step is chosen.
<PlugIn Id="_ConductHeat"/>
_ConductHeatWithFS/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ConductHeatWithFS.cppCalculates the new thermal state of the discrete domain, related to the thermal boundary conditions applied through the ApplyThermalLoading plugin. The thermal solution is calculated explicitly, based on the mechanical stable time increment (calculated by the ComputeOptimalTimeStep plugin), or based on the global time increment defined by the _Problem XML tag.
This plugin works in the same way as its counterpart ConductHeat except that it takes into account the domain free surfaces, which are determined automatically based on the barycenter of the neighbors surrounding a given discrete element.
DEM::DiscreteElement set that own a DEM::Thermal property<PlugIn Id="_ConductHeatWithFS"/>
_Convert/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/Convert.cppReplaces some items of a given type by other items of another type. In fact this PlugIn is a smart interface to all the ConvertTo PlugIn. Please refer to the documentation of each specific ConvertTo to get the complete list of the allowed parameters.
DEM:Bond or Core::Pair<DEM::Element> setDEM::Bond SetOf ID to apply the treatment
<PlugIn Id="_Convert"/>
_ConvertBondToElementPair/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ConvertBondToElementPair.cppReplaces all the DEM::Bond instances by DEM::ElementPair instances.
DEM:Bond setDEM::Bond SetOf ID to apply the treatment
<PlugIn Id="_ConvertBondToElementPair"/>
_ConvertElementPairToBeam/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ConvertElementPairToBeam.cppReplaces all the element pair (Core::Pair<DEM::Element> class) by DEM::Beam. If you create an initial discrete domain with the cooker program, it contains only virtual bonds. You can use this plugin in the pre-processing section to replace all these virtual bonds by usable beam. Cohesive beam are especially designed to simulate continuous domains. For details see 1.
Note that you can use the _SetElasticParameter PlugIn to avoid fastidious calibration step and set directly the macroscopi elastic parameters of your domain.
<PlugIn Id="_ConvertElementPairToBeam" YoungModulus="1.2e11" PoissonRatio="0.3" RadiusRatio="0.28" Set="xMax"/>
1 André, D., Iordanoff, I., Charles, J. L., & Néauport, J. (2012). Discrete element method to simulate continuous material by using the cohesive beam model. Computer Methods in Applied Mechanics and Engineering, 213, 113-125.
_ConvertElementPairToFlatBond/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ConvertElementPairToFlatBond.cppReplaces all the element pair (Core::Pair<DEM::Element> class) by DEM::FlatBond. If you create an initial discrete domain with the cooker program, The spring can be breakable by giving a strain threshold with FailureStrainLimit.
Core::Pair<DEM::Element> set<PlugIn Id="_ConvertElementPairToFlatBond" YoungModulus="72e9" PoissonRatio="0.17" MaxStress="50e6"/>
_ConvertElementPairToPlasticBeam/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ConvertElementPairToPlasticBeam.cppReplaces all the element pair (Core::Pair<DEM::Element> class) by DEM::PlasticBeam. The DEM::PlasticBeam class inherits from the DEM::Beam class. So, you can set also all the parameters of the _ConvertElementPairToBeam PlugIn.
BE AWARE, THIS IS AN EXPERIMENTAL WORK !!!
<PlugIn Id="_ConvertElementPairToPlasticBeam" YoungModulus="1.2e11" RadiusRatio="0.28"
UltimateElongationTreshold="1.2"/>
_ConvertElementPairToPlasticBeamIT/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ConvertElementPairToPlasticBeamIT.cppReplaces all the element pair (Core::Pair<DEM::Element> class) by DEM::PlasticBeamIT. The DEM::PlasticBeamIT class inherits from the DEM::Beam class. So, you can set also all the parameters of the _ConvertElementPairToBeam PlugIn.
BE AWARE, THIS IS AN EXPERIMENTAL WORK !!!
<PlugIn Id="_ConvertElementPairToPlasticBeamIT" YoungModulus="1.2e11" RadiusRatio="0.28"
UltimateElongationTreshold="1.2"/>
_ConvertElementPairToSpring/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ConvertElementPairToSpring.cppReplaces all the element pair (Core::Pair<DEM::Element> class) by DEM::Spring. If you create an initial discrete domain with the cooker program, The spring can be breakable by giving a strain threshold with FailureStrainLimit.
Core::Pair<DEM::Element> setCore::Pair<DEM::Element> SetOf ID to apply the treatment
<PlugIn Id="_ConvertElementPairToSpring" Stiffness="1.5e7" RestitutionCoeff="0.9"/>
_Delete/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/Delete.cppThis plugin delete the specified items.
Core::Base, DEM::Element, Physic::Body, Physic::Ground and so on...
Physic::Ground, DEM::Tool or DEM::SupportShape
<PlugIn Id="_Delete" What="Physic::Ground"/>
<PlugIn Id="_Delete" What="DEM::SupportShape" ID="Boundary"/>
_DeleteUnbondedElement/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/DeleteUnbondedElement.cppDelete all the unbonded DEM::Element. The related DEM::Element are said as alone and they may induce some problems in some simulations.
DEM::Element and DEM::Bond setDEM::Element SetOf ID to apply the treatment
<PlugIn Id="_DeleteUnbondedElement" Verbose="True"/>
_DisplayInfo/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/DisplayInfo.cppA plugin that displays some information at screen. It is almost an example plugin that let you understand how to implement your own plugin thanks to copy/paste/modify some C++ source code. Also, it may be useful to print a specific message by triggering it when a bond is disabled using the TriggerOnSignal parameter.
<PlugIn Id="_DisplayInfo" Message="Hello, GranOO User !!"/>
<PlugIn Id="_DisplayInfo" Message="A bond was disabled." TriggerOnSignal="DisableBond"/>
_EnergyBalance/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/EnergyBalance.cppTrigger the energy balance recording. TODO: Need to be documented.
_ExportToPVD/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ExportToPVD.cppExports the domain data to ParaView Data format (.pvd file), for further post treatment in the free and open-source ParaView, developed by Kitware paraview. Most of the fields available in the GddViewer are available in ParaView, and are defined by the Field parameter.
To specify which data must be exported into the .pvd file, the starting point is to define the Field parameter, using values All or Nothing. Then, you can add or remove a specific magnitude from a specific classes. For example, if Field="Nothing", you will add the acceleration quantities related to the discrete elements using Element_add="Acceleration". Similarly, if you want to export all parameters but not the torsion stress from beams, you would use Beam_rm="CurrentTorsionStress".
<PlugIn Id="_ExportToPVD" Field="Nothing" Element_add="Acceleration" StepTime="1.0e-5"/>
<PlugIn Id="_ExportToPVD" Field="All" IterLoop="100"/>
_ImposeDisplacement/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ImposeDisplacement.cppThis plugin imposes a displacement on a specified Physic::Particle set. The imposed displacement is specified either by setting the imposed displacement vector components X, Y and Z, or by setting parameter Clamp to Yes (which corresponds to X="0.", Y="0." and Z="0.").
In addition to numeric values, the imposed displacement vector also accepts expression which can be set thought the Expression XML Tag (outline definition), or by direct typing of formula (inline definition).
The velocity and the acceleration are also affected by this plugin : - velocity is set as the first derivative of the imposed displacement - acceleration is set as the second derivative of the imposed displacement
Physic::Particle set, Physic::Ground itemPhysic::Particle SetOf ID to apply the treatment
<PlugIn Id="_ImposeDisplacement" X="0." Y="1.3*t" Z="0."/>
<PlugIn Id="_ImposeDisplacement" Clamp="Yes"/>
<PlugIn Id="_ImposeDisplacement" X="0." Y="1.3*t" Z="0." GroundID="ground-plane"/>
_ImposeFEDisplacement/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ImposeFEDisplacement.cppThis plugin imposes a displacement on a specified Physic::Particle set. The imposed displacement is specified either by setting the imposed displacement vector components X, Y and Z, or by setting parameter Clamp to Yes (which corresponds to X="0.", Y="0." and Z="0.").
In addition to numeric values, the imposed displacement vector also accepts expression which can be set thought the Expression XML Tag (outline definition), or by direct typing of formula (inline definition).
The velocity and the acceleration are also affected by this plugin : - velocity is set as the first derivative of the imposed displacement - acceleration is set as the second derivative of the imposed displacement
Physic::Particle set, Physic::Ground itemPhysic::Particle SetOf ID to apply the treatment
<PlugIn Id="_ImposeFEDisplacement" X="0." Y="1.3*t" Z="0."/>
<PlugIn Id="_ImposeFEDisplacement" Clamp="Yes"/>
<PlugIn Id="_ImposeFEDisplacement" X="0." Y="1.3*t" Z="0." GroundID="ground-plane"/>
_ImposeOrientation/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ImposeOrientation.cppThis plugin imposes an orientation on a specified Physic::Body set. The imposed orientation is specified either by setting the imposed orientation quaternion components X, Y, Z, and R. or by setting parameter Clamp to Yes (which corresponds to X="0.", Y="0.", Z="0." and R="1.").
In addition to numeric values, the imposed displacement vector also accepts expression which can be set thought the Expression XML Tag (outline definition), or by direct typing of formula (inline definition).
The angular velocity and acceleration are also affected by this plugin.
Physic::Body set<PlugIn Id="_ImposeOrientation" Clamp="Yes"/>
_ImposeRotation/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ImposeRotation.cppThis plugin imposes a rigid rotation on a specified Physic::Body set. Here, the process is different from the ImposeOrientation PlugIn because the set is considered as a rigid body that moves.
The imposed rotation is specified through an angle, an axis and center.
Physic::Body setPhysic::Body SetOf ID to apply the treatment
<PlugIn Id="_ImposeRotation" Axis="( 1.,0.,0.)" Center="Centroid" Angle="angle" Set="Cylinder-xMax"/>
_ImposeTemperature/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ImposeTemperature.cppApplies the provided Temperature value to all DEM::Element in the SetOf defined by the ElementSet. This plugins requires to run the InitThermalProperties plugin in the PreProcessing section of the input file.
DEM::ElementDEM::Element SetOf ID to apply the temperature
<PlugIn Id="_ImposeTemperature" Temperature="798." Set="Cylinder-xMin"/>
_InitElectricalProperties/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/InitElectricalProperties.cppInitializes the electrical properties of the specified DEM::Element set. You can specify the name of the set.
DEM::Element set that own a DEM::Electrical propertyNote that you MUST specify the material electrical resistivity OR conductivity. These two parameters are mutually exclusive.
DEM::Element SetOf ID to apply the treatment
<PlugIn Id="InitElectricalProperties" Resistivity="0.73e-6"/>
_InitThermalProperties/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/InitThermalProperties.cppInitializes the thermal properties of the specified DEM::Element set. You can specify the name of the set.
DEM::Element set that own a DEM::Thermal propertyDEM::Element SetOf ID to apply the treatment
<PlugIn Id="_InitThermalProperties" Temperature="0" Cp="500" Conductivity="15" />
_IntegrateAcceleration/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/IntegrateAcceleration.cppComputes the new positions and angular positions for all the Physic::Body and/or Physic::Particle. Performs a numerical integration of the linear (on Physic::Particle) and the angular acceleration (on Physic::Body) to compute the new position values.
The integration scheme is derived from Tchamwa–Wielgosz (TW) 1 scheme, with a damping coefficient. It produces some numerical damping when the time step is close to the critical value given by the plugin ComputeOptimalTimeStep. One can use beta = 1.3 to produce significant damping and beta = 0.5 produces no damping effect (default value).
Physic::Particle and Physic::BodyPhysic::Body and Physic::Particle) to apply the treatment
Physic::Time ID to use. This alternatrive time step may be created with the NewTimeStep plugin. By default the main time step is chosen.
<PlugIn Id="_IntegrateAcceleration" Linear="Yes" Angular="No"/>
1 Mahéo, L., Grolleau, V., & Rio, G. (2009). Damping efficiency of the Tchamwa–Wielgosz explicit dissipative scheme under instantaneous loading conditions. Comptes Rendus Mécanique, 337(11-12), 722-732.
_InteractionHistogram/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/InteractionHistogram.cppThis plugin creates a 3D histogram that displays bond interaction direction. It is usefull to check geometrical isotropy or anisotropy. Note that this plugin will erase completly the current domain from memory. The domain is replaced by polyhedron that represent the 3D chart. You can use directly this plugin in the 'granoo-viewer'.
DEM::DiscreteElement<PlugIn Id="_InteractionHistogram"/>
_ManageCollision/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ManageCollision.cppManages collision between two types. This PlugIn is the main interface to the collision detection algorithm. Note that this PlugIn instantiate the right Collision::Manager object (depending on the Between field).
A Collision::Manager object allows to plug different kind of collision detection algorithms such as : - a Collision::BroadPhase algorithm -> preliminary approach - a Collision::UpdateStrategy -> a strategy to avoid re-computation of contact pairs - a Collision::NarrowPhase algorithm -> closest approach - a Collision::CallBack function triggered when a collision is detected.
Collision::BroadPhase Method. Note that you can list all the available BroadPhase by typing granoo -d -f BroadPhase. Please refer to the documentation of the chosen BroadPhase to get the list of available option.
Collision::CallBack Method. Note that you can list all the available CallBack by typing granoo -d -f CallBack. Please refer to the documentation of the chosen CallBack to get the list of available option.
Collision::UpdateStrategy Method. Note that this feature is optional. If you choose an update strategy method, the contact pairs detected by the broadphase method are recorded in an array. This array is used instead of on-the-fly contact detection to avoid useless computations. ote that you can list all the available BroadPhase by typing granoo -d -f UpdateStrategy. Please refer to the documentation of the chosen BroadPhase to get the list of available option.
Note that you can list all the available BroadPhase by typing granoo -d -f BroadPhase. Please refer to the documentation of the chosen BroadPhase to get the list of available option.
Collision::NarrowPhase Method. Note that you can list all the available NarrowPhase by typing granoo -d -f NarrowPhase Please refer to the documentation of the chosen NarrowPhase to get the list of available option. The NarrowPhase method is optional because some BroadPhase algorithm treat on-the-fly and embed the NarrowPhase collision step.
For discrete element (optimized for spherical shapes) :
<PlugIn Id="_ManageCollision" Between="DiscreteElement/DiscreteElement"
BroadPhase="LCM" Set="Global"
CallBack="Standard" Stiffness="1e5"
RegularizationType="piecewise" DryFrictionSlope="1e5" StaticDryFrictionCoeff="0.1" DynamicDryFrictionCoeff="0.01"
RestitutionCoeff="0.9"/>
For body with various kind of shapes :
<PlugIn Id="_ManageCollision" Between="Body/Body"
BroadPhase="Lcm"
NarrowPhase="WithShape"
CallBack="Standard" Stiffness="1e5" RestitutionCoeff="0.1"
RegularizationType="piecewise" DryFrictionSlope="1e5"
StaticDryFrictionCoeff="0.3" DynamicDryFrictionCoeff="0.2"/>
_MonitorItemNumber/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/MonitorItemNumber.cppThis plugin delete the specified items.
Core::Base, DEM::Element, Physic::Body, Physic::Ground and so on...
Physic::Ground, DEM::Tool or DEM::SupportShape
<PlugIn Id="_MonitorItemNumber" What="Physic::Ground"/>
<PlugIn Id="_MonitorItemNumber" What="DEM::SupportShape" ID="Boundary"/>
_NewExpression/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/NewExpression.cppCreates a new Math::Expression with a given ID
Math::Expression::Glob("ID")
<PlugIn Id="_NewExpression" F="Sin(3*t)+4" ID="Sinus" />
_NewFrame/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/NewFrame.cppCreates a new Geom::Frame with a given ID
Geom::Frame. The new Geom::Frame can be retrieved in C++ code with Geom::Frame::Glob("ID")
<PlugIn Id="_NewFrame" Center="Pt" Quat="Qt" ID="F1" />
<PlugIn Id="_NewFrame" Center="Pt" ID="F2" />
<PlugIn Id="_NewFrame" Center="(0,0,1)" ID="F3" />
<PlugIn Id="_NewFrame" Center="(0,0,1)" Quat="(0,0,1)(90)" ID="F4" />
_NewGround/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/NewGround.cppCreates a new Physic::Ground with a given ID
To get the list of all the available attributes please refer to the specific documentation of each tool. To get this documentation, simply run granoo with the following argument granoo -d -f Ground
Physic::Ground::Glob("ID") or by its child class such as Physic::GroundT<Shape::Sphere>::Glob("ID").
<PlugIn Id="_NewGround" Type="Sphere" Radius="1.0" ID="Sphere"/>
_NewPoint/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/NewPoint.cppCreates a new Geom::Point with a given ID
Geom::Point can be retrieved in C++ code with Geom::Point::Glob("ID")
<PlugIn Id="_NewPoint" Val="(1.0, 0.3, 0.)" ID="hello"/>
_NewQuaternion/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/NewQuaternion.cppCreates a new Geom::Quaternion with a given ID
Geom::Quaternion. The new Geom::Quaternion can be retrieved in C++ code with `Geom::Quaternion::Glob("ID")``
<PlugIn Id="_NewQuaternion" Val=(1.0, 0.3, 0.) ID="hello"/>
_NewSupportShape/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/NewSupportShape.cppCreates a new DEM::SupportShape with a given ID. A DEM::SupportShape is a shape that contains a discrete domain. You can associate the DEM::SupportShape with this discrete domain. If you call UpdateSupportShape PlugIn the length of the support shape is recomputed from the state of its associated discrete elements.
DEM::SupportShape. It must be a Cylinder, a Cone, etc...
Physic::Ground::Glob("ID") or by its child class such as Physic::GroundT<Shape::Sphere>::Glob("ID").
To get the list of all the available attributes please refer to the specific documentation of each tool. To get this documentation, simply run granoo with the following argument granoo -d -f SupportShape
<PlugIn Id="_NewSupportShape" Type="Sphere" Radius="1.0" ID="SHShape"/>
_NewTimeStep/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/NewTimeStep.cppCreates a new Physic::Time with a given ID. This feature may be used when multiple time steps are required. For example, a simulation may embed a mechanical time step and a thermal time step with different values.
Physic::Time
Note that you can retrieve your time step in C++ code with the Physic::Time::Glob("ID") static method. In addition, new Math::Variable are dynamically created. You can retrieve them as t_ID, it_ID, dt_ID and use them to construct expression in your inp file.
<PlugIn Id="_NewTimeStep" Val="1e-3" ID="Thermal"/>
_NewTool/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/NewTool.cppCreates a new DEM::Tool with a given ID. A DEM::Tool is a body that may interact and collide with DEM::DiscreteElement.
DEM::Tool::Glob("ID") or by its child class such as DEM::ToolT<Shape::Shere>::Glob("ID").
To get the list of all the available attributes please refer to the specific documentation of each tool. To get this documentation, simply run granoo with the following argument granoo -d -f Tool
<PlugIn Id="_NewTool" Type="Sphere" Radius="1.0" ID="HelloSphere"/>
_NewVariable/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/NewVariable.cppCreates a new Math::Variable with a given ID
Math::Variable. The new Math::Variable can be retrieved in C++ code with Math::Variable::Glob("expression_id")
<PlugIn Id="_NewVariable" Val="6.28" ID="TWO_PI"/>
_NewVector/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/NewVector.cppCreates a new Geom::Vector with a given ID
Geom::Vector. The new Geom::Vector can be retrieved in C++ code with Geom::Vector;;Glob("ID")
<PlugIn Id="_NewVector" Val=(1.0, 0.3, 0.) ID="hello"/>
_PutInContact/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/PutInContact.cppPut a body with a given ID in contact with others. This plugin is useful when you create a Tool with the NewTool plugin. You can place your tool aproximately with the NewTool plugin and start the simulation with the tool very close from your domain. The algorithm implemented here is a kind of dichotomy algorithm. So, you need a - an initial step used to move the body, - a direction vector used to move the body and - a precision used to stop the calculation.
Physic::BodyPhysic::Body set used to compute contact
<PlugIn Id="_PutInContact" ID="indentor" Direction="(0,-1,0)" InitialStep="0.000001" Precision="1e-10"/>
_ReadDomain/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ReadDomain.cppThis plugin read a discrete domain file and load it in the current simulation.
<PlugIn Id="_ReadDomain" FileName="Hello.agdd" Set="Hello"/>
_ReadFEDomain/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ReadFEDomain.cppCreates a voltage source in a DEM::DiscreteElement domain between two discrete elements sets. This plugin must be used in conjunction with the InitElectricalProperties and ConductCurrent plugins.
DEM::Element set that own a DEM::Electrical property<PlugIn Id="_ReadFEDomain" GroundSetOf="Box-xMin" PositiveSetOf="Box-xMax" DCVoltage="1.0"/>
_RecordExpression/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/RecordExpression.cppRecord the value of a mathematical expression. The related expression must be inlined or outlined.
Math::Expression<PlugIn Id="_RecordExpression" Expression="sin(t)" SensorLabel="Sine"/>
<PlugIn Id="_RecordExpression" Expression="SineRamp" SensorLabel="Sine"/>
_ReleaseElPowerAsHeat/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ReleaseElPowerAsHeat.cppReleases the electrical power, computed by the ConductCurrent plugin, as heat. The amount of released electrical power can be adjusted with the non-dimensional factor eta, where eta is in the range [0, 1]. When eta=0, no electrical power is released, while eta=1 means that 100% of the electrical power is released as heat.
DEM::Element set that own a DEM::Electrical and DEM::Thermal propertiesDEM::DiscreteElement SetOf ID to apply the treatment
<PlugIn Id="_ReleaseElPowerAsHeat" Factor="0.9" />
_Rotate/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/Rotate.cppImpose a rigid body rotation to a given Physic::Particle set and Physic::Ground set. If the specified set contains also Physic::Body, the bodies are also self-rotated. You must set : - a rotation center - a quaternion : directly or by given axis vector and an angle
Note that angular velocities and acceleration are not affected by the imposed movement.
Physic::Particle, Physic::Body, Physic::GroundBecause Quaternion are not intuitive, you can either enter the following Axis and Angle entry instead of the Quat entry.
Physic::Particle SetOf ID and Physic::Body ID to apply the treatment
<PlugIn Id="_Rotate" Center="(0.,0.,0.)" Angle="90" Axis="(1., 0., 0.)" Set="Global"/>
_SaveDomain/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/SaveDomain.cppWrites the simulation state in a file. 3 file formats are available:
the .gdd format that store a complete copy of the simulation state. Be carefull, this format is not good for portability.
the .agdd format that store a simplified version of the state. This format is very simple and ensure portability. Note that this format is dedicated for DEM simulations.
the .lgdd format that store a simplified version of the state. This format ensure portability and may work with any kind of simulations.
Note that you can visualize these files with the gddViewer program. If you want to use paraview, you have to use the ExportToPVD PlugIn instead.
<PlugIn Id="_SaveDomain" IterLoop="50"/>
<PlugIn Id="_SaveDomain" Expression="if ((t>=20 and t<=30), 1, 0)" Type="lgdd"/>
<PlugIn Id="_SaveDomain" FileName="DiscreteDomain1.gdd"/>
_SetContinuousDensity/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/SetContinuousDensity.cppSet the density of all the DEM::DiscreteElement associated with a DEM::SupportShape. The input density is corrected by the volumic fraction of the discrete domain associated with the perfect continuous DEM::SupportShape. The value of the volumic fraction is computed on-the-fly.
DEM::DiscreteElement and DEM::SupportShape<PlugIn Id="_SetContinuousDensity" Density="7000." DEM::SupportShape="Box"/>
_SetDensity/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/SetDensity.cppSet the density of a Physic::Body set
Physic::Body setPhysic::Body SetOf ID to apply the treatment
<PlugIn Id="_SetDensity" Density="7000." Set="Box"/>
_SetElasticProperty/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/SetElasticProperty.cppThis PlugIn set the required parameters for simulating a continuous brittle elastic media. In fact, it is just a smart interface to the ConvertBondToBeam and ComputeVirialStress plugIn. You can see an example in Example/Continuous/TensileTest/inp/BrittleTension.inp Don't forget to activate the computation of beam with the ApplyBondLoad processing plugin.
DEM::ElementComputeVirialStress processing plugin.
<PlugIn Id="_SetElasticProperty" YoungModulus="72e9" PoissonRatio="0.2" MaxStress="50e6"/>
_SetFEMaterial/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/SetFEMaterial.cppCreates a voltage source in a DEM::DiscreteElement domain between two discrete elements sets. This plugin must be used in conjunction with the InitElectricalProperties and ConductCurrent plugins.
DEM::Element set that own a DEM::Electrical property<PlugIn Id="_ReadFEDomain" GroundSetOf="Box-xMin" PositiveSetOf="Box-xMax" DCVoltage="1.0"/>
_SetLinearVelocity/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/SetLinearVelocity.cppSet the linear velocity of Physic::Particle set. Note that the linear acceleration and linear position are not affected.
Physic::Particle setPhysic::Particle SetOf ID to apply the treatment
<PlugIn Id="_SetLinearVelocity" X="0.1*t" Y="1." Z="0." Set="xMax"/>
_SetOfOperator/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/SetOfOperator.cppThis plugin makes operations between two SetOf ; Union, Intersection or Difference
<PlugIn Id="_SetOfOperator" Set="Result" Set1="Global" Op="Difference" Set2="xMin"/>
_SetOverallMass/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/SetOverallMass.cppSet the overall mass of a Physic::Body set. The total mass is divided by the number of Physic::Body.
Physic::Body set<PlugIn Id="_SetOverallMass" Mass="0.5"/>
_SolverCD/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/SolverCD.cppCreates a voltage source in a DEM::DiscreteElement domain between two discrete elements sets. This plugin must be used in conjunction with the InitElectricalProperties and ConductCurrent plugins.
DEM::Element set that own a DEM::Electrical property<PlugIn Id="_ReadFEDomain" GroundSetOf="Box-xMin" PositiveSetOf="Box-xMax" DCVoltage="1.0"/>
_SphApplyPressureForce/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/SphApplyPressureForce.cppCompute and apply the pressure force on SPH::Particle
SPH::Particle setSPH::Particle SetOf ID to apply the treatment
<PlugIn Id="_SphApplyPressureForce" />
_SphApplyViscousForce/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/SphApplyViscousForce.cppCompute and apply the viscous force on SPH::Particle
SPH::Particle setSPH::Particle SetOf ID to apply the treatment
<PlugIn Id="_SphApplyViscousForce" />
_SphClearInteraction/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/SphClearInteraction.cppClear the interactions on a SPH::Particle set
SPH::Particle setSPH::Particle SetOf ID to apply the treatment
<PlugIn Id="_SphClearInteraction" />
_SphUpdateInteraction/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/SphUpdateInteraction.cppUpdate the interaction between SPH::Particle
SPH::Particle setgranoo -d -f BroadPhase_SPH. Please refer to the documentation of the chosen detection method to get the list of available option.
<PlugIn Id="_SphUpdateInteraction" Method="Lcm"/>
_SphUpdateLocalDensity/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/SphUpdateLocalDensity.cppUpdate the local density of a SPH::Particle set
SPH::Particle setSPH::Particle SetOf ID to apply the treatment
<PlugIn Id="_SphUpdateLocalDensity" />
_SphUpdatePressure/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/SphUpdatePressure.cppUpdate the local pressure of a SPH::Particle set
SPH::Particle setSPH::Particle SetOf ID to apply the treatment
<PlugIn Id="_SphUpdatePressure" GazStiffness="3" GazDensity="1000"/>
_ThermalExpansion/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ThermalExpansion.cppThis plugin imposes a thermal expansion on a DEM::Bond bond set. The thermal expansion is introduced by expanding the relaxed length of the DEM::Bond in relation with temperature. Note that you don't need to calibrate the value of the thermal expansion coefficient. The local value is equal to the global value 1.
DEM::Bond setDEM::Bond SetOf ID to apply the treatment
DEM::Thermal properties. If you set an uniform temperature, you can retrieve it with Math::Expression::Glob("Temperature")
Math::Expression::Glob(ID) in your C++ code.
<PlugIn Id="_ThermalExpansion" Alpha="10e-6" Temperature="0.001*it"/>
1 Andre, D., Levraut, B., Tessier-Doyen, N., & Huger, M. (2017). A discrete element thermo-mechanical modelling of diffuse damage induced by thermal expansion mismatch of two-phase materials. Computer Methods in Applied Mechanics and Engineering, 318, 898-916.
_Translate/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/Translate.cppImpose a translation to a given Physic::Particle and Physic::Ground set. Note that velocities and acceleration are not affected by the imposed movement.
Physic::Particle, Physic::Ground, DEM::SupportShapePhysic::Particle SetOf ID to apply the treatment
<PlugIn Id="_Translate" Vec=(1., 0., 0.)/>
_UpdateSupportShape/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/UpdateSupportShape.cppUpdate DEM::SupportShape length from its associated moving DEM::DiscreteElement set.
DEM::SupportShape setDEM::SupportShape ID to apply the treatment
<PlugIn Id="_UpdateSupportShape" />
_UpdateVoronoiDomain/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/UpdateVoronoiDomain.cppThis plugin must be used with polyhedral DEM::Element given by voronoi tesselation. It allows to update automatically the shape of the polyhedral DEM::Element in order to keep domains continuous. In addition, this plugin computes and displays the total fracture surface.
DEM::VoronoiBond and DEM::VoronoiElement set<PlugIn Id="_UpdateVoronoiDomain" IterLoop="1"/>
_VoronoiDomain/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/VoronoiDomain.cppThis plugin creates a voronoi domain from discrete domain. All the
elements are replaced by polyhedral elements that completely covers a volume delimited by a DEM::SupportShape.
DEM::DiscreteElement<PlugIn Id="_VoronoiDomain" BuildDelaunayElementPair="True"/>
_WriteSensorData/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/WriteSensorData.cppWrites the data acquired by the numerical sensors into a single ASCII delimited file.Use this plugin to generate automatically the ASCII output file. The file is ASCII delimited, with each sensor data in a column. The data can be plotted with a Python script, or any plotter (spreadSheet, Gnuplot, Python MatplotLib...).
You must initialize the sensors to record in specific plugin. You can browse the example directory to get some illustrations.
With the attribute HeaderShape, you can chose to format the header (giving the labels of the data columns) as rows or columns of sensors label.
Note that you can use the python script granoo-plot to post-treat your sensor file.
libUtil::Sensor objects<PlugIn Id="_WriteSensorData" HeaderShape="Column"/>
Box/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libShape/Box.cppUse it to build something with a Shape::Box shape
Class Box is a Volume with rectangular sections:
^ Y
|
|
---------|-----------
/ | /|
dimZ / | / |
/ . / |
/ . / |
/--------------------/ |
| . | |
| .......|...---------> X
| . | |
dimY | . | /
| / | /
| / | /
| / | /
|-------/------------|/
/ dimX
Z
<..something... DimX="1." DimY="1." DimZ="1." />
Cone/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libShape/Cone.cppUse it to build something with a Shape::Cone shape.
^ Y
|
|
<---------------- Lenth -------------->
------ |
/ ^ \\-----|
/ R \ \------
/ a \ . \-----
/ d \ . \------
| i | .G \-----
| u | ............................X-----------> X
| s | . /-----
\ + / . /------
\ / . /-----
\ / . /------
\ -----
------/
/
Z
Note that : - the gravity center 'G' is at 1/4 x length from its base - the symmetry axis is along its local X axis
<..something... Radius=".1" Length="1." />
Cylinder/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libShape/Cylinder.cppUse it to build something with a Shape::Cylinder shape
^ Y
|
|
|
|
Length
-------------------------------------
/ R \ . / \
/ a \ - / \
| d | . | |
| i | ..................+--------> X
| u | . | |
\ s / . \ /
\ / . \ /
-------------------------------------
/
/
/
Z
Note that the symmetry axis is along its local X axis
<..something... Radius=".1" Length="1." />
Disk/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libShape/Disk.cppUse it to build something with a Shape::Disk shape. A disk shape is a surface shape.
-
/ ^ \
/ R \
/ a \
/ d \
| i |
| u - --------> X
| s |
\ /
\ /
\ /
\ -
----
Note that the normal is oriented along its local X axis
<..something... Radius=".1" />
Plane/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libShape/Plane.cppUse it to build something with a Shape::Plane shape. A plane shape is an infinite surface shape.
/+
/- |
/-- |
/-- |
/- |
--| |
| |
| |
| ---------------> X
| |
| |
| -+
| --/
| -/
| --/
+/
Note that the normal is oriented along its local X axis
<..something... />
Polyhedron/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libShape/Polyhedron.cppUse it to build something with a Shape::Polyhedron shape. A polyhedron model any kind of shape
<..something... File="Bunny.off"/>
Rectangle/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libShape/Rectangle.cppUse it to build something with a Shape::Rectangle shape. Note that the Shape::Rectangle is a surface shape.
|Y /+
| /- |
/+- |
/-- | |
/- | |
--| | |
| | |
| | |
| -+--------------> X
| -/ |
+-/ |
-/| -+
Z-/ | --/
| -/
| --/
+/
Note that the normal is oriented along its local X axis
<..something... DimY="1." DimZ="1." />
Sphere/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libShape/Sphere.cppUse it to build something with a Shape::Sphere shape.
^ Y
|
|
|
-----+-----
---/ . \---
-/ . \-
/ . \
/ - \
/ . R a d i u s \
| . ............|-----> X
\ . /
\ . /
\ . /
-\ . /-
---\. /---
/-----------
/
Z
<..something... Radius=".1" />
IterLoop/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCollision/UpdateStrategy/IterLoop.cppThe "IterLoop" is the most simple update strategy for collision detection. The collision is updated all the n times, where n is an iteration value.
Physic::Body, Physic::Particle, Physic::Ground, DEM::DiscreteElement...<... UpdateStrategy="IterLoop" IterLoopVal="10"... />
IterLoop/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCollision/UpdateStrategy/IterLoop.cppThe "IterLoop" is the most simple update strategy for collision detection. The collision is updated all the n times, where n is an iteration value.
Physic::Body, Physic::Particle, Physic::Ground, DEM::DiscreteElement...<... UpdateStrategy="IterLoop" IterLoopVal="10"... />
IterLoop/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCollision/UpdateStrategy/IterLoop.cppThe "IterLoop" is the most simple update strategy for collision detection. The collision is updated all the n times, where n is an iteration value.
Physic::Body, Physic::Particle, Physic::Ground, DEM::DiscreteElement...<... UpdateStrategy="IterLoop" IterLoopVal="10"... />
IterLoop/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCollision/UpdateStrategy/IterLoop.cppThe "IterLoop" is the most simple update strategy for collision detection. The collision is updated all the n times, where n is an iteration value.
Physic::Body, Physic::Particle, Physic::Ground, DEM::DiscreteElement...<... UpdateStrategy="IterLoop" IterLoopVal="10"... />
IterLoop/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCollision/UpdateStrategy/IterLoop.cppThe "IterLoop" is the most simple update strategy for collision detection. The collision is updated all the n times, where n is an iteration value.
Physic::Body, Physic::Particle, Physic::Ground, DEM::DiscreteElement...<... UpdateStrategy="IterLoop" IterLoopVal="10"... />
IterLoop/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCollision/UpdateStrategy/IterLoop.cppThe "IterLoop" is the most simple update strategy for collision detection. The collision is updated all the n times, where n is an iteration value.
Physic::Body, Physic::Particle, Physic::Ground, DEM::DiscreteElement...<... UpdateStrategy="IterLoop" IterLoopVal="10"... />
dt/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libMath/Variable.cppCurrent time step
it/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libMath/Variable.cppCurrent iteration step
t/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libMath/Variable.cppCurrent time