Please find below documentation of plugins. Note that this page was autogenerated with the granoo3 -d
command
[BroadPhase<DEM::DiscreteElement, DEM::DiscreteElement>] : AABBTree
[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<DEM::DiscreteElement, FEM::Surface>] : FESurface
[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::Node, 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<DEM::DiscreteElement, FEM::Surface>] : Standard
[CallBack<FEM::Surface, Physic::Node>] : Standard
[CallBack<Physic::Body, Physic::Body>] : HertzMindlin
[CallBack<Physic::Body, Physic::Body>] : Standard
[CallBack<Physic::Body, Physic::Body>] : Standard2
[CallBack<Physic::Body, Physic::Ground>] : HertzMindlin
[CallBack<Physic::Body, Physic::Ground>] : Standard
[CallBack<Physic::Body, Physic::Ground>] : Standard2
[CallBack<Physic::Node, 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>] : WithAnyShape
[NarrowPhase<Physic::Body, Physic::Body>] : WithSphere
[NarrowPhase<Physic::Body, Physic::Ground>] : WithAnyShape
[NarrowPhase<Physic::Body, Physic::Ground>] : WithSphere
[NarrowPhase<Physic::Node, Physic::Ground>] : WithAnyShape
[Physic::Ground] : Box
[Physic::Ground] : Cone
[Physic::Ground] : ConeTruncated
[Physic::Ground] : Cylinder
[Physic::Ground] : Disk
[Physic::Ground] : Plane
[Physic::Ground] : Polyhedron
[Physic::Ground] : Rectangle
[Physic::Ground] : Sphere
[PlugIn] : ADD-VOLTAGE-SOURCE
[PlugIn] : APPLY-ANGULAR-VELOCITY
[PlugIn] : APPLY-BOND-LOAD
[PlugIn] : APPLY-BOND-SURFACE-IT
[PlugIn] : APPLY-DENSITY
[PlugIn] : APPLY-DISPLACEMENT
[PlugIn] : APPLY-FE-DISPLACEMENT
[PlugIn] : APPLY-FE-LOAD
[PlugIn] : APPLY-FE-MATERIAL
[PlugIn] : APPLY-FORCE
[PlugIn] : APPLY-FRACTURE
[PlugIn] : APPLY-GRAVITY
[PlugIn] : APPLY-LINEAR-VELOCITY
[PlugIn] : APPLY-MASS-SCALING
[PlugIn] : APPLY-ORIENTATION
[PlugIn] : APPLY-PERIODIC-CONDITION
[PlugIn] : APPLY-ROTATION
[PlugIn] : APPLY-TEMPERATURE
[PlugIn] : APPLY-THERMAL-EXPANSION
[PlugIn] : APPLY-TORQUE
[PlugIn] : APPLY-TRANSLATION
[PlugIn] : BOUNDARY-BOX
[PlugIn] : BUILD-DELAUNAY-ELEMENT-PAIR
[PlugIn] : BUILD-ELEMENT-PAIR-SET-FROM-ELEMENT-SET
[PlugIn] : BUILD-GRID-DOMAIN
[PlugIn] : BUILD-NEIGHBOUR-ELEMENT-PAIR
[PlugIn] : BUILD-VORONOI-DOMAIN
[PlugIn] : CHECK
[PlugIn] : CLEAR-LOAD
[PlugIn] : COMPUTE-BOND-SURFACE-IT
[PlugIn] : COMPUTE-OPTIMAL-TIME-STEP
[PlugIn] : COMPUTE-VOLUME-FRACTION
[PlugIn] : CONDUCT-CURRENT
[PlugIn] : CONDUCT-HEAT
[PlugIn] : CONDUCT-HEAT-WITH-FS
[PlugIn] : CONVERT
[PlugIn] : CONVERT-BOND-TO-ELEMENT-PAIR
[PlugIn] : CONVERT-ELEMENT-PAIR-TO-BEAM
[PlugIn] : CONVERT-ELEMENT-PAIR-TO-FLAT-BOND
[PlugIn] : CONVERT-ELEMENT-PAIR-TO-HERTZSPRING
[PlugIn] : CONVERT-ELEMENT-PAIR-TO-PLASTIC-BEAM
[PlugIn] : CONVERT-ELEMENT-PAIR-TO-PLASTIC-BEAM-IT
[PlugIn] : CONVERT-ELEMENT-PAIR-TO-SINTERNECK-MARTIN
[PlugIn] : CONVERT-ELEMENT-PAIR-TO-SINTERNECK-ROJECK
[PlugIn] : CONVERT-ELEMENT-PAIR-TO-SINTERNECK-VISCOUS
[PlugIn] : CONVERT-ELEMENT-PAIR-TO-SPRING
[PlugIn] : CONVERT-ELEMENT-PAIR-TO-XBEAM
[PlugIn] : DEFORM-PERIODIC-BOX
[PlugIn] : DELETE
[PlugIn] : DELETE-INCONSISTENT-VORONOI-BOND
[PlugIn] : DELETE-UNBONDED-ELEMENT
[PlugIn] : DISPLAY-INFO
[PlugIn] : ENERGY-BALANCE
[PlugIn] : EXPORT-TO-PVD
[PlugIn] : INIT-ELECTRICAL-PROPERTIES
[PlugIn] : INIT-PERIODIC-BOND
[PlugIn] : INIT-THERMAL-PROPERTIES
[PlugIn] : INTEGRATE-ACCELERATION
[PlugIn] : INTERACTION-HISTOGRAM
[PlugIn] : MANAGE-COLLISION
[PlugIn] : MONITOR-EXPRESSION
[PlugIn] : MONITOR-ITEM-NUMBER
[PlugIn] : MONITOR-STRAIN
[PlugIn] : NEW-EXPRESSION
[PlugIn] : NEW-FRAME
[PlugIn] : NEW-GROUND
[PlugIn] : NEW-MATERIAL
[PlugIn] : NEW-MATERIAL-COUPLE
[PlugIn] : NEW-POINT
[PlugIn] : NEW-QUATERNION
[PlugIn] : NEW-SUPPORT-SHAPE
[PlugIn] : NEW-TIME-STEP
[PlugIn] : NEW-TOOL
[PlugIn] : NEW-VARIABLE
[PlugIn] : NEW-VECTOR
[PlugIn] : PUT-IN-CONTACT
[PlugIn] : READ-DOMAIN
[PlugIn] : RELEASE-EL-POWER-AS-HEAT
[PlugIn] : SAVE-DOMAIN
[PlugIn] : SETOF-OPERATOR
[PlugIn] : SOLVER-CD
[PlugIn] : SPH-APPLY-PRESSURE-FORCE
[PlugIn] : SPH-APPLY-VISCOUS-FORCE
[PlugIn] : SPH-CLEAR-INTERACTION
[PlugIn] : SPH-UPDATE-INTERACTION
[PlugIn] : SPH-UPDATE-LOCAL-DENSITY
[PlugIn] : SPH-UPDATE-PRESSURE
[PlugIn] : STATIC-SOLVE
[PlugIn] : STEP
[PlugIn] : UPDATE-BOND-STRAIN
[PlugIn] : UPDATE-BOND-STRESS
[PlugIn] : UPDATE-BOND-VECTOR-STRESS
[PlugIn] : UPDATE-STRAIN
[PlugIn] : UPDATE-STRESS
[PlugIn] : UPDATE-SUPPORT-SHAPE
[PlugIn] : UPDATE-VORONOI-DOMAIN
[PlugIn] : VELOCITY-VERLET-STEP1
[PlugIn] : VELOCITY-VERLET-STEP2
[PlugIn] : WRITE-SENSOR-DATA
[ShapeBase] : Box
[ShapeBase] : Cone
[ShapeBase] : ConeTruncated
[ShapeBase] : Cylinder
[ShapeBase] : Disk
[ShapeBase] : Plane
[ShapeBase] : Polyhedron
[ShapeBase] : Rectangle
[ShapeBase] : Sphere
[ShapeBase] : Triangle
[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::Node, Physic::Ground>] : IterLoop
[Variable] : dt
[Variable] : it
[Variable] : t
AABBTree
Lib/GranOO3/Collision/BroadPhase/AABBTree.cpp
The AABBTree broad_phase 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" />
Between2SetOf
Lib/GranOO3/DEM/ContactDetection/Between2SetOf.cpp
The Between2SetOf broad_phase 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" set_1="Xmin" set_2="Boundary" .../>
Hash
Lib/GranOO3/Collision/BroadPhase/Hash.cpp
The Hash broad_phase 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
Lib/GranOO3/DEM/ContactDetection/LCM.cpp
The Lcm broad_phase 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
Lib/GranOO3/DEM/ContactDetection/Raw.cpp
The Raw broad_phase 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
Lib/GranOO3/DEM/ContactDetection/SupportShape.cpp
The SupportShape broad_phase
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
Lib/GranOO3/DEM/ContactDetection/Tool.cpp
The Tool broad_phase 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" .../>
FESurface
Lib/GranOO3/DEM/ContactDetection/FESurface.cpp
The Tool broad_phase 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
Lib/GranOO3/Collision/BroadPhase/AABBTree.cpp
The AABBTree broad_phase 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
Lib/GranOO3/Collision/BroadPhase/Hash.cpp
The Hash broad_phase 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
Lib/GranOO3/Collision/BroadPhase/Lcm.cpp
The Lcm broad_phase 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
Lib/GranOO3/Collision/BroadPhase/Raw.cpp
The Raw broad_phase 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 set_1 and set_2 attributes
Physic::Body
, SPH::Particle
Note that : - The set_1
required the set_2 param. - You can not use the set_
param with set_1
or set_2
<.... BroadPhase="Raw" set_1="Wall" set_2="Xmin"/>
<.... BroadPhase="Raw" set_="Boundary" />
Raw
Lib/GranOO3/Collision/BroadPhase/Raw.cpp
The Raw broad_phase 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 set_1 and set_2 attributes
Physic::Body
, SPH::Particle
Note that : - The set_1
required the set_2 param. - You can not use the set_
param with set_1
or set_2
<.... BroadPhase="Raw" set_1="Wall" set_2="Xmin"/>
<.... BroadPhase="Raw" set_="Boundary" />
Raw
Lib/GranOO3/Collision/BroadPhase/Raw.cpp
The Raw broad_phase 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 set_1 and set_2 attributes
Physic::Body
, SPH::Particle
Note that : - The set_1
required the set_2 param. - You can not use the set_
param with set_1
or set_2
<.... BroadPhase="Raw" set_1="Wall" set_2="Xmin"/>
<.... BroadPhase="Raw" set_="Boundary" />
Lcm
Lib/GranOO3/Collision/BroadPhase/Lcm.cpp
The Lcm broad_phase 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
Lib/GranOO3/DEM/ContactLaw/Standard.cpp
The description is not available
Standard
Lib/GranOO3/DEM/ContactLaw/Standard.cpp
The description is not available
Standard
Lib/GranOO3/DEM/ContactLaw/Standard.cpp
The description is not available
Standard
Lib/GranOO3/DEM/ContactLaw/Standard.cpp
The description is not available
Standard
Lib/GranOO3/Collision/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"/>
HertzMindlin
Lib/GranOO3/Collision/CallBack/HertzMindlin.cpp
The HertzMindlin Contact CallBack. Note that this contact law is an extension of
the Standard2
contact law. So, you can use all the parameters used by this contact law.
Physic::Body
, Physic::Ground
, Physic::Particle
See the Standard2
contact law
< ... CallBack="HertzMindlin" RestitutionCoeff="0.1" StaticFriction="0.6"
E_star="5e9" G_star="2e9" RollingLimit="5°"/>
Standard
Lib/GranOO3/Collision/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"/>
Standard2
Lib/GranOO3/Collision/CallBack/Standard2.cpp
The standard2 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
VELOCITY
or POSITION
for managing friction. The VELOCITY is fast and gives good results whereas POSITION is slow and gives very good results
POSITION
regularization type.
VELOCITY
regularization type)
<... CallBack="Standard2" NormalStiffness="1e7" RestitutionCoeff="0.5"
Regularization="VELOCITY" StaticFriction="0.6" RollingLimit="20°"
HertzMindlin
Lib/GranOO3/Collision/CallBack/HertzMindlin.cpp
The HertzMindlin Contact CallBack. Note that this contact law is an extension of
the Standard2
contact law. So, you can use all the parameters used by this contact law.
Physic::Body
, Physic::Ground
, Physic::Particle
See the Standard2
contact law
< ... CallBack="HertzMindlin" RestitutionCoeff="0.1" StaticFriction="0.6"
E_star="5e9" G_star="2e9" RollingLimit="5°"/>
Standard
Lib/GranOO3/Collision/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"/>
Standard2
Lib/GranOO3/Collision/CallBack/Standard2.cpp
The standard2 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
VELOCITY
or POSITION
for managing friction. The VELOCITY is fast and gives good results whereas POSITION is slow and gives very good results
POSITION
regularization type.
VELOCITY
regularization type)
<... CallBack="Standard2" NormalStiffness="1e7" RestitutionCoeff="0.5"
Regularization="VELOCITY" StaticFriction="0.6" RollingLimit="20°"
Standard
Lib/GranOO3/Collision/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
Lib/GranOO3/DEM/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... Lx="1." Ly="1." Lz="1." />
Cone
Lib/GranOO3/DEM/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
Lib/GranOO3/DEM/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
Lib/GranOO3/DEM/SupportShapeT.cpp
Use it to build something with a Shape::Polyhedron shape. A polyhedron model any kind of shape
<..something... File="Bunny.off"/>
Sphere
Lib/GranOO3/DEM/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
Lib/GranOO3/DEM/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... Lx="1." Ly="1." Lz="1." />
Cone
Lib/GranOO3/DEM/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
Lib/GranOO3/DEM/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
Lib/GranOO3/DEM/ToolT.cpp
Use it to build something with a Shape::Polyhedron shape. A polyhedron model any kind of shape
<..something... File="Bunny.off"/>
Sphere
Lib/GranOO3/DEM/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
Lib/GranOO3/Core/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="3" OutDir="myTEST" Verbose="no">
<STEP Label="pre-processing">
...
</STEP>
<STEP Label="processing" IterNumber="100000000" TimeStep="5e-5">
</STEP>
</GRANOO>
NormalRandom
Lib/GranOO3/Math/FunctionT.hpp
Normal random function. It picks a value following a normal distribution The distribution is defined by it mean and standard deviation values Uniform random function. It picks a value in the range [min, max]
RampAndConstant
Lib/GranOO3/Math/FunctionT.hpp
Ramp and constant function, useful to apply a progressive loading
| _________Cst__________
| /.
| / .
| / .
|/___________________________
lim
RAC(it, 1000, 1e6)
SineRamp
Lib/GranOO3/Math/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
Lib/GranOO3/Math/FunctionT.hpp
Uniform random function. It picks a value in the range [min, max] Use it simply as UniRnd(min, max)
WithAnyShape
Lib/GranOO3/Collision/NarrowPhase/WithAnyShape.cpp
The “WithAnyShape” 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="WithAnyShape" MaxPenetrationWithsurface="0.01" ... />
WithSphere
Lib/GranOO3/Collision/NarrowPhase/WithSphere.cpp
The “WithSphere” 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::Ground
WithAnyShape
Lib/GranOO3/Collision/NarrowPhase/WithAnyShape.cpp
The “WithAnyShape” 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="WithAnyShape" MaxPenetrationWithsurface="0.01" ... />
WithSphere
Lib/GranOO3/Collision/NarrowPhase/WithSphere.cpp
The “WithSphere” 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::Ground
WithAnyShape
Lib/GranOO3/Collision/NarrowPhase/WithAnyShape.cpp
The “WithAnyShape” 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="WithAnyShape" MaxPenetrationWithsurface="0.01" ... />
Box
Lib/GranOO3/Physic/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... Lx="1." Ly="1." Lz="1." />
Cone
Lib/GranOO3/Physic/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." />
ConeTruncated
Lib/GranOO3/Physic/GroundT.cpp
Use it to build something with a Shape::ConeTruncated
shape.
^ Y
|
|
<---------------- Lenth ---------->
------ |
/ ^ \\-----|
/ R \ \------
/ a \ . \-----
/ d \ . \------ ^
| i | .G \ R2
| u | ......................|.....X-----------> X
| s | . /
\ 1 / . /------
\ + / . /-----
\ / . /------
\ -----
------/
/
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
Lib/GranOO3/Physic/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
Lib/GranOO3/Physic/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
Lib/GranOO3/Physic/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
Lib/GranOO3/Physic/GroundT.cpp
Use it to build something with a Shape::Polyhedron shape. A polyhedron model any kind of shape
<..something... File="Bunny.off"/>
Rectangle
Lib/GranOO3/Physic/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... Ly="1." Lz="1." />
Sphere
Lib/GranOO3/Physic/GroundT.cpp
Use it to build something with a Shape::Sphere shape.
^ Y
|
|
|
-----+-----
---/ . \---
-/ . \-
/ . \
/ - \
/ . R a d i u s \
| . ............|-----> X
\ . /
\ . /
\ . /
-\ . /-
---\. /---
/-----------
/
Z
<..something... Radius=".1" />
ADD-VOLTAGE-SOURCE
Lib/GranOO3/PlugIn/AddVoltageSource.cpp
Creates a voltage source in a DEM::Element
domain between two discrete elements sets. This plugin must be used in conjunction with the INIT-ELECTRICAL-PROPERTIES and CONDUCT-CURRENT plugins.
DEM::Element
set that own a DEM::Electrical
property<ADD-VOLTAGE-SOURCE GroundSetOf="Box-xMin" PositiveSetOf="Box-xMax" DCVoltage="1.0"/>
00042_{lattice}{electrical}{beam}_ELECTRICAL-CONDUCTION
APPLY-ANGULAR-VELOCITY
Lib/GranOO3/PlugIn/ApplyAngularVelocity.cpp
Set the angular velocity of Physic::Node
set. Note that the linear acceleration and linear position are not affected.
Physic::Node
setPhysic::Node
SetOf ID to apply the treatment
<APPLY-ANGULAR-VELOCITY X="0.1*t" Y="1." Z="0." Set="xMax"/>
APPLY-BOND-LOAD
Lib/GranOO3/PlugIn/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
<APPLY-BOND-LOAD BuildElementPair="Yes" />
00010_{lattice}{dem}{mechanical}{elastic}{beam}_TENSILE-TEST
and all lattice examples
APPLY-BOND-SURFACE-IT
Lib/GranOO3/PlugIn/ApplyBondSurfaceIT.cpp
This plugin affect a surface to bonds. The method used here is coming from Inigo Terreros idea 1. This is an averaged method based on the global coordination number and the mean radii value of discrete element. In such a way all the bonds have the same surface value.
DEM::DiscreteElement
and DEM::Bond
DEM::DiscreteElement
set to compute the average radius
<APPLY-BOND-SURFACE-IT CoordNumber="10" AddBrokenSurfaceSensor="True"/>
00011_{lattice}{dem}{mechanical}{brittle}{beam}_TENSILE-TEST
1 Terreros, I., Iordanoff, I., & Charles, J. L. (2013). Simulation of continuum heat conduction using DEM domains. Computational Materials Science, 69, 46-52.
APPLY-DENSITY
Lib/GranOO3/PlugIn/ApplyDensity.cpp
Set the density of a Physic::Body set
Physic::Body
setPhysic::Body
SetOf ID to apply the treatment
<APPLY-DENSITY Value="7000." Set="Box"/>
<APPLY-DENSITY Value="7000." VolumeFraction="0.5"/>
00013_{lattice}{dem}{mechanical}{brittle}{flatbond}_TENSILE-TEST
and a lot of others
APPLY-DISPLACEMENT
Lib/GranOO3/PlugIn/ApplyDisplacement.cpp
This plugin applies a displacement on a specified Physic::Node
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::Node
set, Physic::Ground
itemPhysic::Node
SetOf ID to apply the treatment
<APPLY-DISPLACEMENT X="0." Y="1.3*t" Z="0."/>
<APPLY-DISPLACEMENT Clamp="Yes"/>
<APPLY-DISPLACEMENT X="0." Y="1.3*t" Z="0." GroundID="ground-plane"/>
00010_{lattice}{dem}{mechanical}{elastic}{beam}_TENSILE-TEST
and a lot of others
APPLY-FE-DISPLACEMENT
Lib/GranOO3/PlugIn/ApplyFEDisplacement.cpp
This plugin imposes a displacement on a specified Physic::Node
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::Node
set, Physic::Ground
itemPhysic::Node
SetOf ID to apply the treatment
<APPLY-FE-DISPLACEMENT X="0." Y="1.3*t" Z="0."/>
<APPLY-FE-DISPLACEMENT Clamp="Yes"/>
<APPLY-FE-DISPLACEMENT X="0." Y="1.3*t" Z="0." GroundID="ground-plane"/>
No example (TODO)
APPLY-FE-LOAD
Lib/GranOO3/PlugIn/ApplyFELoad.cpp
Apply a loading on FEM::Element.
FEM::Element
set,<APPLY-FE-LOAD />
00050_{fem}{mechanical}{elastic}_TENSILE-TEST
and some FEM examples
APPLY-FE-MATERIAL
Lib/GranOO3/PlugIn/ApplyFEMaterial.cpp
Set the elastic and density property of FEM::Element set
FEM::Element
setFEM::Element
SetOf ID to apply the treatment
<APPLY-FE-MATERIAL YoungModulus="50e9" PoissonRatio="0.2" Density="3200"/>
00050_{fem}{mechanical}{elastic}_TENSILE-TEST
and other FEM examples
APPLY-FORCE
Lib/GranOO3/PlugIn/ApplyForce.cpp
Apply a force vector with components X, Y and Z to all the Physic::Node
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::Node
setPhysic::Node
SetOf ID to apply the force
<APPLY-FORCE X="100." Y="-1.*sin(it)" Z="0." Set="xMax"/>
00003_{tutorial}_SIMPLE-TENSILE-TEST
and some others
APPLY-FRACTURE
Lib/GranOO3/PlugIn/ApplyFracture.cpp
This PlugIn applied a specific fracture criterion to DEM::Element. Such a PlugIn must be used in continuum media simulation with cohesive beam. Note that you probably must use this PlugIn with the UPDATE-STRESS PlugIn because fracture criterion available in this PlugIn use stress tensors which are computed with the UPDATE-STRESS PlugIn
DEM::Element
s1
, 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
<APPLY-FRACTURE Type="BRITTLE" ApplyOn="HALF_PLANE" HalfPlaneCoeff="-0.5"
MaxPrincipalStress="11.7e6" DeleteBrokenBond="False" Set="Master"/>
<APPLY-FRACTURE FailureMode="BRITTLE" Set="Breakable"
CriterionLaw="s1>C1 or s3<C2"
CriterionVar="C1=UniRnd(8e6,12e6);C2=UniRnd(-120e6,-80e6)"/>
00011_{lattice}{dem}{mechanical}{brittle}{beam}_TENSILE-TEST
and some other examples that implement lattice/brittle/beam features
[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
APPLY-GRAVITY
Lib/GranOO3/PlugIn/ApplyGravity.cpp
Applies the gravity to all the Physic::Node
of the associated SetOf. The gravity is considered as a uniform vector field.
Physic::Node
Physic::Node
SetOf ID to apply the gravity<APPLY-GRAVITY X="0." Y="-9.81" Z="0." Set="Global"/>
00104_{dem}{mechanical}{granular}_SPHERICAL-RAIN
and a lot of others
APPLY-LINEAR-VELOCITY
Lib/GranOO3/PlugIn/ApplyLinearVelocity.cpp
Set the linear velocity of Physic::Node
set. Note that the linear acceleration and linear position are not affected.
Physic::Node
setPhysic::Node
SetOf ID to apply the treatment
<APPLY-LINEAR-VELOCITY X="0.1*t" Y="1." Z="0." Set="xMax"/>
No example (TODO)
APPLY-MASS-SCALING
Lib/GranOO3/PlugIn/ApplyMassScaling.cpp
Set the density of a Physic::Body set
Physic::Body
setPhysic::Body
SetOf ID to apply the treatment
<APPLY-MASS-SCALING Value="1e10."/>
TODO
APPLY-ORIENTATION
Lib/GranOO3/PlugIn/ApplyOrientation.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<APPLY-ORIENTATION Clamp="Yes"/>
00031_{lattice}{dem}{mechanical}{elastic}{beam}_BOUNCING-BALL-v0
and some others
APPLY-PERIODIC-CONDITION
Lib/GranOO3/PlugIn/ApplyPeriodicCondition.cpp
If you use Periodic boundaries, you must use this PlugIn. This PlugIn allows DEM::Element to : - cross the periodic boundaries - apply similar displacements to slave element - manage periodic bonds between master element and slave element
DEM::Element
, DEM::Bond
, DEM::PeriodicBoundary
, DEM::Periodic
(property)<APPLY-PERIODIC-CONDITION />
No example for periodic condition (TODO)
APPLY-ROTATION
Lib/GranOO3/PlugIn/ApplyRotation.cpp
This plugin imposes a rigid rotation on a specified Physic::Body
set. Here, the process is different from the APPLY-ORIENTATION PlugIn because the Physic::Body set is considered as a rigid body.
The imposed rotation is specified through an angle, an axis and center.
Physic::Body
setPhysic::Body
SetOf ID to apply the treatment
<APPLY-ROTATION Axis="( 1.,0.,0.)" Center="Centroid" Angle="sin(t)" Set="Cylinder-xMax"/>
00014_{lattice}{dem}{mechanical}{brittle}{beam}_BENDING-TEST
and some others
APPLY-TEMPERATURE
Lib/GranOO3/PlugIn/ApplyTemperature.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
<APPLY-TEMPERATURE Value="798." Set="Cylinder-xMin"/>
00040_{lattice}{thermo-mechanical}{elastic}{beam}_THERMAL-CONDUCTION
and some others
APPLY-THERMAL-EXPANSION
Lib/GranOO3/PlugIn/ApplyThermalExpansion.cpp
This plugin imposes a thermal expansion on a DEM::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.
<APPLY-THERMAL-EXPANSION Alpha="10e-6" Temperature="0.001*it"/>
00041_{lattice}{thermo-mechanical}{elastic}{flatbond}_THERMAL-CONDUCTION
and some others
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.
APPLY-TORQUE
Lib/GranOO3/PlugIn/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
<APPLY-TORQUE X="100." Y="-1.*sin(it)" Z="0." Set="xMax"/>
No example (TODO)
APPLY-TRANSLATION
Lib/GranOO3/PlugIn/ApplyTranslation.cpp
Apply a translation to a given Physic::Node
and/or a Physic::Ground
set. Note that velocities and acceleration are not affected by the imposed movement.
Physic::Node
, Physic::Ground
Physic::Node
SetOf ID to apply the treatment
<APPLY-TRANSLATION Vector=(1., 0., 0.)/>
00031_{lattice}{dem}{mechanical}{elastic}{beam}_BOUNCING-BALL-v0
BOUNDARY-BOX
Lib/GranOO3/PlugIn/BoundaryBox.cpp
This plugin limits the domain to a given boundary box. If a Node cross this boundary box, it is automatically deleted.
Physic::Node
<BOUNDARY-BOX MinCorner=(-1,-1,-1) MaxCorner=(1,1,1)/>
No example (TODO)
BUILD-DELAUNAY-ELEMENT-PAIR
Lib/GranOO3/PlugIn/BuildDelaunayElementPair.cpp
Build DEM::ElementPair
in the provided DEM::Element 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::Element` to create `DEM::ElementPair`
+ Multithreaded : No
+ Recommended section: PreProcessing, PostProcessing
<BUILD-DELAUNAY-ELEMENT-PAIR BondLengthRatioCutoff="2.0" />
No example (TODO)
BUILD-ELEMENT-PAIR-SET-FROM-ELEMENT-SET
Lib/GranOO3/PlugIn/BuildElementPairSetFromElementSet.cpp
This plugin simply build element pair set from element set. It parses all the element pair and if both elements are in
a same SetOf, it add the corresponding element pair to this SetOf.
DEM::ElementPair
<BUILD-ELEMENT-PAIR-SET-FROM-ELEMENT-SET" />
No example (TODO)
BUILD-GRID-DOMAIN
Lib/GranOO3/PlugIn/BuildGridDomain.cpp
Build a parallelepiped discrete elements domain, with dimensions Lx, Ly and Lz, with number of DEM::DiscreteElement
defined by ElementNumber.
By default, a dispersion factor is 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 BUILD-DELAUNAY-ELEMENT-PAIR to build a full DEM discrete domain.
DEM::DiscreteElement
<BUILD-GRID-DOMAIN Lx="0.01" Ly="0.01" Lz="0.1" ElementNumber="2000"/>
No example (TODO)
BUILD-NEIGHBOUR-ELEMENT-PAIR
Lib/GranOO3/PlugIn/BuildNeighbourElementPair.cpp
This plugin allows to build element pair 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 setting the ForceCardinality parameter 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 (because the frontier of domain as a degraded value of coordination number).
DEM::ElementPair
set<BUILD-NEIGHBOUR-ELEMENT-PAIR ForceCardinality="Yes" WantedCardinalityValue="8." BoundarySet="Boundary"/>
No example (TODO)
BUILD-VORONOI-DOMAIN
Lib/GranOO3/PlugIn/BuildVoronoiDomain.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
BuildDelaunayElementPair
option.
<BUILD-VORONOI-DOMAIN BuildDelaunayElementPair="True"/>
No example (TODO)
CHECK
Lib/GranOO3/PlugIn/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::Node
<CHECK/>
00003_{tutorial}_SIMPLE-TENSILE-TEST
and a lot of others
CLEAR-LOAD
Lib/GranOO3/PlugIn/ClearLoad.cpp
Resets all the external loads (forces and torques) associated to the Physic::Node
and Physic::Body
of the domain. Generally you must use it at the end of a processing loop.
Physic::Node
and Physic::Body
SetOf ID to apply the treatment
<CLEAR-LOAD/>
00003_{tutorial}_SIMPLE-TENSILE-TEST
and a lot of others
COMPUTE-BOND-SURFACE-IT
Lib/GranOO3/PlugIn/ComputeBondSurfaceIT.cpp
This plugin computes the surface of bonds with the Inigo Terreros’ method described here 1. It affects automaticaaly the right value of the surface
bond’s attribute.
DEM::DiscreteElement
and DEM::Bond
<COMPUTE-BOND-SURFACE-IT/>
No example (TODO)
1 : Terreros, I., Iordanoff, I., & Charles, J. L. (2013). Simulation of continuum heat conduction using DEM domains. Computational Materials Science, 69, 46-52.
COMPUTE-OPTIMAL-TIME-STEP
Lib/GranOO3/PlugIn/ComputeOptimalTimeStep.cpp
Computes 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. It writes automatically the main time step of the simulation.
Physic::CriticalTimeStep
objectsPhysic::Time
ID to use. This alternatrive time step may be created with the NewTimeStep plugin. By default the main time step is chosen.
<COMPUTE-OPTIMAL-TIME-STEP Ratio="0.1"/>
00003_{tutorial}_SIMPLE-TENSILE-TEST
and a lot of others
COMPUTE-VOLUME-FRACTION
Lib/GranOO3/PlugIn/ComputeVolumeFraction.cpp
This plugin compute the volume fraction of arbitrary granular domains thanks to a voronoi tesselation. The result of the computation is stored in the _result
attribute.
DEM::Element
DEM::Element
set to compute the volume fraction
<COMPUTE-VOLUME-FRACTION/>
No example (TODO)
CONDUCT-CURRENT
Lib/GranOO3/PlugIn/ConductCurrent.cpp
Solves the electrical state related to the applied voltage source through the ADD-VOLTAGE-SOURCE 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::Element
set that own a DEM::Electrical
property<CONDUCT-CURRENT Verbose="Yes" IterLoop="Max"/>
00042_{lattice}{electrical}{beam}_ELECTRICAL-CONDUCTION
and other electrical examples
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.
CONDUCT-HEAT
Lib/GranOO3/PlugIn/ConductHeat.cpp
Computes the new thermal state of the discrete domain, related to the thermal boundary conditions applied through the APPLY-TEMPERATURE plugin. The thermal solution is calculated explicitly, based on the mechanical stable time increment.
Note that you can add another time step with the NEW-TIME-STEP PlugIn and you can use it if you want to combine a mechanical time step with a thermal time step. This is not physical but you can save a lot of computational time with this trick.
The implement method is described in 1
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.
<CONDUCT-HEAT Method="VORO"/>
00040_{lattice}{thermo-mechanical}{elastic}{beam}_THERMAL-CONDUCTION
and other thermal examples
1 : Terreros, I., Iordanoff, I., & Charles, J. L. (2013). Simulation of continuum heat conduction using DEM domains. Computational Materials Science, 69, 46-52.
CONDUCT-HEAT-WITH-FS
Lib/GranOO3/PlugIn/ConductHeatWithFS.cpp
Calculates the new thermal state of the discrete domain, related to the thermal boundary conditions applied through the APPLY-TEMPERATURE plugin. The thermal solution is calculated explicitly, based on the mechanical stable time increment.
This plugin works in the same way as its counterpart CONDUCT-HEAT 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::Element
set that own a DEM::Thermal
property<CONDUCT-HEAT-WITH-FS/>
00043_{lattice}{thermo-electrical}{beam}_JOULE-HEATING
and a lot of others
CONVERT
Lib/GranOO3/PlugIn/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.
CONVERT-BOND-TO-ELEMENT-PAIR
Lib/GranOO3/PlugIn/ConvertBondToElementPair.cpp
Replaces all the DEM::Bond
instances by DEM::ElementPair
instances.
DEM:Bond
setDEM::Bond
SetOf ID to apply the treatment
<CONVERT-BOND-TO-ELEMENT-PAIR/>
No example (TODO)
CONVERT-ELEMENT-PAIR-TO-BEAM
Lib/GranOO3/PlugIn/ConvertElementPairToBeam.cpp
Replaces all the element pair (DEM::ElementPair
class) by DEM::Beam
. If you create an initial discrete domain with the cooker program, it contains only DEM::ElementPair. 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 directly macroscopic values of Young’s modulus and Poisson’s ratio. This magic trick is explained in this paper [2].
<!-- Here, you set directly the (microscopic) parameter of the beam -->
<CONVERT-ELEMENT-PAIR-TO-BEAM YoungModulus="1.2e11" RadiusRatio="0.28" Set="xMax"/>
<!-- Here, you set directly the macroscopic parameter of the continuum media -->
<CONVERT-ELEMENT-PAIR-TO-BEAM MacroYoungModulus="50e9" MacroPoissonRatio="0.2"/>
00042_{lattice}{electrical}{beam}_ELECTRICAL-CONDUCTION
and a lot of others that implement beam bonds y
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.
[2] Nguyen, T. T., André, D., & Huger, M. (2019). Analytic laws for direct calibration of discrete element modeling of brittle elastic media using cohesive beam model. Computational Particle Mechanics, 6(3), 393-409.
CONVERT-ELEMENT-PAIR-TO-FLAT-BOND
Lib/GranOO3/PlugIn/ConvertElementPairToFlatBond.cpp
Replaces all the element pair (Core::Pair<DEM::Element>
class) by DEM::FlatBond
. FlatBond 1 are a new way for modeling continuum material with DEM. FlatBond needs a strain tensor. So, you must use FlatBond with the UPDATE-STRAIN plugin.
Core::Pair<DEM::Element>
set<CONVERT-ELEMENT-PAIR-TO-FLAT-BOND YoungModulus="72e9" PoissonRatio="0.17" MaxTensileStress="50e6" MaxCompressiveStress="500e6"/>
00013_{lattice}{dem}{mechanical}{brittle}{flatbond}_TENSILE-TEST
and the other examples that implement the flat bond model
1 André, D., Girardot, J., & Hubert, C. (2019). A novel DEM approach for modeling brittle elastic media based on distinct lattice spring model. Computer Methods in Applied Mechanics and Engineering, 350, 100-122.
CONVERT-ELEMENT-PAIR-TO-HERTZSPRING
Lib/GranOO3/PlugIn/ConvertElementPairToHertzSpring.cpp
Replaces all the element pair (Core::Pair<DEM::Element>
class) by DEM::XBeam
. 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 macroscopic elastic parameters of your domain.
< CONVERT-ELEMENT-PAIR-TO-HERTZSPRING YoungModulus="50e9" PoissonRatio="0.2" />
No example (TODO)
CONVERT-ELEMENT-PAIR-TO-PLASTIC-BEAM
Lib/GranOO3/PlugIn/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 CONVERT-ELEMENT-PAIR-TO-BEAM
PlugIn.
BE AWARE, THIS IS AN EXPERIMENTAL WORK !!!
<CONVERT-ELEMENT-PAIR-TO-PLASTIC-BEAM YoungModulus="1.2e11" RadiusRatio="0.28" MaxElasticRelativeElongation="20%"/>
No example (TODO)
CONVERT-ELEMENT-PAIR-TO-PLASTIC-BEAM-IT
Lib/GranOO3/PlugIn/ConvertElementPairToPlasticBeamIT.cpp
Replaces all the element pair (Core::Pair<DEM::Element>
class) by DEM::PlasticBeamIT
. The DEM::PlasticBeam
class inherits from the DEM::Beam
class. So, you can set also all the parameters of the CONVERT-ELEMENT-PAIR-TO-BEAM
PlugIn. If you want to document yourself about this plastic beam, you can read the Inigo Terreros’ PhD manuscript 1 (in french).
BE AWARE, THIS IS AN EXPERIMENTAL WORK !!!
<CONVERT-ELEMENT-PAIR-TO-PLASTIC-BEAM YoungModulus="1.2e11" RadiusRatio="0.28" MaxElasticRelativeElongation="20%"/>
No example (TODO)
Modélisation DEM thermo-mécanique d’un milieu continu. Vers la simulation du procédé FSW, Terreros, Iñigo, 2013, http://www.theses.fr/2013ENAM0060/document
CONVERT-ELEMENT-PAIR-TO-SINTERNECK-MARTIN
Lib/GranOO3/PlugIn/ConvertElementPairToSinterNeck_Martin.cpp
TODO
CONVERT-ELEMENT-PAIR-TO-SINTERNECK-ROJECK
Lib/GranOO3/PlugIn/ConvertElementPairToSinterNeck_Rojek.cpp
TODO
CONVERT-ELEMENT-PAIR-TO-SINTERNECK-VISCOUS
Lib/GranOO3/PlugIn/ConvertElementPairToSinterNeck_Viscous.cpp
TODO
CONVERT-ELEMENT-PAIR-TO-SPRING
Lib/GranOO3/PlugIn/ConvertElementPairToSpring.cpp
Replaces all the element pair (Core::Pair<DEM::Element>
class) by DEM::Spring
.
Core::Pair<DEM::Element>
setCore::Pair<DEM::Element>
SetOf ID to apply the treatment
<CONVERT-ELEMENT-PAIR-TO-SPRING Stiffness="1.5e7" RestitutionCoeff="0.9"/>
No example (TODO)
CONVERT-ELEMENT-PAIR-TO-XBEAM
Lib/GranOO3/PlugIn/ConvertElementPairToXBeam.cpp
Similar as the CONVERT-ELEMENT-PAIR-TO-BEAM but use a faster strategy for the computation of the reaction forces and torques. The sole difference comes from the NLGeom attribute (see below).
Please refer to the CONVERT-ELEMENT-PAIR-TO-BEAM documention
Please refer to the CONVERT-ELEMENT-PAIR-TO-BEAM documention
Please refer to the CONVERT-ELEMENT-PAIR-TO-BEAM documention
<CONVERT-ELEMENT-PAIR-TO-XBEAM YoungModulus="1.2e11" RadiusRatio="0.28"/>
00020_{lattice}{fem}{mechanical}{elastic}{xbeam}_TENSILE-TEST
and other examples that implement the xbeam bond model
DEFORM-PERIODIC-BOX
Lib/GranOO3/PlugIn/DeformPeriodicBox.cpp
This plugin allows to deform a periodic box which represents a full 3D periodic domain. Deforming periodic box is useful for applying loading to a periodic discrete domain. So, this plugin can stretch/reduce one (or more) given length of the box. In addition, this plugin allows you to control the stresses in the other direction. For example, you can stretch along X while maintaining zero stresses along Y and Z to produce a uniaxial tensile test in the X direction. You can generate full periodic 3D domains with the granoo-cooker program utility.
<!-- Make a tensile test along the XX axis -->
<DEFORM-PERIODIC-BOX Strain_XX="2e-6*it"
Stress_YY="0" PID_Stress_YY="1,0.01,-0.01,1e-16,1e-16,1e-16"
Stress_ZZ="0" PID_Stress_ZZ="1,0.01,-0.01,1e-16,1e-16,1e-16"/>
No example with periodic condition (TODO)
DELETE
Lib/GranOO3/PlugIn/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
<DELETE What="Physic::Ground"/>
<DELETE What="DEM::SupportShape" ID="Boundary"/>
00031_{lattice}{dem}{mechanical}{elastic}{beam}_BOUNCING-BALL-v0
DELETE-INCONSISTENT-VORONOI-BOND
Lib/GranOO3/PlugIn/DeleteInconsistentVoronoiBond.cpp
This plugin delete what we called inconsistent voronoi bond. An inconsistent voronoi bond is a bond that do not match with a polyhedral facet of its DEM::Element. This problem is propably due by too large approximation during the voronoi tesselation made by voro++ but this is not sure. This problem must be investigated to have a better understanding.
DEM::Bond
DEM::Bond
SetOf ID to apply the treatment
<DELETE-INCONSISTENT-VORONOI-BOND/>
No example (TODO)
DELETE-UNBONDED-ELEMENT
Lib/GranOO3/PlugIn/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. For example, you can use it, if you want to avoid debris in your simulation.
DEM::Element
and DEM::Bond
setDEM::Element
SetOf ID to apply the treatment
<DELETE-UNBONDED-ELEMENT Verbose="True"/>
No example (TODO)
DISPLAY-INFO
Lib/GranOO3/PlugIn/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.
<DISPLAY-INFO Message="Hello, GranOO User !!"/>
No example (TODO)
ENERGY-BALANCE
Lib/GranOO3/PlugIn/EnergyBalance.cpp
Trigger energy balance recording. Note that you must use the ‘WRITE-SENSOR-DATA’ plugin to record these data in a file. It’s better to place both ‘ENERGY-BALANCE’ and ‘WRITE-SENSOR-DATA’ plugins at the end of the processing loop as it is shown in the following example.
(...)
<ENERGY-BALANCE>
<WRITE-SENSOR-DATA/>
</ (end of processing loop) >
00011_{lattice}{dem}{mechanical}{brittle}{beam}_TENSILE-TEST
EXPORT-TO-PVD
Lib/GranOO3/PlugIn/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=“current_torsion_stress”.
<!-- This example save nothing by default except the acceleration of element -->
<EXPORT-TO-PVD Field="Nothing" Element_add="Acceleration" EveryIter="100"/>
<!-- This example save all by default. It saves also element shapes (good for polyhedral shape)-->
<EXPORT-TO-PVD Field="All" SaveDEShape="Yes" EveryIter="100"/>
00010_{lattice}{dem}{mechanical}{elastic}{beam}_TENSILE-TEST
and a lot of others
INIT-ELECTRICAL-PROPERTIES
Lib/GranOO3/PlugIn/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
<INIT-ELECTRICAL-PROPERTIES Resistivity="0.73e-6"/>
00042_{lattice}{electrical}{beam}_ELECTRICAL-CONDUCTION
and other examples that implement electrical physics
INIT-PERIODIC-BOND
Lib/GranOO3/PlugIn/InitPeriodicBond.cpp
This plugin must be used when running periodic simulation with bonds (periodic lattice model). This plugin parses the periodic bonds for detecting potential slave. It allows to break bond in a periodic way. A “periodic way” means that if a bond is broken at a given boundary, the corresponding bonds on the other periodic boundaries are also destroyed.
DEM::Bond
set<INIT-PERIODIC-BOND />
No example (TODO)
INIT-THERMAL-PROPERTIES
Lib/GranOO3/PlugIn/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
<INIT-THERMAL-PROPERTIES Temperature="0" Cp="500" Conductivity="15" />
00043_{lattice}{thermo-electrical}{beam}_JOULE-HEATING
and other examples that implement thermal physics
INTEGRATE-ACCELERATION
Lib/GranOO3/PlugIn/IntegrateAcceleration.cpp
Computes the new positions and angular positions for all the Physic::Body
and/or Physic::Node
. Performs a numerical integration of the linear (on Physic::Node
) 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::Node
and Physic::Body
Physic::Body
and Physic::Node
) 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.
<INTEGRATE-ACCELERATION Linear="Yes" Angular="No" BetaLinear="1.3"/>
00003_{tutorial}_SIMPLE-TENSILE-TEST
and a lot of others that use dynamics !
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.
INTERACTION-HISTOGRAM
Lib/GranOO3/PlugIn/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’ by hitting the ‘T’ key.
DEM::DiscreteElement
<INTERACTION-HISTOGRAM/>
No example, for internal use only
MANAGE-COLLISION
Lib/GranOO3/PlugIn/ManageCollision.cpp
Manages collision between two types of body. 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 broad_phase 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.
Using Hertz Mindlin model
<MANAGE-COLLISION Between="Body/Body"
BroadPhase="Lcm" SkipNarrowPhase="True" Regularization="POSITION"
CallBack="HertzMindlin" RestitutionCoeff="0.1" StaticFriction="0.6"
E_star="5e9" G_star="2e9" RollingLimit="5°"/>
Or using the standard2 contact
<MANAGE-COLLISION Between="Body/Body"
BroadPhase="Lcm" SkipNarrowPhase="True" Set="Global" Regularization="VELOCITY"
CallBack="Standard2" NormalStiffness="1e7" RestitutionCoeff="0.5"
StaticFriction="0.6" RollingLimit="20°"/>
00105_{dem}{mechanical}{granular}_MULTISHAPE-RAIN
and a lot of others that implement conacts
MONITOR-EXPRESSION
Lib/GranOO3/PlugIn/MonitorExpression.cpp
Monitor the value of a mathematical expression and put it in a sensor. Don’t forget to use the WRITE-SENSOR_DATA
plugin with this plugin to trigger the writing of the date in the Sensors.txt
file.
Math::Expression
<MONITOR-EXPRESSION Expression="sin(t)" SensorLabel="Sine"/>
<MONITOR-EXPRESSION Expression="SineRamp" SensorLabel="Sine"/>
No example (TODO)
MONITOR-ITEM-NUMBER
Lib/GranOO3/PlugIn/MonitorItemNumber.cpp
This plugin monitor the current value of deleted item of a given type. This plugin has no influence on the computation except the possibility to stop the simulation with the StopAt
option.
Core::Base
, DEM::Element
, Physic::Body
, Physic::Ground
and so on…
Physic::Ground
, DEM::Tool
or DEM::SupportShape
<MONITOR-ITEM-NUMBER What="Physic::Ground"/>
<MONITOR-ITEM-NUMBER What="DEM::SupportShape" ID="Boundary"/>
<MONITOR-ITEM-NUMBER What="DEM::Beam" StopAt="1000"/>
00034_{lattice}{dem}{mechanical}{elastic}{beam}_BRAZILIAN-TEST
MONITOR-STRAIN
Lib/GranOO3/PlugIn/MonitorStrain.cpp
This plugin monitor a global strain of a given set of Physic::Node elements. The strain is computed with both a linear displacement assumption and least square method to approximate a global linear displacement field. Base on this global linear displacement field a strain is measurement. This Plugin creates a sensor and must be ran in the processing section to be updated.
Physic::Node
setPhysic::Node
SetOf ID to measure the strain
<MONITOR-STRAIN/>
No example (TODO)
NEW-EXPRESSION
Lib/GranOO3/PlugIn/NewExpression.cpp
Creates a new Math::Expression
with a given ID
Math::Expression::glob("ID")
<NEW-EXPRESSION F="Sin(3*t)+4" ID="Sinus" />
00014_{lattice}{dem}{mechanical}{brittle}{beam}_BENDING-TEST
and some others
NEW-FRAME
Lib/GranOO3/PlugIn/NewFrame.cpp
Creates a new Geom::Frame
with a given ID. The created frame can be used to set position and orientation of new items.
Geom::Frame
. The new Geom::Frame
can be retrieved in C++ code with Geom::Frame::glob("ID")
<NEW-FRAME Center="Pt" Quat="Qt" ID="F1" />
<NEW-FRAME Center="Pt" ID="F2" />
<NEW-FRAME Center="(0,0,1)" ID="F3" />
<NEW-FRAME Center="(0,0,1)" Quat="(0,0,1)(90)" ID="F4" />
00032_{lattice}{dem}{mechanical}{elastic}{beam}_BOUNCING-BALL-v1/
and many other examples
NEW-GROUND
Lib/GranOO3/PlugIn/NewGround.cpp
Creates a new Physic::Ground
with a given ID. A ground is a rigid body which is excluded for the dynamic calculation. So, a ground is fixed by default. However, you can impose a displacement ta a ground to move it.
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")
.
<NEW-GROUND Type="Sphere" Radius="1.0" ID="Sphere"/>
00032_{lattice}{dem}{mechanical}{elastic}{beam}_BOUNCING-BALL-v1
and many other examples
NEW-MATERIAL
Lib/GranOO3/PlugIn/NewMaterial.cpp
Creates a new Physic::Material
with a given ID
<NEW-MATERIAL ID="Steel" YoungModulus="210e9" PoissonRatio="0.2" Set="Drum"/>
00102_{dem}{mechanical}{granular}_MIXER
and some other examples
NEW-MATERIAL-COUPLE
Lib/GranOO3/PlugIn/NewMaterialCouple.cpp
Creates a new Physic::MaterialCouple
with a given ID. A material couple can be used with contact to implement specific material properties between two specific material. A material couple must be related to two specific materials defined with the NEW-MATERIAL plugin. After that, if you want to use it inside contact management, you must activate the ‘UseMat’ option of the Callback method of the ‘MANAGE-COLLISION’ plugin.
<NEW-MATERIAL-COUPLE ID="Aluminium / Steel" RestitutionCoeff="0.4" StaticFriction="0.2" />
00102_{dem}{mechanical}{granular}_MIXER
NEW-POINT
Lib/GranOO3/PlugIn/NewPoint.cpp
Creates a new Geom::Point
with a given ID
Geom::Point
can be retrieved in C++ code with Geom::Point::glob("ID")
<NEW-POINT Val="(1.0, 0.3, 0.)" ID="P1o"/>
No example (TODO)
NEW-QUATERNION
Lib/GranOO3/PlugIn/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”)``
<NEW-QUATERNION Val=(1.0, 0.3, 0.) ID="Q1"/>
No example (TODO)
NEW-SUPPORT-SHAPE
Lib/GranOO3/PlugIn/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 UPDATE-SUPPORT-SHAPE 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
<NEW-SUPPORT-SHAPE Type="Sphere" Radius="1.0" ID="SHShape"/>
No example, but it could be replaced by NEW-GROUND plugin in most of case
NEW-TIME-STEP
Lib/GranOO3/PlugIn/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.
<NEW-TIME-STEP Val="1e-3" ID="Thermal"/>
00040_{lattice}{thermo-mechanical}{elastic}{beam}_THERMAL-CONDUCTION
NEW-TOOL
Lib/GranOO3/PlugIn/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
<NEW-TOOL Type="Sphere" Radius="1.0" ID="Impacter"/>
00034_{lattice}{dem}{mechanical}{elastic}{beam}_BRAZILIAN-TEST
and some other examples
NEW-VARIABLE
Lib/GranOO3/PlugIn/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")
<NEW-VARIABLE Val="6.283185307179586" desc="this is 2 x pi" ID="2_PI"/>
No example (TODO)
NEW-VECTOR
Lib/GranOO3/PlugIn/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")
<NEW-VECTOR Val=(1.0, 0.3, 0.) ID="V1"/>
No example (but it is useless plugin)
PUT-IN-CONTACT
Lib/GranOO3/PlugIn/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 NEW-TOOL
plugin and use this plugin to put 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 targeted precision used to stop the calculation.
Physic::Body
Physic::Body
set used to compute contact
<PUT-IN-CONTACT ID="indentor" Direction="(0,-1,0)" InitialStep="0.000001" Precision="1e-10"/>
00034_{lattice}{dem}{mechanical}{elastic}{beam}_BRAZILIAN-TEST
READ-DOMAIN
Lib/GranOO3/PlugIn/ReadDomain.cpp
This plugin read a discrete domain file (or a Finite Element file (.gfem format) and load it in the current simulation.
<READ-DOMAIN FileName="Hello.agdd" FastMode="True"/>
00003_{tutorial}_SIMPLE-TENSILE-TEST
and a lot of examples
RELEASE-EL-POWER-AS-HEAT
Lib/GranOO3/PlugIn/ReleaseElPowerAsHeat.cpp
Releases the electrical power, computed by the CONDUCT-CURRENT
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::Element
SetOf ID to apply the treatment
<RELEASE-EL-POWER-AS-HEAT Factor="0.9" />
/00043_{lattice}{thermo-electrical}{beam}_JOULE-HEATING
SAVE-DOMAIN
Lib/GranOO3/PlugIn/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.
the .xyz or .xyzr format is a very simple and common format that stores the discrete element center and their radii
the .off format only save the polyhedral support shape in the .off format
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.
<SAVE-DOMAIN EveryIter="50"/>
<SAVE-DOMAIN TriggerIf="(t>=20 and t<=30)" Type="lgdd"/>
<SAVE-DOMAIN FileName="DiscreteDomain1.gdd"/>
00011_{lattice}{dem}{mechanical}{brittle}{beam}_TENSILE-TEST
and a lot of examples
SETOF-OPERATOR
Lib/GranOO3/PlugIn/SetOfOperator.cpp
This plugin makes operations between two SetOf :union, make_intersection or make_difference
<SETOF-OPERATOR Set1="Global" Set2="xMin" Op="make_difference" Set="Result" />
No example (TODO)
SOLVER-CD
Lib/GranOO3/PlugIn/SolverCD.cpp
The solver CD is an Explicit solver for finite element simulation
Physic::Node
<SOLVER-CD />
00050_{fem}{mechanical}{elastic}_TENSILE-TEST
and some other FEM examples
SPH-APPLY-PRESSURE-FORCE
Lib/GranOO3/PlugIn/SphApplyPressureForce.cpp
Compute and apply the pressure force on SPH::Particle
SPH::Particle
setSPH::Particle
SetOf ID to apply the treatment
<SPH-APPLY-PRESSURE-FORCE />
00060_{sph}{mechanical}{fluid}_LIQUID-RAIN
SPH-APPLY-VISCOUS-FORCE
Lib/GranOO3/PlugIn/SphApplyViscousForce.cpp
Compute and apply the viscous force on SPH::Particle
SPH::Particle
setSPH::Particle
SetOf ID to apply the treatment
<SPH-APPLY-VISCOUS-FORCE/>
00060_{sph}{mechanical}{fluid}_LIQUID-RAIN
SPH-CLEAR-INTERACTION
Lib/GranOO3/PlugIn/SphClearInteraction.cpp
Clear the interactions on a SPH::Particle
set
SPH::Particle
setSPH::Particle
SetOf ID to apply the treatment
<SPH-CLEAR-INTERACTION />
00060_{sph}{mechanical}{fluid}_LIQUID-RAIN
SPH-UPDATE-INTERACTION
Lib/GranOO3/PlugIn/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.
<SPH-UPDATE-INTERACTION Method="Lcm"/>
00060_{sph}{mechanical}{fluid}_LIQUID-RAIN
SPH-UPDATE-LOCAL-DENSITY
Lib/GranOO3/PlugIn/SphUpdateLocalDensity.cpp
Update the local density of a SPH::Particle
set
SPH::Particle
setSPH::Particle
SetOf ID to apply the treatment
<SPH-UPDATE-LOCAL-DENSITY />
00060_{sph}{mechanical}{fluid}_LIQUID-RAIN
SPH-UPDATE-PRESSURE
Lib/GranOO3/PlugIn/SphUpdatePressure.cpp
Update the local pressure of a SPH::Particle
set
SPH::Particle
setSPH::Particle
SetOf ID to apply the treatment
<SPH-UPDATE-PRESSURE GazStiffness="3" GazDensity="1000"/>
00060_{sph}{mechanical}{fluid}_LIQUID-RAIN
STATIC-SOLVE
Lib/GranOO3/PlugIn/StaticSolve.cpp
This Plugin can be used to solve a static problem in one iteration. At this time, it can be used only with a XBeam Set. Note that you must compile GranOO in FEM_MODE
(this is the default mode) to use this feature.
DEM::Bond
setDEM::Bond
SetOf ID to apply the treatment
<STATIC-SOLVE/>
00020_{lattice}{fem}{mechanical}{elastic}{xbeam}_TENSILE-TEST
and other xbeam examples
STEP
Lib/GranOO3/PlugIn/Step.cpp
This plugin is a special plugin that you must trigger when you want to begin a new sequence in your simulation. Commonly there are only 3 steps : PreProcessing, Processing and PostProcessing. However, with this plugin, you can do as you want. It is quite useful when you want to mix several sequence in your simulation.
<STEP Label="init-processing" IterNumber="10000" >
...
... some plugin here ...
...
</STEP>
00001_{tutorial}_HELLO-WORLD
and all the examples !
UPDATE-BOND-STRAIN
Lib/GranOO3/PlugIn/UpdateBondStrain.cpp
This PlugIn computes strain tensor of bonds. This method is based on this paper 1. Note that this plugin must be used with the UPDATE-STRAIN plugin which works on DEM::Element. Note that this plugin create a DEM::BondStrain
properties. Note that this plugin is just for measuring, it does not affect the computational results.
DEM::Bond
that bond DEM::Element
which own DEM::Strain
property <UPDATE-STRAIN Method="LSQ" />
<UPDATE-BOND-STRAIN />
TODO
André, D., Girardot, J., & Hubert, C. (2019). A novel DEM approach for modeling brittle elastic media based on distinct lattice spring model. Computer Methods in Applied Mechanics and Engineering, 350, 100-122.
UPDATE-BOND-STRESS
Lib/GranOO3/PlugIn/UpdateBondStress.cpp
This PlugIn computes stress tensor of bonds. The stresses are computed from the Hook’s law. So, the bonds must have a DEM::BondStrain
property. If you set a MaxPrincipalStress
or a MaxNormalStress
values, this plugin can manage fracture by disabling the required bonds.
DEM::Bond
which own DEM::BondStrain
property <UPDATE-STRAIN Method="LSQ" />
<UPDATE-BOND-STRAIN />
<UPDATE-BOND-STRESS YoungModulus="50e9" PoissonRatio="0.2"/>
TODO
UPDATE-BOND-VECTOR-STRESS
Lib/GranOO3/PlugIn/UpdateBondVectorStress.cpp
This PlugIn computes stress vector based on the force reaction. Note that this plugin is very experimental and, at this time, this method does not provide good results. So it is not documented.
UPDATE-STRAIN
Lib/GranOO3/PlugIn/UpdateStrain.cpp
This PlugIn computes strain tensors based on the least square method. This method is based on this paper 1. Note that this plugin is applied on DEM::Element
with DEM::Strain
property. If the DEM::Strain
does not exist, it is automatically created.
DEM::Element
with DEM::Strain
property <UPDATE-STRAIN Method="LSQ" />
00012_{lattice}{dem}{mechanical}{elastic}{flatbond}_TENSILE-TEST
and all the flat bond examples
André, D., Girardot, J., & Hubert, C. (2019). A novel DEM approach for modeling brittle elastic media based on distinct lattice spring model. Computer Methods in Applied Mechanics and Engineering, 350, 100-122.
UPDATE-STRESS
Lib/GranOO3/PlugIn/UpdateStress.cpp
This PlugIn computes the stress for each specified DEM::Element
with a DEM::Stress
property. Note that if the DEM::Stress
properties do not exist the plugin will automatically create these properties.
The Stress can be computed in two ways : - VIRIAL
which uses the virial stress method [1,2] - LSQ
method based on least square method (experimental)
DEM::Element
set with DEM::Stress
property<UPDATE-STRESS Method="Virial" VolumeFraction"0.68" NeighbourLevel="1" />
00011_{lattice}{dem}{mechanical}{brittle}{beam}_TENSILE-TEST/
and other brittle examples
[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.
UPDATE-SUPPORT-SHAPE
Lib/GranOO3/PlugIn/UpdateSupportShape.cpp
Update DEM::SupportShape
length from its associated moving DEM::DiscreteElement
set. The DEM::SupportShape
are a perfect shape which can be associated to a discrete domain. It is useful when you want to compute macroscopic global stresses or strains.
DEM::SupportShape
setDEM::SupportShape
ID to apply the treatment
<UPDATE-SUPPORT-SHAPE />
00010_{lattice}{dem}{mechanical}{elastic}{beam}_TENSILE-TEST
and some other examples
UPDATE-VORONOI-DOMAIN
Lib/GranOO3/PlugIn/UpdateVoronoiDomain.cpp
This plugin can be used with polyhedral DEM::Element given by voronoi tesselation. It allows to take advantage of the voronoi domain to do such tricky things : - creates automatically DEM::VoronoiBond properties - update the shape of the polyhedral DEM::Element in order to keep domains continuous - monitoring the total fracture surface (using a sensor)
DEM::VoronoiBond
and DEM::VoronoiElement
set<UPDATE-VORONOI-DOMAIN EveryIter="5" MonitorFractureSurface="True"/>
00012_{lattice}{dem}{mechanical}{elastic}{flatbond}_TENSILE-TEST
and some other examples that implement voronoi domains
VELOCITY-VERLET-STEP1
Lib/GranOO3/PlugIn/VelocityVerletStep1.cpp
This Plugin is quite rigorous way for computing the new positions and angular positions. If you want to really have an accurate solution, you can use this plugin instead of the INTEGRATE-ACCELERATION
plugin. Note that : - we do not find any significant difference between INTEGRATE-ACCELERATION
and this plugin - this plugin must be used with the VELOCITY-VERLET-STEP2
This plugin corresponds to the step 1 and 2 described on the wikipedia page 1 while VELOCITY-VERLET-STEP2
corresponds to the step 3 and 4
Physic::Node
and Physic::Body
Physic::Body
and Physic::Node
) 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.
<VELOCITY-VERLET-STEP1 Linear="Yes" Angular="No"/>
... some plugins and treatments (bond loads, contact managements, etc.) ...
<VELOCITY-VERLET-STEP2 Linear="Yes" Angular="No"/>
No example, useful for internal benchmark
1 https://en.wikipedia.org/wiki/Verlet_integration#Velocity_Verlet
VELOCITY-VERLET-STEP2
Lib/GranOO3/PlugIn/VelocityVerletStep2.cpp
This Plugin is quite rigorous way for computing the new positions and angular positions. If you want to really have an accurate solution, you can use this plugin instead of the INTEGRATE-ACCELERATION
plugin. Note that : - we do not find any significant difference between INTEGRATE-ACCELERATION
and this plugin - this plugin must be used with the VELOCITY-VERLET-STEP1
This plugin corresponds to the step 3 and 4 described on the wikipedia page 1 while VELOCITY-VERLET-STEP1
corresponds to the step 1 and 2
Physic::Node
and Physic::Body
Physic::Body
and Physic::Node
) 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.
<VELOCITY-VERLET-STEP1 Linear="Yes" Angular="No"/>
... some plugins and treatments (bond loads, contact managements, etc.) ...
<VELOCITY-VERLET-STEP2 Linear="Yes" Angular="No"/>
No example, useful for internal benchmark
1 https://en.wikipedia.org/wiki/Verlet_integration#Velocity_Verlet
WRITE-SENSOR-DATA
Lib/GranOO3/PlugIn/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.
If the Energy Balance is activated (see EnergyBalance plugin) total energies are stored in sensors.
You can use the python script granoo-plot to post-treat your sensor file.
libCore::Sensor
objects<WRITE-SENSOR-DATA HeaderShape="Column"/>
00010_{lattice}{dem}{mechanical}{elastic}{beam}_TENSILE-TEST
and a lot of examples that implement numerical sensors
Box
Lib/GranOO3/Shape/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... Lx="1." Ly="1." Lz="1." />
Cone
Lib/GranOO3/Shape/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." />
ConeTruncated
Lib/GranOO3/Shape/ConeTruncated.cpp
Use it to build something with a Shape::ConeTruncated
shape.
^ Y
|
|
<---------------- Lenth ---------->
------ |
/ ^ \\-----|
/ R \ \------
/ a \ . \-----
/ d \ . \------ ^
| i | .G \ R2
| u | ......................|.....X-----------> X
| s | . /
\ 1 / . /------
\ + / . /-----
\ / . /------
\ -----
------/
/
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
Lib/GranOO3/Shape/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
Lib/GranOO3/Shape/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
Lib/GranOO3/Shape/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
Lib/GranOO3/Shape/Polyhedron.cpp
Use it to build something with a Shape::Polyhedron shape. A polyhedron model any kind of shape
<..something... File="Bunny.off"/>
Rectangle
Lib/GranOO3/Shape/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... Ly="1." Lz="1." />
Sphere
Lib/GranOO3/Shape/Sphere.cpp
Use it to build something with a Shape::Sphere shape.
^ Y
|
|
|
-----+-----
---/ . \---
-/ . \-
/ . \
/ - \
/ . R a d i u s \
| . ............|-----> X
\ . /
\ . /
\ . /
-\ . /-
---\. /---
/-----------
/
Z
<..something... Radius=".1" />
Triangle
Lib/GranOO3/Shape/Triangle.cpp
Use it to build something with a Shape::Triangle shape. Note that the Shape::Triangle is a Surface shape.
Z
|
|
|
| X
| /- \
| a /- |
| / \
| /- \
| / |
| /- \
|/- theta |
/-----------------\---------Y
b
Note that the normal is oriented along its local X axis and the origin of the local frame is located at the first point.
<..something... La="1." Lb="1." Angle="1." />
IterLoop
Lib/GranOO3/Collision/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
Lib/GranOO3/Collision/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
Lib/GranOO3/Collision/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
Lib/GranOO3/Collision/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
Lib/GranOO3/Collision/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
Lib/GranOO3/Collision/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
Lib/GranOO3/Math/Variable.cpp
Current time step
it
Lib/GranOO3/Math/Variable.cpp
Current iteration step
t
Lib/GranOO3/Math/Variable.cpp
Current time