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] : t
Between2SetOf
/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libDEM/ContactDetection/Between2SetOf.cpp
The 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::DiscreteElement
DEM::DiscreteElement
DEM::DiscreteElement
<... BroadPhase="Between2SetOf" Set1="Xmin" Set2="Boundary" .../>
Hash
/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCollision/BroadPhase/Hash.cpp
The 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 and
Physic::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.cpp
The 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.cpp
The 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.cpp
The 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::SupportShape
DEM::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.cpp
The 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::Tool
DEM::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.cpp
The 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::Body
fat 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.cpp
The 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 and
Physic::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.cpp
The 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.cpp
The 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::Particle
Note 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.cpp
The 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::Particle
Note 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.cpp
The 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::Particle
Note 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.cpp
The 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.cpp
The description is not available
Standard
/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libDEM/ContactLaw/Standard.cpp
The description is not available
Standard
/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libDEM/ContactLaw/Standard.cpp
The description is not available
Standard
/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libCollision/CallBack/Standard.cpp
The 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.cpp
The 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.cpp
The 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.cpp
Use 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.cpp
Use 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.cpp
Use 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.cpp
Use 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.cpp
Use 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.cpp
Use 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.cpp
Use 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.cpp
Use 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.cpp
Use 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.cpp
Use 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.cpp
The 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.hpp
Normal 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.hpp
Ramp 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.hpp
Sinus 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.hpp
Uniform 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.cpp
The "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.cpp
The "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.cpp
The "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.cpp
Use 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.cpp
Use 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.cpp
Use 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.cpp
Use 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.cpp
Use 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.cpp
Use 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.cpp
Use 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.cpp
Use 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.cpp
Creates 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.cpp
Computes 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.cpp
Use 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.cpp
Creates 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.cpp
Applies 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.cpp
Applies the gravity to all the Physic::Particle
of the associated SetOf. The gravity is considered as a uniform vector field.
Physic::Particle
Physic::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.cpp
Applies 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"/>
_BuildDelaunayElementPair
source 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.cpp
Build 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.cpp
This 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.cpp
This 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.cpp
Resets 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.cpp
Computes 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.cpp
This 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.cpp
This 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.cpp
This 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.cpp
Solves 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.cpp
Computes 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.cpp
Calculates 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.cpp
Replaces 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.cpp
Replaces 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.cpp
Replaces 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.cpp
Replaces 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.cpp
Replaces 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.cpp
Replaces 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.cpp
Replaces 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.cpp
This 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.cpp
Delete 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.cpp
A 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.cpp
Trigger the energy balance recording. TODO: Need to be documented.
_ExportToPVD
/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libPlugIn/ExportToPVD.cpp
Exports 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.cpp
This 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.cpp
This 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.cpp
This 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.cpp
This 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.cpp
Applies 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::Element
DEM::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.cpp
Initializes 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.cpp
Initializes 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.cpp
Computes 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::Body
Physic::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.cpp
This 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.cpp
Manages 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.cpp
This 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.cpp
Creates 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.cpp
Creates 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.cpp
Creates 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.cpp
Creates 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.cpp
Creates 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.cpp
Creates 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.cpp
Creates 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.cpp
Creates 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.cpp
Creates 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.cpp
Creates 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.cpp
Put 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::Body
Physic::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.cpp
This 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.cpp
Creates 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.cpp
Record 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.cpp
Releases 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.cpp
Impose 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::Ground
Because 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.cpp
Writes 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.cpp
Set 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.cpp
Set 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.cpp
This 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::Element
ComputeVirialStress
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.cpp
Creates 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.cpp
Set 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.cpp
This 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.cpp
Set 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.cpp
Creates 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.cpp
Compute 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.cpp
Compute 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.cpp
Clear 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.cpp
Update 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.cpp
Update 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.cpp
Update 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.cpp
This 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.cpp
Impose 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::SupportShape
Physic::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.cpp
Update 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.cpp
This 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.cpp
This 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.cpp
Writes 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.cpp
Use 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.cpp
Use 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.cpp
Use 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.cpp
Use 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.cpp
Use 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.cpp
Use 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.cpp
Use 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.cpp
Use 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.cpp
The "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.cpp
The "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.cpp
The "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.cpp
The "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.cpp
The "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.cpp
The "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.cpp
Current time step
it
/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libMath/Variable.cpp
Current iteration step
t
/home/dada/work/dev/granoo/tags/2.0/Lib/GranOO/libMath/Variable.cpp
Current time