Autogenerated the Fri Jul 1 01:01:19 CEST 2022

Plugin documentation

Please find below documentation of plugins. Note that this page was autogenerated with the granoo3 -d command

Table of content


[BroadPhase<DEM::DiscreteElement, DEM::DiscreteElement>] : AABBTree

  • id : AABBTree
  • source file : 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.

Info

  • Process on : Physic::Body
  • Multithreaded : No
  • Recommended section: Processing
  • Perf Critical : YES

Optional param

Set (string, default:“Global”)
If you use this option, the AABB tree is built from all body-like objects in the domain.
AABBsFatness (float, default:0.1)
This parameter is the expansion factor applied to the AABBs. The AABB containing a Body is larger than a perfect fitting AABB (its size is 2x0.1xlength in each dimension), which allows to reduce the number of deletion/insertion in the tree when the bodies move. The draw back with fat AABBs is an increased number of potential contacting bodies, and thus more NarrowPhase operations.

Example

<....  BroadPhase="AABBTree" set_="myCustomset_" AABBsFatness="0.05" />

[BroadPhase<DEM::DiscreteElement, DEM::DiscreteElement>] : Between2SetOf

  • id : Between2SetOf
  • source file : 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.

Info

  • Process on : DEM::DiscreteElement
  • Multithreaded : No (TODO)
  • Recommended section: Processing
  • Perf Critical : YES

Required param

set_1 (string)
The ID of the first SetOf DEM::DiscreteElement
set_2 (string)
The ID of the second SetOf DEM::DiscreteElement

Example

<...  BroadPhase="Between2SetOf" set_1="Xmin" set_2="Boundary" .../>

[BroadPhase<DEM::DiscreteElement, DEM::DiscreteElement>] : Hash

  • id : Hash
  • source file : 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.

Info

  • Process on : Physic::Body andPhysic::Particle`
  • Multithreaded : No (TODO)
  • Recommended section: Processing
  • Perf Critical : YES

Optional param

K (float, default=1.004)
The K factor is the expansion factor used to compute the cell lengths. The default value (1.004) is optimized for monodisperse granular domain.
update_domain_dimensionEachIteration (int, default=1)
This process is time consuming and you can choose if you want to trigger it not at each time step.
Set (string, default:“Global”)
The SetOf to perform the contact detection.

Example

<...  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.


[BroadPhase<DEM::DiscreteElement, DEM::DiscreteElement>] : LCM

  • id : LCM
  • source file : 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.

Info

  • Process on : DEM::DiscreteElement
  • Multithreaded : No (TODO)
  • Recommended section: Processing
  • Perf Critical : YES

Optional param

K (float, default=1.004)
The K factor is the expansion factor used to compute the cell lengths. The default value (1.004) is optimized for monodisperse granular domain.
update_domain_dimensionEachIteration (int, default=1)
This process is time consuming and you can choose if you want to trigger it not at each time step.
Set (string, default:“Global”)
The SetOf to perform the contact detection.

Example

<...  BroadPhase="LCM" .../>

1 Welling, U., & Germano, G. (2011). Efficiency of linked cell algorithms. Computer Physics Communications, 182(3), 611-615.


[BroadPhase<DEM::DiscreteElement, DEM::DiscreteElement>] : Raw

  • id : Raw
  • source file : 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

Info

  • Process on : DEM::DiscreteElement
  • Multithreaded : No
  • Recommended section: Processing
  • Perf Critical : YES

Optional param

Set (string, default:“Global”)
If you use this option, the raw method is used in “mono-set” mode. It means that contacts are searched inside this set.

Example

<...  BroadPhase="Raw" set_="Boundary" .../>

[BroadPhase<DEM::DiscreteElement, DEM::SupportShape>] : SupportShape

  • id : SupportShape
  • source file : 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.

Info

  • Process on : DEM::DiscreteElement / DEM::SupportShape
  • Multithreaded : No
  • Recommended section: Processing
  • Perf Critical : Middle

Required param

SupportShapeID (string)
Gives the support shape ID here for collision detection

Optional param

Mode (string, default=“INSIDE”)
Choose here if the discrete element are INSIDE or OUTSIDE the support shape. Allowed values are “INSIDE” and “OUTSIDE”
Set (string, default:“Global”)
The DEM::DiscreteElement SetOf to perform the contact detection.

Example

<...  BroadPhase="SupportShape" SupportShapeID="Box" Mode="INSIDE" .../>

[BroadPhase<DEM::DiscreteElement, DEM::Tool>] : Tool

  • id : Tool
  • source file : 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.

Info

  • Process on : DEM::DiscreteElement / DEM::Tool
  • Multithreaded : No
  • Recommended section: Processing
  • Perf Critical : Middle

Required param

ToolID (string)
Gives the support shape ID here for collision detection

Optional param

Set (string, default:“Global”)
The DEM::DiscreteElement SetOf to perform the contact detection.

Example

<....  BroadPhase="Tool" ToolID="Box"  .../>

[BroadPhase<DEM::DiscreteElement, FEM::Surface>] : FESurface

  • id : FESurface
  • source file : 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.

Info

  • Process on : DEM::DiscreteElement / DEM::Tool
  • Multithreaded : No
  • Recommended section: Processing
  • Perf Critical : Middle

Required param

ToolID (string)
Gives the support shape ID here for collision detection

Optional param

Set (string, default:“Global”)
The DEM::DiscreteElement SetOf to perform the contact detection.

Example

<....  BroadPhase="Tool" ToolID="Box"  .../>

[BroadPhase<Physic::Body, Physic::Body>] : AABBTree

  • id : AABBTree
  • source file : 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.

Info

  • Process on : Physic::Body
  • Multithreaded : No
  • Recommended section: Processing
  • Perf Critical : YES

Optional param

Set (string, default:“Global”)
If you use this option, the AABB tree is built from all body-like objects in the domain.
AABBsFatness (float, default:0.1)
This parameter is the expansion factor applied to the AABBs. The AABB containing a Body is larger than a perfect fitting AABB (its size is 2x0.1xlength in each dimension), which allows to reduce the number of deletion/insertion in the tree when the bodies move. The draw back with fat AABBs is an increased number of potential contacting bodies, and thus more NarrowPhase operations.

Example

<....  BroadPhase="AABBTree" set_="myCustomset_" AABBsFatness="0.05" />

[BroadPhase<Physic::Body, Physic::Body>] : Hash

  • id : Hash
  • source file : 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.

Info

  • Process on : Physic::Body andPhysic::Particle`
  • Multithreaded : No (TODO)
  • Recommended section: Processing
  • Perf Critical : YES

Optional param

K (float, default=1.004)
The K factor is the expansion factor used to compute the cell lengths. The default value (1.004) is optimized for monodisperse granular domain.
update_domain_dimensionEachIteration (int, default=1)
This process is time consuming and you can choose if you want to trigger it not at each time step.
Set (string, default:“Global”)
The SetOf to perform the contact detection.

Example

<...  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.


[BroadPhase<Physic::Body, Physic::Body>] : Lcm

  • id : Lcm
  • source file : 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.

Info

  • Process on : Physic::Body, SPH::Particle
  • Multithreaded : No (TODO)
  • Recommended section: Processing
  • Perf Critical : YES

Optional param

K (float, default=1.004)
The K factor is the expansion factor used to compute the cell lengths. The default value (1.004) is optimized for monodisperse granular domain.
update_domain_dimensionEachIteration (int, default=1)
This process is time consuming and you can choose if you want to trigger it not at each time step.
Set (string, default:“Global”)
The SetOf to perform the contact detection.

Example

<...  BroadPhase="Lcm" .../>

1 Welling, U., & Germano, G. (2011). Efficiency of linked cell algorithms. Computer Physics Communications, 182(3), 611-615.


[BroadPhase<Physic::Body, Physic::Body>] : Raw

  • id : Raw
  • source file : 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

Info

  • Process on : Physic::Body, SPH::Particle
  • Multithreaded : No
  • Recommended section: Processing
  • Perf Critical : YES

Optional param

Set (string, default:“Global”)
If you use this option, the raw method is used in “mono-set” mode. It means that contacts are searched inside this set.
set_1 (string, default:"")
Specify the first set to use the method in “bi-set” mode.
set_2 (string, default:"")
Specify the second set to use the method in “bi-set” mode.

Note that : - The set_1 required the set_2 param. - You can not use the set_ param with set_1 or set_2

Example

<....  BroadPhase="Raw" set_1="Wall" set_2="Xmin"/>
<....  BroadPhase="Raw" set_="Boundary" />

[BroadPhase<Physic::Body, Physic::Ground>] : Raw

  • id : Raw
  • source file : 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

Info

  • Process on : Physic::Body, SPH::Particle
  • Multithreaded : No
  • Recommended section: Processing
  • Perf Critical : YES

Optional param

Set (string, default:“Global”)
If you use this option, the raw method is used in “mono-set” mode. It means that contacts are searched inside this set.
set_1 (string, default:"")
Specify the first set to use the method in “bi-set” mode.
set_2 (string, default:"")
Specify the second set to use the method in “bi-set” mode.

Note that : - The set_1 required the set_2 param. - You can not use the set_ param with set_1 or set_2

Example

<....  BroadPhase="Raw" set_1="Wall" set_2="Xmin"/>
<....  BroadPhase="Raw" set_="Boundary" />

[BroadPhase<Physic::Node, Physic::Ground>] : Raw

  • id : Raw
  • source file : 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

Info

  • Process on : Physic::Body, SPH::Particle
  • Multithreaded : No
  • Recommended section: Processing
  • Perf Critical : YES

Optional param

Set (string, default:“Global”)
If you use this option, the raw method is used in “mono-set” mode. It means that contacts are searched inside this set.
set_1 (string, default:"")
Specify the first set to use the method in “bi-set” mode.
set_2 (string, default:"")
Specify the second set to use the method in “bi-set” mode.

Note that : - The set_1 required the set_2 param. - You can not use the set_ param with set_1 or set_2

Example

<....  BroadPhase="Raw" set_1="Wall" set_2="Xmin"/>
<....  BroadPhase="Raw" set_="Boundary" />

[BroadPhase<SPH::Particle, SPH::Particle>] : Lcm

  • id : Lcm
  • source file : 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.

Info

  • Process on : Physic::Body, SPH::Particle
  • Multithreaded : No (TODO)
  • Recommended section: Processing
  • Perf Critical : YES

Optional param

K (float, default=1.004)
The K factor is the expansion factor used to compute the cell lengths. The default value (1.004) is optimized for monodisperse granular domain.
update_domain_dimensionEachIteration (int, default=1)
This process is time consuming and you can choose if you want to trigger it not at each time step.
Set (string, default:“Global”)
The SetOf to perform the contact detection.

Example

<...  BroadPhase="Lcm" .../>

1 Welling, U., & Germano, G. (2011). Efficiency of linked cell algorithms. Computer Physics Communications, 182(3), 611-615.


[CallBack<DEM::DiscreteElement, DEM::DiscreteElement>] : Standard

  • id : Standard
  • source file : Lib/GranOO3/DEM/ContactLaw/Standard.cpp

The description is not available


[CallBack<DEM::DiscreteElement, DEM::SupportShape>] : Standard

  • id : Standard
  • source file : Lib/GranOO3/DEM/ContactLaw/Standard.cpp

The description is not available


[CallBack<DEM::DiscreteElement, DEM::Tool>] : Standard

  • id : Standard
  • source file : Lib/GranOO3/DEM/ContactLaw/Standard.cpp

The description is not available


[CallBack<DEM::DiscreteElement, FEM::Surface>] : Standard

  • id : Standard
  • source file : Lib/GranOO3/DEM/ContactLaw/Standard.cpp

The description is not available


[CallBack<FEM::Surface, Physic::Node>] : Standard

  • id : Standard
  • source file : 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…

Info

  • Process on : Physic::Body, Physic::Ground, Physic::Particle
  • Multithreaded : No (Not needed)
  • Recommended section: Processing
  • Perf Critical : YES

Optional param

Stiffness (float)
Stiffness repulsion factor.
NormalForce (string)
Gives a value OR a function regarding the interpenetration noted ‘d’. It allows non linear contact law. If a single value is given, it will be understood as a standard stiffness repulsion factor.
RestitutionCoeff (float, default=1)
Gives a value of the restitution coeff in the [0, 1] range. Note that you can’t use both RestitutionCoeff and DampingFactor parameters.
DampingFactor (float, default=0)
Gives a value of the damping factor. This parameter is less intuitive than the RestitutionCoeff param. Note that you can’t use both RestitutionCoeff and DampingFactor parameters.
ExcludeBondedDiscreteElements (bool, default=False)
if True, test if the two discrete elements are bonded and in that case do nothing. Otherwise, the Standard CallBack is appplied.
StaticDryFrictionCoeff (float, default=0)
The dry friction coefficient in static mode. The static mode means no relative movement between the two item in contact.
DynamicDryFrictionCoeff (float, default=0)
The dynamic friction coefficient in static mode. The dynamic mode means that a relative movement the two item in contact exists.
DryFrictionSlope (float, default=0)
The slope of the regularization of the dry friction coefficient
DryFrictionSlope (float, default=0)
The slope of the regularization of the dry friction coefficient
DryFrictionCoeff (float, default=0)
The dry friction coefficient in whole static and dynamic mode. Note that you can not use this param with static_dry_friction_coeff and dynamic_dry_friction_coeff.
RegularizationType (string, default="")
The regularization type. If you use Friction this param is required. The allowed values are “piecewise” or “exponential”
DryFrictionLifeTime (float, default=0)
This parameters is needed when the exponential RegularizationType is used. It corresponds to the inverse of the decay rate for the exponential regularization function.
AdhesionForce (float, default=0)
Set the adhesion force of the contact response.

Examples

<...  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"/>

[CallBack<Physic::Body, Physic::Body>] : HertzMindlin

  • id : HertzMindlin
  • source file : 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.

Info

  • Process on : Physic::Body, Physic::Ground, Physic::Particle
  • Multithreaded : No (Not needed)
  • Recommended section: Processing
  • Perf Critical : YES

Required param

E_star (float)
Choose the equivalent Young’s modulus value
G_star (float)
Choose the equivalent Coulomb’s modulus value

optional param

See the Standard2 contact law

Examples

< ... CallBack="HertzMindlin" RestitutionCoeff="0.1" StaticFriction="0.6" 
      E_star="5e9" G_star="2e9" RollingLimit="5°"/>

[CallBack<Physic::Body, Physic::Body>] : Standard

  • id : Standard
  • source file : 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…

Info

  • Process on : Physic::Body, Physic::Ground, Physic::Particle
  • Multithreaded : No (Not needed)
  • Recommended section: Processing
  • Perf Critical : YES

Optional param

Stiffness (float)
Stiffness repulsion factor.
NormalForce (string)
Gives a value OR a function regarding the interpenetration noted ‘d’. It allows non linear contact law. If a single value is given, it will be understood as a standard stiffness repulsion factor.
RestitutionCoeff (float, default=1)
Gives a value of the restitution coeff in the [0, 1] range. Note that you can’t use both RestitutionCoeff and DampingFactor parameters.
DampingFactor (float, default=0)
Gives a value of the damping factor. This parameter is less intuitive than the RestitutionCoeff param. Note that you can’t use both RestitutionCoeff and DampingFactor parameters.
ExcludeBondedDiscreteElements (bool, default=False)
if True, test if the two discrete elements are bonded and in that case do nothing. Otherwise, the Standard CallBack is appplied.
StaticDryFrictionCoeff (float, default=0)
The dry friction coefficient in static mode. The static mode means no relative movement between the two item in contact.
DynamicDryFrictionCoeff (float, default=0)
The dynamic friction coefficient in static mode. The dynamic mode means that a relative movement the two item in contact exists.
DryFrictionSlope (float, default=0)
The slope of the regularization of the dry friction coefficient
DryFrictionSlope (float, default=0)
The slope of the regularization of the dry friction coefficient
DryFrictionCoeff (float, default=0)
The dry friction coefficient in whole static and dynamic mode. Note that you can not use this param with static_dry_friction_coeff and dynamic_dry_friction_coeff.
RegularizationType (string, default="")
The regularization type. If you use Friction this param is required. The allowed values are “piecewise” or “exponential”
DryFrictionLifeTime (float, default=0)
This parameters is needed when the exponential RegularizationType is used. It corresponds to the inverse of the decay rate for the exponential regularization function.
AdhesionForce (float, default=0)
Set the adhesion force of the contact response.

Examples

<...  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"/>

[CallBack<Physic::Body, Physic::Body>] : Standard2

  • id : Standard2
  • source file : 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…

Info

  • Process on : Physic::Body, Physic::Ground, Physic::Particle
  • Multithreaded : No (Not needed)
  • Recommended section: Processing
  • Perf Critical : YES

Optional param

Regularization (string, default=“VELOCITY”)
Choose the regularization type : VELOCITY or POSITION for managing friction. The VELOCITY is fast and gives good results whereas POSITION is slow and gives very good results
RestitutionCoeff(float, default=1.)
Choose a restitution coefficient value (must be between 0). 1 corresponds to no damping whereas 0 corresponds to a maximal value of the damping.
NormalStiffness(float, default=0)
Choose a normal stiffness value for the contact
AdhesionForce(float, default=0)
Choose an adhesion force value for the contact
TangentialStiffness(float, default=0)
Choose a value for the tangential stiffness. Note that this feature is only available if you choose the POSITION regularization type.
StaticFriction(float, , default=0)
Choose a value for the static friction coefficient, must be in the [0, 0.5] range
DynamicFriction(float, default=StaticFriction)
Choose a value for the dynamic friction coefficient. If you let it blank, the value is equal to the static friction coefficient one.
FrictionSlope(float, default=1e5)
The friction slope value for the regularization (only available for VELOCITY regularization type)
RollingStiffness(float, default=0.)
The rolling stiffness value
RollingLimit(float, default=None)
The rolling limit angle value.

Examples

<...  CallBack="Standard2" NormalStiffness="1e7" RestitutionCoeff="0.5" 
      Regularization="VELOCITY" StaticFriction="0.6" RollingLimit="20°"

[CallBack<Physic::Body, Physic::Ground>] : HertzMindlin

  • id : HertzMindlin
  • source file : 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.

Info

  • Process on : Physic::Body, Physic::Ground, Physic::Particle
  • Multithreaded : No (Not needed)
  • Recommended section: Processing
  • Perf Critical : YES

Required param

E_star (float)
Choose the equivalent Young’s modulus value
G_star (float)
Choose the equivalent Coulomb’s modulus value

optional param

See the Standard2 contact law

Examples

< ... CallBack="HertzMindlin" RestitutionCoeff="0.1" StaticFriction="0.6" 
      E_star="5e9" G_star="2e9" RollingLimit="5°"/>

[CallBack<Physic::Body, Physic::Ground>] : Standard

  • id : Standard
  • source file : 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…

Info

  • Process on : Physic::Body, Physic::Ground, Physic::Particle
  • Multithreaded : No (Not needed)
  • Recommended section: Processing
  • Perf Critical : YES

Optional param

Stiffness (float)
Stiffness repulsion factor.
NormalForce (string)
Gives a value OR a function regarding the interpenetration noted ‘d’. It allows non linear contact law. If a single value is given, it will be understood as a standard stiffness repulsion factor.
RestitutionCoeff (float, default=1)
Gives a value of the restitution coeff in the [0, 1] range. Note that you can’t use both RestitutionCoeff and DampingFactor parameters.
DampingFactor (float, default=0)
Gives a value of the damping factor. This parameter is less intuitive than the RestitutionCoeff param. Note that you can’t use both RestitutionCoeff and DampingFactor parameters.
ExcludeBondedDiscreteElements (bool, default=False)
if True, test if the two discrete elements are bonded and in that case do nothing. Otherwise, the Standard CallBack is appplied.
StaticDryFrictionCoeff (float, default=0)
The dry friction coefficient in static mode. The static mode means no relative movement between the two item in contact.
DynamicDryFrictionCoeff (float, default=0)
The dynamic friction coefficient in static mode. The dynamic mode means that a relative movement the two item in contact exists.
DryFrictionSlope (float, default=0)
The slope of the regularization of the dry friction coefficient
DryFrictionSlope (float, default=0)
The slope of the regularization of the dry friction coefficient
DryFrictionCoeff (float, default=0)
The dry friction coefficient in whole static and dynamic mode. Note that you can not use this param with static_dry_friction_coeff and dynamic_dry_friction_coeff.
RegularizationType (string, default="")
The regularization type. If you use Friction this param is required. The allowed values are “piecewise” or “exponential”
DryFrictionLifeTime (float, default=0)
This parameters is needed when the exponential RegularizationType is used. It corresponds to the inverse of the decay rate for the exponential regularization function.
AdhesionForce (float, default=0)
Set the adhesion force of the contact response.

Examples

<...  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"/>

[CallBack<Physic::Body, Physic::Ground>] : Standard2

  • id : Standard2
  • source file : 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…

Info

  • Process on : Physic::Body, Physic::Ground, Physic::Particle
  • Multithreaded : No (Not needed)
  • Recommended section: Processing
  • Perf Critical : YES

Optional param

Regularization (string, default=“VELOCITY”)
Choose the regularization type : VELOCITY or POSITION for managing friction. The VELOCITY is fast and gives good results whereas POSITION is slow and gives very good results
RestitutionCoeff(float, default=1.)
Choose a restitution coefficient value (must be between 0). 1 corresponds to no damping whereas 0 corresponds to a maximal value of the damping.
NormalStiffness(float, default=0)
Choose a normal stiffness value for the contact
AdhesionForce(float, default=0)
Choose an adhesion force value for the contact
TangentialStiffness(float, default=0)
Choose a value for the tangential stiffness. Note that this feature is only available if you choose the POSITION regularization type.
StaticFriction(float, , default=0)
Choose a value for the static friction coefficient, must be in the [0, 0.5] range
DynamicFriction(float, default=StaticFriction)
Choose a value for the dynamic friction coefficient. If you let it blank, the value is equal to the static friction coefficient one.
FrictionSlope(float, default=1e5)
The friction slope value for the regularization (only available for VELOCITY regularization type)
RollingStiffness(float, default=0.)
The rolling stiffness value
RollingLimit(float, default=None)
The rolling limit angle value.

Examples

<...  CallBack="Standard2" NormalStiffness="1e7" RestitutionCoeff="0.5" 
      Regularization="VELOCITY" StaticFriction="0.6" RollingLimit="20°"

[CallBack<Physic::Node, Physic::Ground>] : Standard

  • id : Standard
  • source file : 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…

Info

  • Process on : Physic::Body, Physic::Ground, Physic::Particle
  • Multithreaded : No (Not needed)
  • Recommended section: Processing
  • Perf Critical : YES

Optional param

Stiffness (float)
Stiffness repulsion factor.
NormalForce (string)
Gives a value OR a function regarding the interpenetration noted ‘d’. It allows non linear contact law. If a single value is given, it will be understood as a standard stiffness repulsion factor.
RestitutionCoeff (float, default=1)
Gives a value of the restitution coeff in the [0, 1] range. Note that you can’t use both RestitutionCoeff and DampingFactor parameters.
DampingFactor (float, default=0)
Gives a value of the damping factor. This parameter is less intuitive than the RestitutionCoeff param. Note that you can’t use both RestitutionCoeff and DampingFactor parameters.
ExcludeBondedDiscreteElements (bool, default=False)
if True, test if the two discrete elements are bonded and in that case do nothing. Otherwise, the Standard CallBack is appplied.
StaticDryFrictionCoeff (float, default=0)
The dry friction coefficient in static mode. The static mode means no relative movement between the two item in contact.
DynamicDryFrictionCoeff (float, default=0)
The dynamic friction coefficient in static mode. The dynamic mode means that a relative movement the two item in contact exists.
DryFrictionSlope (float, default=0)
The slope of the regularization of the dry friction coefficient
DryFrictionSlope (float, default=0)
The slope of the regularization of the dry friction coefficient
DryFrictionCoeff (float, default=0)
The dry friction coefficient in whole static and dynamic mode. Note that you can not use this param with static_dry_friction_coeff and dynamic_dry_friction_coeff.
RegularizationType (string, default="")
The regularization type. If you use Friction this param is required. The allowed values are “piecewise” or “exponential”
DryFrictionLifeTime (float, default=0)
This parameters is needed when the exponential RegularizationType is used. It corresponds to the inverse of the decay rate for the exponential regularization function.
AdhesionForce (float, default=0)
Set the adhesion force of the contact response.

Examples

<...  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"/>

[DEM::SupportShape] : Box

  • id : Box
  • source file : Lib/GranOO3/DEM/SupportShapeT.cpp

Use it to build something with a Shape::Box shape

Sketch

     Class Box is a Volume with rectangular sections:
    
                                  ^ Y
                                  |
                                  |
                         ---------|-----------
                        /         |          /|
                  dimZ /          |         / |
                      /           .        /  |
                     /            .       /   |
                    /--------------------/    |
                    |             .      |    |
                    |             .......|...---------> X
                    |            .       |    |
               dimY |           .        |    /
                    |          /         |   /
                    |         /          |  /
                    |        /           | / 
                    |-------/------------|/
                           /   dimX
                          Z
    

Required param

Lx (float)
The length of the box along its local X axis
Ly (float)
The length of the box along its local Y axis
Lz (float)
The length of the box along its local Z axis

Example

<..something... Lx="1." Ly="1." Lz="1." />

[DEM::SupportShape] : Cone

  • id : Cone
  • source file : Lib/GranOO3/DEM/SupportShapeT.cpp

Use it to build something with a Shape::Cone shape.

Sketch

                             ^ 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

Required param

Radius (float)
The radius of the cone
Length (float)
The length of the cone along its local X axis

Example

<..something... Radius=".1" Length="1." />

[DEM::SupportShape] : Cylinder

  • id : Cylinder
  • source file : Lib/GranOO3/DEM/SupportShapeT.cpp

Use it to build something with a Shape::Cylinder shape

Sketch

                                  ^ Y
                                  |
                                  |
                                  |
                                  |
                                length
               -------------------------------------
              / R \               .               /   \
             /  a  \              -              /     \
             |  d  |              .              |     |
             |  i  |              ..................+--------> X
             |  u  |             .               |     |
             \  s  /            .                \     /
              \   /            .                  \   /
               -------------------------------------
                             /
                            /
                           /
                          Z

Note that the symmetry axis is along its local X axis

Required param

Radius (float)
The radius of the cylinder
Length (float)
The length of the cylinder along its local X axis

Example

<..something... Radius=".1" Length="1." />

[DEM::SupportShape] : Polyhedron

  • id : Polyhedron
  • source file : Lib/GranOO3/DEM/SupportShapeT.cpp

Use it to build something with a Shape::Polyhedron shape. A polyhedron model any kind of shape

Required param

File (string)
Gives .off file that describes the polyhedron to load

Optional param

Offset_File (string)
Gives an offset file that describes the boundaries of the off file. It may be useful to mark some Surfaces of the polyhedron. You can get an example in the Tool/Script directory.
Scale (float, default=1)
Set a scale factor to enlarge or scale down the polyhedron

Example

<..something...  File="Bunny.off"/>

[DEM::SupportShape] : Sphere

  • id : Sphere
  • source file : Lib/GranOO3/DEM/SupportShapeT.cpp

Use it to build something with a Shape::Sphere shape.

Sketch

                                  ^ Y
                                  |
                                  |
                                  |
                             -----+-----
                         ---/     .     \---
                       -/         .         \-
                      /           .           \
                     /            -            \
                    /             . R a d i u s \
                    |             . ............|-----> X
                    \            .              /
                     \          .              /
                      \        .              /
                       -\     .             /-
                         ---\.          /---
                            /-----------
                           /
                          Z

Required param

Radius (float)
The radius of the sphere

Example

<..something... Radius=".1" />

[DEM::Tool] : Box

  • id : Box
  • source file : Lib/GranOO3/DEM/ToolT.cpp

Use it to build something with a Shape::Box shape

Sketch

     Class Box is a Volume with rectangular sections:
    
                                  ^ Y
                                  |
                                  |
                         ---------|-----------
                        /         |          /|
                  dimZ /          |         / |
                      /           .        /  |
                     /            .       /   |
                    /--------------------/    |
                    |             .      |    |
                    |             .......|...---------> X
                    |            .       |    |
               dimY |           .        |    /
                    |          /         |   /
                    |         /          |  /
                    |        /           | / 
                    |-------/------------|/
                           /   dimX
                          Z
    

Required param

Lx (float)
The length of the box along its local X axis
Ly (float)
The length of the box along its local Y axis
Lz (float)
The length of the box along its local Z axis

Example

<..something... Lx="1." Ly="1." Lz="1." />

[DEM::Tool] : Cone

  • id : Cone
  • source file : Lib/GranOO3/DEM/ToolT.cpp

Use it to build something with a Shape::Cone shape.

Sketch

                             ^ 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

Required param

Radius (float)
The radius of the cone
Length (float)
The length of the cone along its local X axis

Example

<..something... Radius=".1" Length="1." />

[DEM::Tool] : Cylinder

  • id : Cylinder
  • source file : Lib/GranOO3/DEM/ToolT.cpp

Use it to build something with a Shape::Cylinder shape

Sketch

                                  ^ Y
                                  |
                                  |
                                  |
                                  |
                                length
               -------------------------------------
              / R \               .               /   \
             /  a  \              -              /     \
             |  d  |              .              |     |
             |  i  |              ..................+--------> X
             |  u  |             .               |     |
             \  s  /            .                \     /
              \   /            .                  \   /
               -------------------------------------
                             /
                            /
                           /
                          Z

Note that the symmetry axis is along its local X axis

Required param

Radius (float)
The radius of the cylinder
Length (float)
The length of the cylinder along its local X axis

Example

<..something... Radius=".1" Length="1." />

[DEM::Tool] : Polyhedron

  • id : Polyhedron
  • source file : Lib/GranOO3/DEM/ToolT.cpp

Use it to build something with a Shape::Polyhedron shape. A polyhedron model any kind of shape

Required param

File (string)
Gives .off file that describes the polyhedron to load

Optional param

Offset_File (string)
Gives an offset file that describes the boundaries of the off file. It may be useful to mark some Surfaces of the polyhedron. You can get an example in the Tool/Script directory.
Scale (float, default=1)
Set a scale factor to enlarge or scale down the polyhedron

Example

<..something...  File="Bunny.off"/>

[DEM::Tool] : Sphere

  • id : Sphere
  • source file : Lib/GranOO3/DEM/ToolT.cpp

Use it to build something with a Shape::Sphere shape.

Sketch

                                  ^ Y
                                  |
                                  |
                                  |
                             -----+-----
                         ---/     .     \---
                       -/         .         \-
                      /           .           \
                     /            -            \
                    /             . R a d i u s \
                    |             . ............|-----> X
                    \            .              /
                     \          .              /
                      \        .              /
                       -\     .             /-
                         ---\.          /---
                            /-----------
                           /
                          Z

Required param

Radius (float)
The radius of the sphere

Example

<..something... Radius=".1" />

[GranOO] : GranOO

  • id : GranOO
  • source file : 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>

Required param

Version (int)
The GranOO’s version

Optional param

OutDir (string, default=input file name)
Set the name of the ouptut directory where all the result files will be saved. If a directory with this name already exists, GranOO creates a directory with the ’_N’ suffix to prevent file deletion. If the entry is empty, the output directory simply takes the name of the chosen input file.
Verbose (bool, default=False)
Set the verbosity of the simulation. This option is useful for debugging.
BackupExecutable(bool, default=False)
Save the executable binary file inside the backup directory.

[Math::Function] : NormalRandom

  • id : NormalRandom
  • source file : 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]


[Math::Function] : RampAndConstant

  • id : RampAndConstant
  • source file : Lib/GranOO3/Math/FunctionT.hpp

Ramp and constant function, useful to apply a progressive loading

      |    _________Cst__________
      |   /.
      |  / .
      | /  .
      |/___________________________
         lim

Example

RAC(it, 1000, 1e6)


[Math::Function] : SineRamp

  • id : SineRamp
  • source file : 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

Example

SineRamp(t, 0, 1, 2e-4, 0)

[Math::Function] : UniRandom

  • id : UniRandom
  • source file : Lib/GranOO3/Math/FunctionT.hpp

Uniform random function. It picks a value in the range [min, max] Use it simply as UniRnd(min, max)


[NarrowPhase<Physic::Body, Physic::Body>] : WithAnyShape

  • id : WithAnyShape
  • source file : 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.

Info

  • Process on : Physic::Body, Physic::Particle, Physic::Ground
  • Multithreaded : No
  • Recommended section: Processing
  • Perf Critical : YES

Optional param

MaxPenetrationWithsurface (float, default:0.)
If you use this option, you can define a maximal penetration value. If the computed penetration value is higher that this value, the contact is ignored. This option is useful in case of contact with surfaces because in non-closed domains. In this case some bodies can avoid and ‘go below’ surfaces. This configuration generates large values of penetration that can be by-passed with this option.

Example

<...  NarrowPhase="WithAnyShape" MaxPenetrationWithsurface="0.01" ... />

[NarrowPhase<Physic::Body, Physic::Body>] : WithSphere

  • id : WithSphere
  • source file : 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.

Info

  • Process on : Physic::Body, Physic::Ground
  • Multithreaded : No
  • Recommended section: Processing
  • Perf Critical : YES

[NarrowPhase<Physic::Body, Physic::Ground>] : WithAnyShape

  • id : WithAnyShape
  • source file : 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.

Info

  • Process on : Physic::Body, Physic::Particle, Physic::Ground
  • Multithreaded : No
  • Recommended section: Processing
  • Perf Critical : YES

Optional param

MaxPenetrationWithsurface (float, default:0.)
If you use this option, you can define a maximal penetration value. If the computed penetration value is higher that this value, the contact is ignored. This option is useful in case of contact with surfaces because in non-closed domains. In this case some bodies can avoid and ‘go below’ surfaces. This configuration generates large values of penetration that can be by-passed with this option.

Example

<...  NarrowPhase="WithAnyShape" MaxPenetrationWithsurface="0.01" ... />

[NarrowPhase<Physic::Body, Physic::Ground>] : WithSphere

  • id : WithSphere
  • source file : 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.

Info

  • Process on : Physic::Body, Physic::Ground
  • Multithreaded : No
  • Recommended section: Processing
  • Perf Critical : YES

[NarrowPhase<Physic::Node, Physic::Ground>] : WithAnyShape

  • id : WithAnyShape
  • source file : 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.

Info

  • Process on : Physic::Body, Physic::Particle, Physic::Ground
  • Multithreaded : No
  • Recommended section: Processing
  • Perf Critical : YES

Optional param

MaxPenetrationWithsurface (float, default:0.)
If you use this option, you can define a maximal penetration value. If the computed penetration value is higher that this value, the contact is ignored. This option is useful in case of contact with surfaces because in non-closed domains. In this case some bodies can avoid and ‘go below’ surfaces. This configuration generates large values of penetration that can be by-passed with this option.

Example

<...  NarrowPhase="WithAnyShape" MaxPenetrationWithsurface="0.01" ... />

[Physic::Ground] : Box

  • id : Box
  • source file : Lib/GranOO3/Physic/GroundT.cpp

Use it to build something with a Shape::Box shape

Sketch

     Class Box is a Volume with rectangular sections:
    
                                  ^ Y
                                  |
                                  |
                         ---------|-----------
                        /         |          /|
                  dimZ /          |         / |
                      /           .        /  |
                     /            .       /   |
                    /--------------------/    |
                    |             .      |    |
                    |             .......|...---------> X
                    |            .       |    |
               dimY |           .        |    /
                    |          /         |   /
                    |         /          |  /
                    |        /           | / 
                    |-------/------------|/
                           /   dimX
                          Z
    

Required param

Lx (float)
The length of the box along its local X axis
Ly (float)
The length of the box along its local Y axis
Lz (float)
The length of the box along its local Z axis

Example

<..something... Lx="1." Ly="1." Lz="1." />

[Physic::Ground] : Cone

  • id : Cone
  • source file : Lib/GranOO3/Physic/GroundT.cpp

Use it to build something with a Shape::Cone shape.

Sketch

                             ^ 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

Required param

Radius (float)
The radius of the cone
Length (float)
The length of the cone along its local X axis

Example

<..something... Radius=".1" Length="1." />

[Physic::Ground] : ConeTruncated

  • id : ConeTruncated
  • source file : Lib/GranOO3/Physic/GroundT.cpp

Use it to build something with a Shape::ConeTruncated shape.

Sketch

                             ^ 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

Required param

Radius (float)
The radius of the ConeTruncated
Length (float)
The length of the ConeTruncated along its local X axis

Example

<..something... Radius=".1" Length="1." />

[Physic::Ground] : Cylinder

  • id : Cylinder
  • source file : Lib/GranOO3/Physic/GroundT.cpp

Use it to build something with a Shape::Cylinder shape

Sketch

                                  ^ Y
                                  |
                                  |
                                  |
                                  |
                                length
               -------------------------------------
              / R \               .               /   \
             /  a  \              -              /     \
             |  d  |              .              |     |
             |  i  |              ..................+--------> X
             |  u  |             .               |     |
             \  s  /            .                \     /
              \   /            .                  \   /
               -------------------------------------
                             /
                            /
                           /
                          Z

Note that the symmetry axis is along its local X axis

Required param

Radius (float)
The radius of the cylinder
Length (float)
The length of the cylinder along its local X axis

Example

<..something... Radius=".1" Length="1." />

[Physic::Ground] : Disk

  • id : Disk
  • source file : Lib/GranOO3/Physic/GroundT.cpp

Use it to build something with a Shape::Disk shape. A disk shape is a Surface shape.

Sketch

                    -
                 /  ^  \
                /   R   \
               /    a    \
              /     d     \
              |     i     |
              |     u - --------> X
              |     s     |
              \           /
               \         /
                \       /
                 \     -
                  ----

Note that the normal is oriented along its local X axis

Required param

Radius (float)
The radius of the disk

Example

<..something... Radius=".1" />

[Physic::Ground] : Plane

  • id : Plane
  • source file : Lib/GranOO3/Physic/GroundT.cpp

Use it to build something with a Shape::Plane shape. A plane shape is an infinite Surface shape.

Sketch

                 /+
               /- |
            /--   |
         /--      |
       /-         |
     --|          |
       |          |
       |          |
       |     ---------------> X
       |          |
       |          |
       |         -+
       |      --/
       |    -/
       | --/
       +/

Note that the normal is oriented along its local X axis

Example

<..something...  />

[Physic::Ground] : Polyhedron

  • id : Polyhedron
  • source file : Lib/GranOO3/Physic/GroundT.cpp

Use it to build something with a Shape::Polyhedron shape. A polyhedron model any kind of shape

Required param

File (string)
Gives .off file that describes the polyhedron to load

Optional param

Offset_File (string)
Gives an offset file that describes the boundaries of the off file. It may be useful to mark some Surfaces of the polyhedron. You can get an example in the Tool/Script directory.
Scale (float, default=1)
Set a scale factor to enlarge or scale down the polyhedron

Example

<..something...  File="Bunny.off"/>

[Physic::Ground] : Rectangle

  • id : Rectangle
  • source file : Lib/GranOO3/Physic/GroundT.cpp

Use it to build something with a Shape::Rectangle shape. Note that the Shape::Rectangle is a Surface shape.

Sketch

             |Y  /+
             | /- |
            /+-   |
         /-- |    |
       /-    |    |
     --|     |    |
       |     |    |
       |     |    |
       |    -+--------------> X
       |  -/      |
       +-/        |
     -/|         -+
  Z-/  |      --/
       |    -/
       | --/
       +/

Note that the normal is oriented along its local X axis

Required param

DimY (float)
The length of the box along its local Y axis
DimZ (float)
The length of the box along its local Z axis

Example

<..something... DimY="1." DimZ="1." />

[Physic::Ground] : Sphere

  • id : Sphere
  • source file : Lib/GranOO3/Physic/GroundT.cpp

Use it to build something with a Shape::Sphere shape.

Sketch

                                  ^ Y
                                  |
                                  |
                                  |
                             -----+-----
                         ---/     .     \---
                       -/         .         \-
                      /           .           \
                     /            -            \
                    /             . R a d i u s \
                    |             . ............|-----> X
                    \            .              /
                     \          .              /
                      \        .              /
                       -\     .             /-
                         ---\.          /---
                            /-----------
                           /
                          Z

Required param

Radius (float)
The radius of the sphere

Example

<..something... Radius=".1" />

[PlugIn] : ADD-VOLTAGE-SOURCE

  • id : ADD-VOLTAGE-SOURCE
  • source file : 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.

Info

  • Process on : DEM::Element set that own a DEM::Electrical property
  • Multithreaded : No
  • Recommended section: PreProcessing

Required param

GroundSetOf (string)
The DE set Id which is grounded
PositiveSetOf (string)
The DE set Id at which the voltage is applied
DCVoltage (float)
Voltage magnitude applied between the GroundSetOf and the Positive SetOf Discrete Elements sets

Example

<ADD-VOLTAGE-SOURCE GroundSetOf="Box-xMin" PositiveSetOf="Box-xMax" DCVoltage="1.0"/>

Simulation example

  • 00042_{lattice}{electrical}{beam}_ELECTRICAL-CONDUCTION

[PlugIn] : APPLY-ANGULAR-VELOCITY

  • id : APPLY-ANGULAR-VELOCITY
  • source file : Lib/GranOO3/PlugIn/ApplyAngularVelocity.cpp

Set the angular velocity of Physic::Node set. Note that the linear acceleration and linear position are not affected.

Info

  • Process on : Physic::Node set
  • Multithreaded : No
  • Recommended section: All

Required param

X (float or expression)
The X component value of the velocity
Y (float or expression)
The Y component value of the velocity
Z (float or expression)
The Z component value of the velocity

Optional param

Set (string, default=global)
The Physic::Node SetOf ID to apply the treatment

Example

<APPLY-ANGULAR-VELOCITY X="0.1*t" Y="1." Z="0." Set="xMax"/>

Simulation example

  • No simulation example (TODO)

[PlugIn] : APPLY-BOND-LOAD

  • id : APPLY-BOND-LOAD
  • source file : 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.

Info

  • Process on : DEM::Bond set
  • Multithreaded : Yes
  • Recommended section: Processing

Optional param

BuildElementPair (boolean, default=True)
If set to true, the plugin build new element pair when a bond is destroyed.
Set (string, default=global)
The DEM::Bond SetOf ID to apply the treatment

Example

<APPLY-BOND-LOAD BuildElementPair="Yes" />

Simulation example

00010_{lattice}{dem}{mechanical}{elastic}{beam}_TENSILE-TEST and all lattice examples


[PlugIn] : APPLY-BOND-SURFACE-IT

  • id : APPLY-BOND-SURFACE-IT
  • source file : 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.

Info

  • Process on : DEM::DiscreteElement and DEM::Bond
  • Multithreaded : No
  • Recommended section: PreProcessing

Optional param

Set (string, default=global)
The DEM::DiscreteElement set to compute the average radius
CoordNumber (float, default=auto_compute)
The global coordination number value. If you let it blanks, GranOO try to compute a value automatically but it is preferable for you to put manually the correct value.
AddBrokenSurfaceSensor (bool, default=True)
If this flag is set to True, a sensor is added that monitors the total broken surface (see DEM::Bond::get_disabled_cumulative_surface method)

Example

<APPLY-BOND-SURFACE-IT CoordNumber="10" AddBrokenSurfaceSensor="True"/>

Simulation example

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.


[PlugIn] : APPLY-DENSITY

  • id : APPLY-DENSITY
  • source file : Lib/GranOO3/PlugIn/ApplyDensity.cpp

Set the density of a Physic::Body set

Info

  • Process on : Physic::Body set
  • Multithreaded : No
  • Recommended section: PreProcessing

Required param

Value (float)
The value of the density

Optional param

VolumeFraction (float, default=1.)
This option is usefull when yo want to apply a continuous density. The density (d) is computed with the volume fraction (vf) as d = 1 / vf
Set (string, default=global)
The Physic::Body SetOf ID to apply the treatment

Example

<APPLY-DENSITY Value="7000." Set="Box"/>
<APPLY-DENSITY Value="7000." VolumeFraction="0.5"/>

Simulation example

00013_{lattice}{dem}{mechanical}{brittle}{flatbond}_TENSILE-TEST and a lot of others


[PlugIn] : APPLY-DISPLACEMENT

  • id : APPLY-DISPLACEMENT
  • source file : Lib/GranOO3/PlugIn/ApplyDisplacement.cpp

This plugin applies a displacement on a specified Physic::Particle set. The imposed displacement is specified either by setting the imposed displacement vector components X, Y and Z, or by setting parameter Clamp to Yes (which corresponds to X=“0.”, Y=“0.” and Z=“0.”).

In addition to numeric values, the imposed displacement vector also accepts expression which can be set thought the Expression XML Tag (outline definition), or by direct typing of formula (inline definition).

The velocity and the acceleration are also affected by this plugin : - velocity is set as the first derivative of the imposed displacement - acceleration is set as the second derivative of the imposed displacement

Info

  • Process on : Physic::Particle set, Physic::Ground item
  • Multithreaded : No
  • Recommended section: Processing

Required param

X (float or expression)
The value on X. This option is NON required if Clamp is set to true.
Y (float or expression)
Same as above.
Z (float or expression)
Same as above.

Optional param

Clamp (bool, default=False)
If set to true the imposed displacement is null and the X, Y, Z options are non required
Set (string, default=global)
The Physic::Particle SetOf ID to apply the treatment
GroundID (string, default="")
If GroundID is set, the displacement is applyed to a ground shape. Note that a ground is also a DEM::SupportShape

Example

<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"/>

Simulation example

00010_{lattice}{dem}{mechanical}{elastic}{beam}_TENSILE-TEST and a lot of others


[PlugIn] : APPLY-FE-DISPLACEMENT

  • id : APPLY-FE-DISPLACEMENT
  • source file : Lib/GranOO3/PlugIn/ApplyFEDisplacement.cpp

This plugin imposes a displacement on a specified Physic::Particle set. The imposed displacement is specified either by setting the imposed displacement vector components X, Y and Z, or by setting parameter Clamp to Yes (which corresponds to X=“0.”, Y=“0.” and Z=“0.”).

In addition to numeric values, the imposed displacement vector also accepts expression which can be set thought the Expression XML Tag (outline definition), or by direct typing of formula (inline definition).

The velocity and the acceleration are also affected by this plugin : - velocity is set as the first derivative of the imposed displacement - acceleration is set as the second derivative of the imposed displacement

Info

  • Process on : Physic::Particle set, Physic::Ground item
  • Multithreaded : No
  • Recommended section: Processing

Required param

X (float or expression)
The value on X. This option is NON required if Clamp is set to true.
Y (float or expression)
Same as above.
Z (float or expression)
Same as above.

Optional param

Clamp (bool, default=False)
If set to true the imposed displacement is null and the X, Y, Z options are non required
Set (string, default=global)
The Physic::Particle SetOf ID to apply the treatment
GroundID (string, default="")
If GroundID is set, the displacement is applyed to a ground shape. Note that a ground is also a DEM::SupportShape

Example

<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"/>

Simulation example

No example (TODO)


[PlugIn] : APPLY-FE-LOAD

  • id : APPLY-FE-LOAD
  • source file : Lib/GranOO3/PlugIn/ApplyFELoad.cpp

Apply a loading on FEM::Element.

Info

  • Process on : FEM::Element set,
  • Multithreaded : No
  • Recommended section: ??

Example

<APPLY-FE-LOAD />

Simulation example

00050_{fem}{mechanical}{elastic}_TENSILE-TEST and some FEM examples


[PlugIn] : APPLY-FE-MATERIAL

  • id : APPLY-FE-MATERIAL
  • source file : Lib/GranOO3/PlugIn/ApplyFEMaterial.cpp

Set the elastic and density property of FEM::Element set

Info

  • Process on : FEM::Element set
  • Multithreaded : No
  • Recommended section: PreProcessing

Required param

YoungModulus (float)
Set the Young’s modulus value
PoissonRation (float)
Set the Poisson’s ratio value
Density (float)
Set the density value

Optional param

Set (string, default=global)
The FEM::Element SetOf ID to apply the treatment

Example

<APPLY-FE-MATERIAL YoungModulus="50e9" PoissonRatio="0.2" Density="3200"/>

Simulation example

00050_{fem}{mechanical}{elastic}_TENSILE-TEST and other FEM examples


[PlugIn] : APPLY-FORCE

  • id : APPLY-FORCE
  • source file : 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.

Info

  • Process on : Physic::Node set
  • Multithreaded : No
  • Recommended section: Processing

Required param

X (float or mathematical expression)
The X value of the force vector.
Y (float or mathematical expression)
The Y value of the force vector
Z (float or mathematical expression)
The Z value of the force vector

Optional param

Resultant (bool, default=False)
If set to True the force value is divided by the number of discrete element.
Set (string, default=global)
The Physic::Particle SetOf ID to apply the force

Example

<APPLY-FORCE X="100." Y="-1.*sin(it)" Z="0." Set="xMax"/>

Simulation example

00003_{tutorial}_SIMPLE-TENSILE-TEST and some others


[PlugIn] : APPLY-FRACTURE

  • id : APPLY-FRACTURE
  • source file : 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

Info

  • Process on : DEM::Element
  • Multithreaded : No
  • Recommended section: Processing

Required param

FailureMode (string=“BRITTLE” or “PLASTIC”)
Choose here the failure mode. Note that the plastic mode is experimental

Optional param

MaxHydrostaticStress (float, default=0.)
If this criterion is set, the failure computation is based on a maximal hydrostatic stress value : 1/3 * (Sig_I + Sig_II + Sig_III)
MaxVonMisesStress (float, default=0.)
If this criterion is set, the failure computation is based on a maximal von mises stress value
MaxTrescaStress (float, default=0.)
If this criterion is set, the failure computation is based on a maximal Tresca stress value : (Sig_I - Sig_III)
MaxPrincipalStress (float, default=0.)
If this criterion is set, the failure computation is based on a maximal principal sress value : max(Sig_I, sig_II, Sig_III)
CriterionLaw (a list of math expression, default=none, separator=‘;’)
Instead of using MaxPrincipalCriterion, griffith_criterion and so on, you can build your own expression. You can access to the principal stresses with the 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.
CriterionVar (a list of variable and math expression, default=none, separator=‘;’)
If you use the ‘CriterionLaw’, you are probably interested by this feature. For example, you can create variable here which can be re-used in the CriterionLaw. For example, if you set ‘C1=UniRnd(8e6,12e6);C2=UniRnd(-120e6,-80e6)’, you create two new variables with a uniform distribution applied on DEM::Element. Then you can reuse it inside the ‘CriterionLaw’. Note that each value of your criterion is stored in a std::vector of DEM::VirialStress object.
Set (string, default=“Global”)
Set here the ID of the SetOf to apply the failure criterion
AddElementToCrackSet(bool, default=True)
If set to true, the DEM::Element that reach the failure criterion are added to a particular SetOf named “crack”
ApplyCriterionOn(string, default=“CLOSEST”)
Only “ALL”, “HALF_PLANE”, “CLOSEST” values are allowed. * ALL : the failure criterion is applied on all 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
HalfPlaneCoeff (float, default=0.)
Here, you can choose the amount of removing. If you set 0, it corresponds to a plane. If you set less than 0. it allows to break beside the plane. A good value for periodic domain is -0.5

Example

<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)"/>

Simulation example

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


[PlugIn] : APPLY-GRAVITY

  • id : APPLY-GRAVITY
  • source file : 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.

Info

  • Process on : Physic::Node
  • Multithreaded : No
  • Recommended section: Processing

Required param

X (float)
The X value of the gravity vector.
Y (float)
The Y value of the gravity vector
Z (float)
The Z value of the gravity vector

Optional param

  • Set : (string, default=global) The Physic::Particle SetOf ID to apply the gravity

Example

<APPLY-GRAVITY X="0." Y="-9.81" Z="0." Set="Global"/>

Simulation example

00104_{dem}{mechanical}{granular}_SPHERICAL-RAIN and a lot of others


[PlugIn] : APPLY-LINEAR-VELOCITY

  • id : APPLY-LINEAR-VELOCITY
  • source file : Lib/GranOO3/PlugIn/ApplyLinearVelocity.cpp

Set the linear velocity of Physic::Particle set. Note that the linear acceleration and linear position are not affected.

Info

  • Process on : Physic::Particle set
  • Multithreaded : No
  • Recommended section: All

Required param

X (float or expression)
The X component value of the velocity
Y (float or expression)
The Y component value of the velocity
Z (float or expression)
The Z component value of the velocity

Optional param

Set (string, default=global)
The Physic::Particle SetOf ID to apply the treatment

Example

<APPLY-LINEAR-VELOCITY X="0.1*t" Y="1." Z="0." Set="xMax"/>

Simulation example

No example (TODO)


[PlugIn] : APPLY-ORIENTATION

  • id : APPLY-ORIENTATION
  • source file : 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.

Info

  • Process on : Physic::Body set
  • Multithreaded : No
  • Recommended section: Processing

Required param

X (float or expression)
The value on X. This option is NON required if Clamp is set to true.
Y (float or expression)
Same as above.
Z (float or expression)
Same as above.
R (float or expression)
Same as above.

Optional param

Clamp (bool, default=False)
If set to true the imposed displacement is null and the X, Y, Z, R options are non required
Set (string, default=global)
The Physic::Body SetOf ID to apply the treatment

Example

<APPLY-ORIENTATION Clamp="Yes"/>

Simulation example

00031_{lattice}{dem}{mechanical}{elastic}{beam}_BOUNCING-BALL-v0 and some others


[PlugIn] : APPLY-PERIODIC-CONDITION

  • id : APPLY-PERIODIC-CONDITION
  • source file : 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

Info

  • Process on : DEM::Element, DEM::Bond, DEM::PeriodicBoundary, DEM::Periodic (property)
  • Multithreaded : No
  • Recommended section: Processing

Example

<APPLY-PERIODIC-CONDITION />

Simulation example

No example for periodic condition (TODO)


[PlugIn] : APPLY-ROTATION

  • id : APPLY-ROTATION
  • source file : 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.

Info

  • Process on : Physic::Body set
  • Multithreaded : No
  • Recommended section: Processing

Required param

Axis (vector:triplet of floats or vector id)
The X,Y,Z values of the rotation axis.
Angle (float or expression)
The rotation angle. To impose an angular velocity, you can use a depending time expression here,
Center (triplet of floats or vector id))
The X,Y,Z values of the rotation center. Note that, if you use the “Centroid” pattern, the point coordinates are automatic computed by taking the centroid value of the specified set.

Optional param

Set (string, default=global)
The Physic::Body SetOf ID to apply the treatment

Example

<APPLY-ROTATION Axis="( 1.,0.,0.)" Center="Centroid" Angle="sin(t)" Set="Cylinder-xMax"/>

Simulation example

00014_{lattice}{dem}{mechanical}{brittle}{beam}_BENDING-TEST and some others


[PlugIn] : APPLY-TEMPERATURE

  • id : APPLY-TEMPERATURE
  • source file : 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.

Info

  • Process on : DEM::Element
  • Multithreaded : No
  • Recommended section: Processing

Required param

Value (float or expression)
The temperature value the temperature to be applied to the DEM::Element

Optional param

Senstor (bool, default=true)
if set to true, the temperature is stored in a sensor. The name of the sensor is simply “Temperature_” + Set (concatenation of “Temperature_” string the set’s ID).
Set (string, default=global)
The DEM::Element SetOf ID to apply the temperature

Example

<APPLY-TEMPERATURE Value="798." Set="Cylinder-xMin"/>

Simulation example

00040_{lattice}{thermo-mechanical}{elastic}{beam}_THERMAL-CONDUCTION and some others


[PlugIn] : APPLY-THERMAL-EXPANSION

  • id : APPLY-THERMAL-EXPANSION
  • source file : 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.

Info

  • Process on : DEM::Bond set
  • Multithreaded : No
  • Recommended section: Processing

Required param

Alpha (float)
The value of the linear thermal expansion coefficient

Optional param

Set (string, default=global)
The DEM::Bond SetOf ID to apply the treatment
Temperature (float or expression)
If this val is set, the temperature is considered as uniform in the whole domain. If not, the temperature is local and computed with DEM::Thermal properties. If you set an uniform temperature, you can retrieve it with Math::Expression::glob("Temperature")
ID (string)
If you set an uniform temperature, you can retrieve it with Math::Expression::glob(ID) in your C++ code.

Example

<APPLY-THERMAL-EXPANSION Alpha="10e-6" Temperature="0.001*it"/>

Simulation example

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.


[PlugIn] : APPLY-TORQUE

  • id : APPLY-TORQUE
  • source file : 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.

Info

  • Process on : Physic::Body set
  • Multithreaded : No
  • Recommended section: Processing

Required param

X (float or mathematical expression)
The X value of the torque vector.
Y (float or mathematical expression)
The Y value of the torque vector
Z (float or mathematical expression)
The Z value of the torque vector

Optional param

Resultant (boolean, default=False)
If set to True the torque value is divided by the number of discrete element.
Set (string, default=global)
The Physic::Body SetOf ID to apply the torque

Example

<APPLY-TORQUE X="100." Y="-1.*sin(it)" Z="0." Set="xMax"/>

Simulation example

No example (TODO)


[PlugIn] : APPLY-TRANSLATION

  • id : APPLY-TRANSLATION
  • source file : 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.

Info

  • Process on : all Physic::Node, Physic::Ground
  • Multithreaded : No
  • Recommended section: PreProcessing

Required param

Vector (triplet of float or vector ID)
Set the translation vector

Optional param

Set (string, default=global)
The Physic::Particle SetOf ID to apply the treatment
Freeze (bool, default=True)
If set to True, the SetOf is frozen after transformation. It means that its velocity and acceleration (linear and angular) are set to null values and its initial parameters are updated to the current parameter.

Example

<APPLY-TRANSLATION Vector=(1., 0., 0.)/>

Simulation example

00031_{lattice}{dem}{mechanical}{elastic}{beam}_BOUNCING-BALL-v0


[PlugIn] : BOUNDARY-BOX

  • id : BOUNDARY-BOX
  • source file : 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.

Info

  • Process on : all Physic::Node
  • Multithreaded : No
  • Recommended section: Processing

Required param

MinCorner (triplet of float or string)
The min point position of the bounding box corner
MaxCorner (triplet of float or string)
The max point position of the bounding box corner

Optional param param

Verbose (bool, default=True)
If set to True, it displays the number of deleted particle

Example

<BOUNDARY-BOX MinCorner=(-1,-1,-1) MaxCorner=(1,1,1)/>

Simulation example

No example (TODO)


[PlugIn] : BUILD-DELAUNAY-ELEMENT-PAIR

  • id : BUILD-DELAUNAY-ELEMENT-PAIR
  • source file : 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.

Info

+ Process on         : `DEM::Element` to create `DEM::ElementPair`
+ Multithreaded      : No
+ Recommended section: PreProcessing, PostProcessing

Optional param

BondLengthRatioCutoff (float, default=2.0)
The maximal acceptable length of bonds.

Example

<BUILD-DELAUNAY-ELEMENT-PAIR BondLengthRatioCutoff="2.0" />

Simulation example

No example (TODO)


[PlugIn] : BUILD-ELEMENT-PAIR-SET-FROM-ELEMENT-SET

  • id : BUILD-ELEMENT-PAIR-SET-FROM-ELEMENT-SET
  • source file : 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.

Info

  • Process on : DEM::ElementPair
  • Multithreaded : No
  • Recommended section: PreProcessing

Example

<BUILD-ELEMENT-PAIR-SET-FROM-ELEMENT-SET" />

Simulation example

No example (TODO)


[PlugIn] : BUILD-GRID-DOMAIN

  • id : BUILD-GRID-DOMAIN
  • source file : Lib/GranOO3/PlugIn/BuildGridDomain.cpp

Build a parallelepiped discrete elements domain, with dimensions DimX, DimY and DimZ, with number of DEM::DiscreteElement defined by ElementNumber.

By default, a dispersion factor is 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.

Info

  • Process on : It creates DEM::DiscreteElement
  • Multithreaded : No
  • Recommended section: PreProcessing

Required param

DimX (float)
Set the length along X of the parallelepiped
DimY (float)
Set the length along Y of the parallelepiped
DimZ (float)
Set the length along Z of the parallelepiped
ElementNumber (int)
The number of discrete element to create

Optional param

Dispersion (float, default=0.5)
Set the spatial dispersion. Tha value must be in the [0., 1.] range
RadiusDispersion (float, default=0.5)
Set the dispersion of discrete element radii. The value must be in the [0., 1.] range
PerfectBoundaries (bool, default=True)
If True the discrete elements that belong to the boundaries are perfectly aligned on the boundary

Example

<BUILD-GRID-DOMAIN DimX="0.01" DimY="0.01" DimZ="0.1" ElementNumber="2000"/>

Simulation example

No example (TODO)


[PlugIn] : BUILD-NEIGHBOUR-ELEMENT-PAIR

  • id : BUILD-NEIGHBOUR-ELEMENT-PAIR
  • source file : 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).

Info

  • Process on : DEM::ElementPair set
  • Multithreaded : No
  • Recommended section: PreProcessing

Required param

WantedCardinalityValue (float)
This option is required only if the ForceCardinality is set to True

Optional param

ForceCardinality (float, default=False)
if True, the cardinality (coordination) value is forced to the value specified by the WantedCardinalityValue option
BoundarySet (string, default="")
if a boundary set and an inclusion set is specified, the computation of the coordination number is more precise
InclusionSet (string, default="")
similar as BoundarySet but for inclusional particles inside the domain
NeighbourSet (string, default="")
you can specify a discrete element set to process the element pair construction

Example

<BUILD-NEIGHBOUR-ELEMENT-PAIR ForceCardinality="Yes" WantedCardinalityValue="8." BoundarySet="Boundary"/>

Simulation example

No example (TODO)


[PlugIn] : BUILD-VORONOI-DOMAIN

  • id : BUILD-VORONOI-DOMAIN
  • source file : 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.

Info

  • Process on : DEM::DiscreteElement
  • Multithreaded : No
  • Recommended section: PreProcessing

Optional param

BuildDelaunayElementPair (bool, default=False)
Instantiate element pair from the Delaunay diagram given by the Voronoi tessellation. Note that all the previous element pairs are removed.
BondLengthRatioCutoff (float, default=2.0)
The maximal acceptable length of bonds. This is a sub-option of the BuildDelaunayElementPair option.
GroundID (string, default="")
By default the plugin search of a ground which defines the boundaries of the discrete domain. You can set a specific GroundID here.
Periodic (bool, default=False)
If you want to deal with periodic voronoi domain, you must set this option. Note that, it works only if the initial discrete domain is also periodic.

Example

<BUILD-VORONOI-DOMAIN BuildDelaunayElementPair="True"/>

Simulation example

No example (TODO)


[PlugIn] : CHECK

  • id : CHECK
  • source file : 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.

Info

  • Process on : all Physic::Node
  • Multithreaded : No
  • Recommended section: Processing

Optional param

AntiSwap (bool, default=true)
for detection if an element is going too far (1e5 far from the origin)
DeleteBadElement (bool, default=false)
if true the inconsistent element is removed from the computation. In most of cases, this is a bad idea :(
SaveDomainBeforeQuit (bool, default=true)
if true the whole domain is saved before quitting.

Example

<CHECK/>

Simulation example

00003_{tutorial}_SIMPLE-TENSILE-TEST and a lot of others


[PlugIn] : CLEAR-LOAD

  • id : CLEAR-LOAD
  • source file : 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.

Info

  • Process on : Physic::Node and Physic::Body set
  • Multithreaded : No
  • Recommended section: Processing

Optional param

Set (string, default=global)
The Physic::Particle and Physic::Body SetOf ID to apply the treatment

Example

<CLEAR-LOAD/>

Simulation example

00003_{tutorial}_SIMPLE-TENSILE-TEST and a lot of others


[PlugIn] : COMPUTE-BOND-SURFACE-IT

  • id : COMPUTE-BOND-SURFACE-IT
  • source file : 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.

Info

  • Process on : DEM::DiscreteElement and DEM::Bond
  • Multithreaded : No
  • Recommended section: Processing

Example

<COMPUTE-BOND-SURFACE-IT/>

Simulation example

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.


[PlugIn] : COMPUTE-OPTIMAL-TIME-STEP

  • id : COMPUTE-OPTIMAL-TIME-STEP
  • source file : 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.

Info

  • Process on : All Physic::CriticalTimeStep objects
  • Multithreaded : No
  • Recommended section: PreProcessing

Optional param

Ratio (float, default=0.147)
This coefficient is applied to the computed value of the time step
TimeStep (string, default=)
Give an alternative Physic::Time ID to use. This alternatrive time step may be created with the NewTimeStep plugin. By default the main time step is chosen.

Example

<COMPUTE-OPTIMAL-TIME-STEP Ratio="0.1"/>

Simulation example

00003_{tutorial}_SIMPLE-TENSILE-TEST and a lot of others


[PlugIn] : COMPUTE-VOLUME-FRACTION

  • id : COMPUTE-VOLUME-FRACTION
  • source file : 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.

Info

  • Process on : DEM::Element
  • Multithreaded : No
  • Recommended section: PreProcessing

Optional param

Set (string, default=global)
The DEM::Element set to compute the volume fraction
DimX (float, default=0.)
Specify a box’s length to compute the volume fraction (must be used with DimY and DimZ)
DimY (float, default=0.)
Specify a box’s length to compute the volume fraction (must be used with DimX and DimZ)
DimZ (float, default=0.)
Specify a box’s length to compute the volume fraction (must be used with DimX and DimY)
Center (vector, default=(0,0,0))
Specify the box’s center (must be used with DimX, DimY and DimZ)

Example

<COMPUTE-VOLUME-FRACTION/>

Simulation example

No example (TODO)


[PlugIn] : CONDUCT-CURRENT

  • id : CONDUCT-CURRENT
  • source file : 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.

Info

  • Process on : DEM::Element set that own a DEM::Electrical property
  • Multithreaded : No
  • Recommended section: Processing

Optional param

Verbose (bool, default=false)
When activated, this options prints the system size and solving time, as well as the domain equivalent resistance to the standard output
Set (string, default=global)
The DEM::Element SetOf ID to apply the treatment

Example

<CONDUCT-CURRENT Verbose="Yes" IterLoop="Max"/>

Simulation example

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.


[PlugIn] : CONDUCT-HEAT

  • id : CONDUCT-HEAT
  • source file : 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

Info

  • Process on : DEM::DiscreteElement set that own a DEM::Thermal property
  • Multithreaded : No
  • Recommended section: Processing

Required param

Method (string)
Here you can choose ‘VORO’ or ‘IT’. This is two different methods for computing the surface transmission. The ‘IT’ comes from this work 1 and can be applied with spherical element. The ‘VORO’ method is based on voronoi tesselation, so it works only with polyhedral elements that come from a voronoi tesselation.

Optional param

Set (string, default=global)
The DEM::DiscreteElement SetOf ID to apply the treatment
TimeStep (string, default=)
Give an alternative Physic::Time ID to use. This alternatrive time step may be created with the NewTimeStep plugin. By default the main time step is chosen.

Example

<CONDUCT-HEAT Method="VORO"/>

Simulation example

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.


[PlugIn] : CONDUCT-HEAT-WITH-FS

  • id : CONDUCT-HEAT-WITH-FS
  • source file : 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.

Info

  • Process on : DEM::Element set that own a DEM::Thermal property
  • Multithreaded : No
  • Recommended section: Processing

Optional param

Set (string, default=global)
The DEM::Element SetOf ID to apply the treatment

Example

<CONDUCT-HEAT-WITH-FS/>

Simulation example

00043_{lattice}{thermo-electrical}{beam}_JOULE-HEATING and a lot of others


[PlugIn] : CONVERT

  • id : CONVERT
  • source file : 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.


[PlugIn] : CONVERT-BOND-TO-ELEMENT-PAIR

  • id : CONVERT-BOND-TO-ELEMENT-PAIR
  • source file : Lib/GranOO3/PlugIn/ConvertBondToElementPair.cpp

Replaces all the DEM::Bond instances by DEM::ElementPair instances.

Info

  • Process on : DEM:Bond set
  • Multithreaded : No
  • Recommended section: PreProcessing

Optional param

Set (string, default=global)
The DEM::Bond SetOf ID to apply the treatment

Example

<CONVERT-BOND-TO-ELEMENT-PAIR/>

Simulation example

No example (TODO)


[PlugIn] : CONVERT-ELEMENT-PAIR-TO-BEAM

  • id : CONVERT-ELEMENT-PAIR-TO-BEAM
  • source file : 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].

Info

  • Process on : DEM::ElementPair set
  • Multithreaded : No
  • Recommended section: PreProcessing

Required param (set1)

YoungModulus (float)
Set the Young’s modulus value of the beam
RadiusRatio (float)
Set the radius of the beam. The beam radius is computed with the RadiusRatio value. with the average value of discrete element radius

Required param (set2)

MacroYoungModulus (float)
Set the macroscopic Young’s modulus value of your domain. It involves automatic calibration process. Note that this options is not allowed if you specify directly microscopic parameters such as the ‘YoungModulus’ and the ‘RadiusRatio’ options.
MacroPoissonRatio (float)
Set the macroscopic Poisson’s ratio value of your domain. It involves automatic calibration process. Note that this options is not allowed if you specify directly microscopic parameters such as the ‘YoungModulus’ and the ‘RadiusRatio’ options.

Optional param

DampingFactor (float, default=0.)
Set the value of the damping factor
PoissonRatio (float, default=0.3)
Set the value of the Poisson’s ratio (unuseful in most of case)
MaxStress (float, default=None)
Set the maximal equivalent Rankine stress (for brittle material). If the beam reaches this value, the bond is broken. You can choose if the beam is disabled or deleted with the APPLY-LOAD PlugIn. Note that this way of deleting bond is not really accurate, you may prefer use the APPLY-FRACTURE plugin
MaxRelativeElongation (float, default=None)
Set the maximal elongation that can support the beam. Note that this way of deleting bond is not really accurate, you may prefer use the APPLY-FRACTURE plugin
ComputeAverageRadiusOnSet (string, default=global)
Choose the DEM::DiscreteElement SetOf to compute the average radius.
Set (string, default=global)
The DEM:: SetOf ID to apply the treatment
Epsilon (float, default=1e-300)
In some cases the default value of epsilon is too aggressive. You can choose a lower value such as 1e-12 to avoid approximation errors.

Example

<!-- 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"/>

Simulation example

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.


[PlugIn] : CONVERT-ELEMENT-PAIR-TO-FLAT-BOND

  • id : CONVERT-ELEMENT-PAIR-TO-FLAT-BOND
  • source file : 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.

Info

  • Process on : Core::Pair<DEM::Element> set
  • Multithreaded : No
  • Recommended section: PreProcessing

Required param

YoungModulus (float)
Set the Young’s modulus of the material
PoissonRatio (float)
Set the Poisson’s ratio of the material

Optional param

MaxTensileStress (float, default=0., > 0.)
Set the normal tensile stress criterion of the bond
MaxCompressiveStress (float, default=0., >0.)
Set the normal compressive stress criterion of the bond
UseStressTensor (bool, default=false)
If set to true, the flat bond use the virial stress instead of least square strain

Example

<CONVERT-ELEMENT-PAIR-TO-FLAT-BOND YoungModulus="72e9" PoissonRatio="0.17" MaxTensileStress="50e6" MaxCompressiveStress="500e6"/>

Simulation example

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.


[PlugIn] : CONVERT-ELEMENT-PAIR-TO-HERTZSPRING

  • id : CONVERT-ELEMENT-PAIR-TO-HERTZSPRING
  • source file : 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.

Info

  • Process on : Core::Pair set
  • Multithreaded : No
  • Recommended section: PreProcessing

Required param

YoungModulus (float)
Set the Young’s modulus value of the Hertz contact
PoissonRatio (float)
Set the Poisson’s ratio value of the Hertz contact

Example

< CONVERT-ELEMENT-PAIR-TO-HERTZSPRING YoungModulus="50e9" PoissonRatio="0.2" />

Simulation example

No example (TODO)


[PlugIn] : CONVERT-ELEMENT-PAIR-TO-PLASTIC-BEAM

  • id : CONVERT-ELEMENT-PAIR-TO-PLASTIC-BEAM
  • source file : 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 !!!

Info

  • Process on : Core::Pair set
  • Multithreaded : No
  • Recommended section: PreProcessing

Required param

MaxElasticRelativeElongation (float, default=inf)
Set the value of the elongation threshold. This value is relative. For example, if you set 20%, it means that the beam could get 20% max of elastic elongation, so the beam is going to be plastic.

Example

<CONVERT-ELEMENT-PAIR-TO-PLASTIC-BEAM YoungModulus="1.2e11" RadiusRatio="0.28" MaxElasticRelativeElongation="20%"/>

Simulation example

No example (TODO)


[PlugIn] : CONVERT-ELEMENT-PAIR-TO-PLASTIC-BEAM-IT

  • id : CONVERT-ELEMENT-PAIR-TO-PLASTIC-BEAM-IT
  • source file : 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 !!!

Info

  • Process on : Core::Pair set
  • Multithreaded : No
  • Recommended section: PreProcessing

Required param

MaxElasticRelativeElongation (float, default=inf)
Set the value of the elongation threshold. This value is relative. For example, if you set 20%, it means that the beam could get 20% max of elastic elongation, so the beam is going to be plastic.

Example

<CONVERT-ELEMENT-PAIR-TO-PLASTIC-BEAM YoungModulus="1.2e11" RadiusRatio="0.28" MaxElasticRelativeElongation="20%"/>

Simulation example

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


[PlugIn] : CONVERT-ELEMENT-PAIR-TO-SPRING

  • id : CONVERT-ELEMENT-PAIR-TO-SPRING
  • source file : Lib/GranOO3/PlugIn/ConvertElementPairToSpring.cpp

Replaces all the element pair (Core::Pair<DEM::Element> class) by DEM::Spring.

Info

  • Process on : Core::Pair<DEM::Element> set
  • Multithreaded : No
  • Recommended section: PreProcessing

Required param

Stiffness (float)
Set the stiffness of the spring

Optional param

RestitutionCoeff (float, default=None)
Set the coefficient of restitution. Must be between in the range [0,1]. 1. corresponds to no damping factor otherwise 0. corresponds to a maximal value of damping. In fact a damping factor is computed from the RestitutionCoeff value thanks to the formula given in the Misc.hpp source file in libPhysic
DampingFactor (float, default=None)
Set the damping factor. Note that you can set both RestitutionCoeff and DampingFactor options.
AttractiveCoeff (float, default=None),
Set the attractive coefficient, this coefficient is applied to the resultant force to modify the attraction (> 1 = more attractive, < 1 = less attractive). This coefficient is only applied if the current elongation is positive.
RepulsiveCoeff (float, default=None),
Set the repulsive coefficient, this coefficient is applied to the resultant force to to modify the repulsion (> 1 = more repulsive, < 1 = less repulsive). This coefficient is only applied if the current elongation is negative.
MaxRelativeElongation (float, default=None),
Set the maximal elongation of the spring.
Set (string, default=global)
The Core::Pair<DEM::Element> SetOf ID to apply the treatment

Example

<CONVERT-ELEMENT-PAIR-TO-SPRING Stiffness="1.5e7" RestitutionCoeff="0.9"/>

Simulation example

No example (TODO)


[PlugIn] : CONVERT-ELEMENT-PAIR-TO-XBEAM

  • id : CONVERT-ELEMENT-PAIR-TO-XBEAM
  • source file : 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).

Info

Please refer to the CONVERT-ELEMENT-PAIR-TO-BEAM documention

Required param

Please refer to the CONVERT-ELEMENT-PAIR-TO-BEAM documention

Optional param

Please refer to the CONVERT-ELEMENT-PAIR-TO-BEAM documention

NLGeom (bool, default=False)
if set to true, the computation is faster but it works only for small transformation (displacement, rotation and strain). So, if you activate this option, you must ensure that your simulation matches with the small transformation hypothesis.

Example

<CONVERT-ELEMENT-PAIR-TO-XBEAM YoungModulus="1.2e11" RadiusRatio="0.28"/>

Simulation example

00020_{lattice}{fem}{mechanical}{elastic}{xbeam}_TENSILE-TEST and other examples that implement the xbeam bond model


[PlugIn] : DEFORM-PERIODIC-BOX

  • id : DEFORM-PERIODIC-BOX
  • source file : 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.

Info

  • Process on : DEM::Element with a DEM::Periodic property
  • Multithreaded : No
  • Recommended section: Processing

Optional param

InitSensor (bool, default=True)
If set to true the global strains and stresses will be recorded in sensors
Strain_?? (float, default=None)
Replace ?? by the right tensor component (XX, YY, ZZ, XY, XZ or YZ). You can give here the strain that you want to impose to the periodic box
Stress_?? (float, default=None)
Replace ?? by the right tensor component (XX, YY, ZZ, XY, XZ or YZ). You can give here the value of the Stress that you want to target to the periodic box. In the such case the periodic box will try to deform automatically to target the wanted value of the stress. Note that you can not impose a strain and target a stress for the same component.
PID_Stress_?? (a set of 6 floats, efault=None)
If you target a stress, you must tune here the value of the PID that allows to constol the deformation. You must provide 6 parameters which are : time step, max, min, Kp (proportional), Kd (derivate), Ki (integral)

Example

<!-- 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"/>

Simulation example

No example with periodic condition (TODO)


[PlugIn] : DELETE

  • id : DELETE
  • source file : Lib/GranOO3/PlugIn/Delete.cpp

This plugin delete the specified items.

Info

  • Process on : All
  • Multithreaded : No
  • Recommended section: PreProcessing, Processing

Required param

What (string)
The type of item to delete : Core::Base, DEM::Element, Physic::Body, Physic::Ground and so on…

Optional param

Set (string, default=“Global”)
The plugin removes only the particular items that belong to the specified set
ID (string, default="")
If ID is set, the plugin removes only item with the specified ID. It works only for classes that own ID such as Physic::Ground, DEM::Tool or DEM::SupportShape

Example

<DELETE What="Physic::Ground"/>
<DELETE What="DEM::SupportShape" ID="Boundary"/>

Simulation example

00031_{lattice}{dem}{mechanical}{elastic}{beam}_BOUNCING-BALL-v0


[PlugIn] : DELETE-INCONSISTENT-VORONOI-BOND

  • id : DELETE-INCONSISTENT-VORONOI-BOND
  • source file : 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.

Info

  • Process on : DEM::Bond
  • Multithreaded : No
  • Recommended section: PreProcessing

Optional param

Set (string, default=global)
The DEM::Bond SetOf ID to apply the treatment

Example

<DELETE-INCONSISTENT-VORONOI-BOND/>

Simulation example

No example (TODO)


[PlugIn] : DELETE-UNBONDED-ELEMENT

  • id : DELETE-UNBONDED-ELEMENT
  • source file : 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.

Info

  • Process on : DEM::Element and DEM::Bond set
  • Multithreaded : No
  • Recommended section: PreProcessing & Processing & PostProcessing

Optional param

Verbose (bool, default=False)
If set to true gives some information: number of deleted element, etc…
Set (string, default=global)
The DEM::Element SetOf ID to apply the treatment

Example

<DELETE-UNBONDED-ELEMENT Verbose="True"/>

Simulation example

No example (TODO)


[PlugIn] : DISPLAY-INFO

  • id : DISPLAY-INFO
  • source file : 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.

Info

  • Process on : Nothing
  • Multithreaded : No
  • Recommended section: All

Optional param

Message (string, default="")
The message to display

Example

<DISPLAY-INFO Message="Hello, GranOO User !!"/>

Simulation example

No example (TODO)


[PlugIn] : ENERGY-BALANCE

  • id : ENERGY-BALANCE
  • source file : 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.

Info

  • Process on : Nothing
  • Multithreaded : No
  • Recommended section: Processing

Example

  (...)
  <ENERGY-BALANCE>
  <WRITE-SENSOR-DATA/>   
</ (end of processing loop) >

Simulation example

00011_{lattice}{dem}{mechanical}{brittle}{beam}_TENSILE-TEST


[PlugIn] : EXPORT-TO-PVD

  • id : EXPORT-TO-PVD
  • source file : 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”.

Info

  • Process on : All objects
  • Multithreaded : No
  • Recommended section: All
  • Result : A .pvd file in the output directory

Required param

Field (string)
The attempted value must be “All” or “Nothing”

Optional param

ClassName_add (string)
Used to add to the export list a specific field belonging to the specified class
ClassName_rm (string)
Used to remove to the export list a specific field belonging to specified class
SaveDEShape (bool, default=False)
Used to export Discrete Elements as a material points or using their physical shape

Example

<!-- 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"/>

Simulation example

00010_{lattice}{dem}{mechanical}{elastic}{beam}_TENSILE-TEST and a lot of others


[PlugIn] : INIT-ELECTRICAL-PROPERTIES

  • id : INIT-ELECTRICAL-PROPERTIES
  • source file : Lib/GranOO3/PlugIn/InitElectricalProperties.cpp

Initializes the electrical properties of the specified DEM::Element set. You can specify the name of the set.

Info

  • Process on : DEM::Element set that own a DEM::Electrical property
  • Multithreaded : No
  • Recommended section: PreProcessing

Required param

Resistivity (float)
The material electrical resistivity rho
Conductivity (float)
The material electrical conductivity calculated as 1/rho

Note that you MUST specify the material electrical resistivity OR conductivity. These two parameters are mutually exclusive.

Optional param

Set (string, default=global)
The DEM::Element SetOf ID to apply the treatment

Example

<INIT-ELECTRICAL-PROPERTIES Resistivity="0.73e-6"/>

Simulation example

00042_{lattice}{electrical}{beam}_ELECTRICAL-CONDUCTION and other examples that implement electrical physics


[PlugIn] : INIT-PERIODIC-BOND

  • id : INIT-PERIODIC-BOND
  • source file : 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.

Info

  • Process on : DEM::Bond set
  • Multithreaded : No
  • Recommended section: PreProcessing

Example

<INIT-PERIODIC-BOND />

Simulation example

No example (TODO)


[PlugIn] : INIT-THERMAL-PROPERTIES

  • id : INIT-THERMAL-PROPERTIES
  • source file : Lib/GranOO3/PlugIn/InitThermalProperties.cpp

Initializes the thermal properties of the specified DEM::Element set. You can specify the name of the set.

Info

  • Process on : DEM::Element set that own a DEM::Thermal property
  • Multithreaded : No
  • Recommended section: PreProcessing

Required param

Temperature (float)
Set the element temperature
Cp (float)
Set the heat capacity
Conductivity (float)
Set the thermal conductivity

Optional param

Set (string, default=global)
The DEM::Element SetOf ID to apply the treatment

Example

<INIT-THERMAL-PROPERTIES Temperature="0" Cp="500" Conductivity="15" />

Simulation example

00043_{lattice}{thermo-electrical}{beam}_JOULE-HEATING and other examples that implement thermal physics


[PlugIn] : INTEGRATE-ACCELERATION

  • id : INTEGRATE-ACCELERATION
  • source file : Lib/GranOO3/PlugIn/IntegrateAcceleration.cpp

Computes the new positions and angular positions for all the Physic::Body and/or Physic::Particle. Performs a numerical integration of the linear (on Physic::Particle) and the angular acceleration (on Physic::Body) to compute the new position values.

The integration scheme is derived from Tchamwa–Wielgosz (TW) 1 scheme, with a damping coefficient. It produces some numerical damping when the time step is close to the critical value given by the plugin ComputeOptimalTimeStep. One can use beta = 1.3 to produce significant damping and beta = 0.5 produces no damping effect (default value).

Info

  • Process on : Physic::Particle and Physic::Body
  • Multithreaded : No
  • Recommended section: Processing

Required param

Linear (bool)
Set to true if you want to perform linear integration
Angular (bool)
Set to true if you want to perform angular integration

Optional param

BetaLinear (float, default=0.5)
The damping effect factor beta for linear integration. Default value corresponds to no damping effect
BetaAngular (float, default=0.5)
The damping effect factor beta for angular integration. Default value corresponds to no damping effect
Set (string, default=global)
The SetOf ID (both Physic::Body and Physic::Particle) to apply the treatment
TimeStep (string, default=)
Give an alternative Physic::Time ID to use. This alternatrive time step may be created with the NewTimeStep plugin. By default the main time step is chosen.
SaveKinematic (bool, default=False)
Save in Physic::Particle and Physic::Body the previous kinematic : linear and angular position, velocity and acceleration. This feature can be used for different things such as energy balance computations.

Example

<INTEGRATE-ACCELERATION Linear="Yes" Angular="No" BetaLinear="1.3"/>

Simulation example

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.


[PlugIn] : INTERACTION-HISTOGRAM

  • id : INTERACTION-HISTOGRAM
  • source file : 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.

Info

  • Process on : DEM::DiscreteElement
  • Multithreaded : No
  • Recommended section: Pre or PostProcessing

Optional param

ComputeOnSphere (bool, default=True)
If true, the interaction histogram will be computed on a spherical domain. This is required for correctly checking isotropy without geometrical effects.
SphereRatio (float, default=0.9)
With this param, the computed sphere is decreasing by this ratio. By default the radius is 90% of the maximal radius.

Example

<INTERACTION-HISTOGRAM/>

Simulation example

No example, for internal use only


[PlugIn] : MANAGE-COLLISION

  • id : MANAGE-COLLISION
  • source file : 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.

Info

  • Process on : All possible item that need collision
  • Multithreaded : No
  • Recommended section: Processing

Required param

Between (string)
Choose here the two kinds of item you want to manage. The allowed types are : body/body, body/ground, particle/ground, discreteElement/discreteElement, discreteElement/supportShape and discreteElement/tool.
BroadPhase (string)
The wanted 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.
CallBack (string)
The wanted 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.

Optional param

UpdateStrategy (string, default="")
The wanted 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.

NarrowPhase (string, default="")
The wanted 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.
ExcludeInteraction(bool, default=False)
If set to true the interacted bonded bodies are not taken into account

Example

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°"/>

Simulation example

00105_{dem}{mechanical}{granular}_MULTISHAPE-RAIN and a lot of others that implement conacts


[PlugIn] : MONITOR-EXPRESSION

  • id : MONITOR-EXPRESSION
  • source file : 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.

Info

  • Process on : Math::Expression
  • Multithreaded : No
  • Recommended section: PreProcessing

Required param

Expression (string)
Give a mathematical expression (inlined or outlined). For outlined expression they can be instantiated with the NEW-EXPRESSION PlugIn.
SensorLobal (string)
The label of the related column in the sensor file

Example

<MONITOR-EXPRESSION Expression="sin(t)"   SensorLabel="Sine"/>
<MONITOR-EXPRESSION Expression="SineRamp" SensorLabel="Sine"/>

Simulation example

No example (TODO)


[PlugIn] : MONITOR-ITEM-NUMBER

  • id : MONITOR-ITEM-NUMBER
  • source file : 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.

Info

  • Process on : All
  • Multithreaded : No
  • Recommended section: Processing

Required param

What (string)
The type of item to delete : Core::Base, DEM::Element, Physic::Body, Physic::Ground and so on…

Optional param

Set (string, default=“Global”)
The plugin removes only the particular items that belong to the specified set
StopAt (int, default=0)
If the number of deleted items is higher than this value, the computation is stopped
ID (string, default="")
If ID is set, the plugin removes only item with the specified ID. It works only for classes that own ID such as Physic::Ground, DEM::Tool or DEM::SupportShape
Symbol (string, default="")
If a symbol is set, two variables are automatically created. The first, named ‘n_symbol’, is related to the total number of removed items. The second, named ‘dn_symbol’ is related to the difference between two consecutive runs of this plugin of the ‘n_symbol’. It is useful for triggering automatically saving domains if broken bond are detected as follows ;

Example

<MONITOR-ITEM-NUMBER What="Physic::Ground"/>
<MONITOR-ITEM-NUMBER What="DEM::SupportShape" ID="Boundary"/>
<MONITOR-ITEM-NUMBER What="DEM::Beam" StopAt="1000"/>

Simulation example

00034_{lattice}{dem}{mechanical}{elastic}{beam}_BRAZILIAN-TEST


[PlugIn] : MONITOR-STRAIN

  • id : MONITOR-STRAIN
  • source file : 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.

Info

  • Process on : Physic::Node set
  • Multithreaded : No
  • Recommended section: Processing

Optional param

Set (string, default=global)
The Physic::Node SetOf ID to measure the strain

Example

<MONITOR-STRAIN/>

Simulation example

No example (TODO)


[PlugIn] : NEW-EXPRESSION

  • id : NEW-EXPRESSION
  • source file : Lib/GranOO3/PlugIn/NewExpression.cpp

Creates a new Math::Expression with a given ID

Info

  • Recommended section: PreProcessing

Required param

F (string)
Put here the mathematical formula related to your expression
ID (string)
The ID of the new Math::Expression. Note that related new Math::Expression can be retrieved in C++ code with Math::Expression::glob("ID")

Example

<NEW-EXPRESSION F="Sin(3*t)+4" ID="Sinus" />

Simulation example

00014_{lattice}{dem}{mechanical}{brittle}{beam}_BENDING-TEST and some others


[PlugIn] : NEW-FRAME

  • id : NEW-FRAME
  • source file : 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.

Info

  • Recommended section: PreProcessing

Required param

Center (triplet of float or string)
Put here the coordinates of the frame center, for example (0., 0. ,1.5) Or, you can set a Center ID of a point already built with the NewPoint PlugIn.
ID (string)
The ID of the new Geom::Frame. The new Geom::Frame can be retrieved in C++ code with Geom::Frame::glob("ID")

Optional param

Quat (quadruplet of float or string, default=(0,0,0,1))
Put here the coordinates of the frame quaternion, for example (0., 0. ,0. ,1.) Or, you can set a Quaternion ID of a quaternion already built with the NewQuaternion PlugIn. Note that this param is optional, if you set the nothing a default unit quaternion (0., 0., 0., 1.) is chosen.

Example

<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" />

Simulation example

00032_{lattice}{dem}{mechanical}{elastic}{beam}_BOUNCING-BALL-v1/ and many other examples


[PlugIn] : NEW-GROUND

  • id : NEW-GROUND
  • source file : 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.

Info

  • Recommended section: PreProcessing

Required param

Type (string)
Set the type of the Ground. It must be Cylinder, Cone, etc…

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

Optional param

ID (string)
The ID of the new Ground. The new Ground can be retrieved in C++ code with Physic::Ground::glob("ID") or by its child class such as Physic::GroundT<Shape::Sphere>::glob("ID").
Set (string, default="")
put the created tool in the specified set. If the set does not exist, a new one is created.

Example

<NEW-GROUND Type="Sphere" Radius="1.0" ID="Sphere"/>

Simulation example

00032_{lattice}{dem}{mechanical}{elastic}{beam}_BOUNCING-BALL-v1 and many other examples


[PlugIn] : NEW-MATERIAL

  • id : NEW-MATERIAL
  • source file : Lib/GranOO3/PlugIn/NewMaterial.cpp

Creates a new Physic::Material with a given ID

Info

  • Recommended section: PreProcessing

Required param

ID (string)
Set the name of the material (must be unique)
Set (string)
Specify a set of DEM::Element related to the given material

Optional param

YoungModulus (float, default = 0)
Specify the Young’s modulus of the material
PoissonRatio (float, default = 0)
Specify the Poisson’s ratio of the material

Example

<NEW-MATERIAL ID="Steel" YoungModulus="210e9" PoissonRatio="0.2" Set="Drum"/>

Simulation example

00102_{dem}{mechanical}{granular}_MIXER and some other examples


[PlugIn] : NEW-MATERIAL-COUPLE

  • id : NEW-MATERIAL-COUPLE
  • source file : 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.

Info

  • Recommended section: PreProcessing

Required param

ID (string)
Set a unique ID of this material couple, it should be
like “Material1 / Material2”

Optional param

NormalStiffness (float, default=0)
The normal stiffness of the contact
AdhesionForce (float, default=0)
The adhesion force of the contact
RestitutionCoeff (float, default=0)
The restitution coefficient of the contact. Must be in the [0, 1] range.
TangentialStiffness (float, default=0)
The tangential stiffness of the contact
StaticFriction (float, default=0)
The static friction coefficient of the contact. Must be in the [0, 0.5] range
DynamicFriction (float, default=0)
The dynamic friction coefficient of the contact. Must be in the [0, 0.5] range
FrictionSlope (float, default=1e5)
The Friction slope of the contact (used for regularization of friction)
RollingStiffness (float, default=0)
The rolling stiffness of the contact
RollingLimit (float, default=0)
The rolling limit of the contact

Example

<NEW-MATERIAL-COUPLE ID="Aluminium / Steel" RestitutionCoeff="0.4" StaticFriction="0.2" />

Simulation example

00102_{dem}{mechanical}{granular}_MIXER


[PlugIn] : NEW-POINT

  • id : NEW-POINT
  • source file : Lib/GranOO3/PlugIn/NewPoint.cpp

Creates a new Geom::Point with a given ID

Info

  • Recommended section: PreProcessing

Required param

Val (triplet of float)
Put here the point value with the format (xxx, yyy, zzz)
ID (string)
The ID of the new Geom::Point. The new Geom::Point can be retrieved in C++ code with Geom::Point::glob("ID")

Example

<NEW-POINT Val="(1.0, 0.3, 0.)" ID="P1o"/>

Simulation example

No example (TODO)


[PlugIn] : NEW-QUATERNION

  • id : NEW-QUATERNION
  • source file : Lib/GranOO3/PlugIn/NewQuaternion.cpp

Creates a new Geom::Quaternion with a given ID

Info

  • Recommended section: PreProcessing

Required param

Val (quadruplet of float)
Put here the quaternion value with the format (xxx, yyy, zzz, rrrr). Instead of the standard quadruplet quaternion, you can specify an axis-angle definition (more intuitive) as : (x,y,z)(a) where (x,y,z) is the axis and a is the angle in degree.
ID (string)
The ID of the new Geom::Quaternion. The new Geom::Quaternion can be retrieved in C++ code with `Geom::Quaternion::glob(“ID”)``

Example

<NEW-QUATERNION Val=(1.0, 0.3, 0.) ID="Q1"/>

Simulation example

No example (TODO)


[PlugIn] : NEW-SUPPORT-SHAPE

  • id : NEW-SUPPORT-SHAPE
  • source file : 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.

Info

  • Recommended section: PreProcessing

Required param

Type (string)
Set the type of the DEM::SupportShape. It must be a Cylinder, a Cone, etc…

Optional param

ID (string)
The ID of the new Ground. The new Ground can be retrieved in C++ code with Physic::Ground::glob("ID") or by its child class such as Physic::GroundT<Shape::Sphere>::glob("ID").
Set (string, default="")
put the created tool in the specified set. If the set does not exist, a new one is created.

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

Example

<NEW-SUPPORT-SHAPE Type="Sphere" Radius="1.0" ID="SHShape"/>

Simulation example

No example, but it could be replaced by NEW-GROUND plugin in most of case


[PlugIn] : NEW-TIME-STEP

  • id : NEW-TIME-STEP
  • source file : 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.

Info

  • Recommended section: PreProcessing

Required param

Val (float)
The value of the time step
ID (string)
The ID of the new 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.

Example

<NEW-TIME-STEP Val="1e-3" ID="Thermal"/>

Simulation example

00040_{lattice}{thermo-mechanical}{elastic}{beam}_THERMAL-CONDUCTION


[PlugIn] : NEW-TOOL

  • id : NEW-TOOL
  • source file : 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.

Info

  • Recommended section: PreProcessing

Required param

Type (string)
Set the type of the tool. It must be a Cylinder, a Cone, etc…

Optional param

ID (string)
The ID of the new tool. The new tool can be retrieved in C++ code with DEM::Tool::glob("ID") or by its child class such as DEM::ToolT<Shape::Shere>::glob("ID").
Density (float, default=1000)
set the density value used to compute mass and inertia tensor of the tool
Set (string, default="")
put the created tool in the specified set. If the set does not exist, a new one is created.

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

Example

<NEW-TOOL Type="Sphere" Radius="1.0" ID="Impacter"/>

Simulation example

00034_{lattice}{dem}{mechanical}{elastic}{beam}_BRAZILIAN-TEST and some other examples


[PlugIn] : NEW-VARIABLE

  • id : NEW-VARIABLE
  • source file : Lib/GranOO3/PlugIn/NewVariable.cpp

Creates a new Math::Variable with a given ID

Info

  • Recommended section: PreProcessing

Required param

Val (float)
Set the initial value of the variable
ID (string)
The ID of the new Math::Variable. The new Math::Variable can be retrieved in C++ code with Math::Variable::glob("expression_id")

Required param

Description (string, default="")
Set a description of the variable.

Example

<NEW-VARIABLE Val="6.283185307179586" desc="this is 2 x pi" ID="2_PI"/>

Simulation example

No example (TODO)


[PlugIn] : NEW-VECTOR

  • id : NEW-VECTOR
  • source file : Lib/GranOO3/PlugIn/NewVector.cpp

Creates a new Geom::Vector with a given ID

Info

  • Recommended section: PreProcessing

Required param

Val (triplet of float)
Put here the vector value with the format (xxx, yyy, zzz)
ID (string)
The ID of the new Geom::Vector. The new Geom::Vector can be retrieved in C++ code with Geom::Vector;;glob("ID")

Example

<NEW-VECTOR Val=(1.0, 0.3, 0.) ID="V1"/>

Simulation example

No example (but it is useless plugin)


[PlugIn] : PUT-IN-CONTACT

  • id : PUT-IN-CONTACT
  • source file : 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.

Info

  • Process on : Physic::Body
  • Multithreaded : No
  • Recommended section: PreProcessing

Required param

ID (string)
The ID of the body to put in contact
Direction (triplet of float)
The direction to move the body
InitialStep (float)
Value of the initial step for moving the body
Precision (float)
When the penetration is less than this value the calculation is stopped

Optional param

Set (string, default=global)
The Physic::Body set used to compute contact

Example

<PUT-IN-CONTACT ID="indentor" Direction="(0,-1,0)" InitialStep="0.000001" Precision="1e-10"/>

Simulation example

00034_{lattice}{dem}{mechanical}{elastic}{beam}_BRAZILIAN-TEST


[PlugIn] : READ-DOMAIN

  • id : READ-DOMAIN
  • source file : 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.

Info

  • Multithreaded : No
  • Recommended section: PreProcessing

Required param

FileName (string)
the domain file name to load in the simulation

Optional param

Suffix (string, default="")
Gives a suffix to all SetOf contained in the loaded domain
Prefix (string, default="")
Gives a prefix to all SetOf contained in the loaded domain
Set (string, default="")
Constructs a new SetOf and registers all the domain items inside this new set.
Freeze (bool, default=True)
If set to True, the loaded domain is frozen. It means that its velocity and acceleration (linear and angular) are set to null values and its initial parameters are updated to the current parameter.
DeleteSupportShape (bool, default=False)
If set to True, the SupportShapes related to the loaded domain are deleted.
FastMode (bool, default=False)
If set to True, the file is loading in fast mode which can siginificantly speedup the time needs to load a huge domain. Be aware FastMode is not compatible with some option such as Suffix, Prefix and Set.

Example

<READ-DOMAIN FileName="Hello.agdd" FastMode="True"/>

Simulation example

00003_{tutorial}_SIMPLE-TENSILE-TEST and a lot of examples


[PlugIn] : RELEASE-EL-POWER-AS-HEAT

  • id : RELEASE-EL-POWER-AS-HEAT
  • source file : 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.

Info

  • Process on : DEM::Element set that own a DEM::Electrical and DEM::Thermal properties
  • Multithreaded : No
  • Recommended section: Processing

Required parameters

Factor (float)
The eta factor, must be in the range [0, 1]

Optional param

Set (string, default=global)
The DEM::Element SetOf ID to apply the treatment

Example

<RELEASE-EL-POWER-AS-HEAT Factor="0.9" />

Simulation example

/00043_{lattice}{thermo-electrical}{beam}_JOULE-HEATING


[PlugIn] : SAVE-DOMAIN

  • id : SAVE-DOMAIN
  • source file : 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.

Info

  • Process on : All items
  • Multithreaded : No
  • Recommended section: All

Optional param

FileName (string, default="")
Set the name of the file to store. If you do not set this field the name of the file will take automatically the current iteration number.
Precision (integer, default=10)
The number of digits that take the automatic name (see above)
Type (string, default=“gdd”)
The type of the stored file, must be “gdd”, “agdd”, “lgdd”, “off”, “xyz”, “xyzr”

Example

<SAVE-DOMAIN EveryIter="50"/>
<SAVE-DOMAIN TriggerIf="(t>=20 and t<=30)" Type="lgdd"/>
<SAVE-DOMAIN FileName="DiscreteDomain1.gdd"/>

Simulation example

00011_{lattice}{dem}{mechanical}{brittle}{beam}_TENSILE-TEST and a lot of examples


[PlugIn] : SETOF-OPERATOR

  • id : SETOF-OPERATOR
  • source file : Lib/GranOO3/PlugIn/SetOfOperator.cpp

This plugin makes operations between two SetOf :union, make_intersection or make_difference

Info

  • Multithreaded : No
  • Recommended section: PreProcessing

Required param

Set (string)
Gives the SetOf ID that stores the result of the operation. If the the SetOf ID does not exist a new SetOf is created.
Set1 (string)
Gives the first SetOf ID to perform the operation.
Set2 (string)
Gives the second SetOf ID to perform the operation.
Op (string)
Gives the wanted operator. Allowed values are “union”, “make_intersection” and “make_difference”.

Example

<SETOF-OPERATOR Set1="Global" Set2="xMin" Op="make_difference" Set="Result" />

Simulation example

No example (TODO)


[PlugIn] : SOLVER-CD

  • id : SOLVER-CD
  • source file : Lib/GranOO3/PlugIn/SolverCD.cpp

The solver CD is an Explicit solver for finite element simulation

Info

  • Process on : Physic::Node
  • Multithreaded : No
  • Recommended section: Processing

Example

<SOLVER-CD />

Simulation example

00050_{fem}{mechanical}{elastic}_TENSILE-TEST and some other FEM examples


[PlugIn] : SPH-APPLY-PRESSURE-FORCE

  • id : SPH-APPLY-PRESSURE-FORCE
  • source file : Lib/GranOO3/PlugIn/SphApplyPressureForce.cpp

Compute and apply the pressure force on SPH::Particle

Info

  • Process on : SPH::Particle set
  • Multithreaded : No
  • Recommended section: Processing

Optional param

Set (string, default=global)
The SPH::Particle SetOf ID to apply the treatment

Example

<SPH-APPLY-PRESSURE-FORCE />

Simulation example

00060_{sph}{mechanical}{fluid}_LIQUID-RAIN


[PlugIn] : SPH-APPLY-VISCOUS-FORCE

  • id : SPH-APPLY-VISCOUS-FORCE
  • source file : Lib/GranOO3/PlugIn/SphApplyViscousForce.cpp

Compute and apply the viscous force on SPH::Particle

Info

  • Process on : SPH::Particle set
  • Multithreaded : No
  • Recommended section: Processing

Optional param

Set (string, default=global)
The SPH::Particle SetOf ID to apply the treatment

Example

<SPH-APPLY-VISCOUS-FORCE/>

Simulation example

00060_{sph}{mechanical}{fluid}_LIQUID-RAIN


[PlugIn] : SPH-CLEAR-INTERACTION

  • id : SPH-CLEAR-INTERACTION
  • source file : Lib/GranOO3/PlugIn/SphClearInteraction.cpp

Clear the interactions on a SPH::Particle set

Info

  • Process on : SPH::Particle set
  • Multithreaded : No
  • Recommended section: Processing

Optional param

Set (string, default=global)
The SPH::Particle SetOf ID to apply the treatment

Example

<SPH-CLEAR-INTERACTION />

Simulation example

00060_{sph}{mechanical}{fluid}_LIQUID-RAIN


[PlugIn] : SPH-UPDATE-INTERACTION

  • id : SPH-UPDATE-INTERACTION
  • source file : Lib/GranOO3/PlugIn/SphUpdateInteraction.cpp

Update the interaction between SPH::Particle

Info

  • Process on : SPH::Particle set
  • Multithreaded : No
  • Recommended section: Processing

Required param

Method (string)
Choose a detection method. To get the list of available method, type granoo -d -f BroadPhase_SPH. Please refer to the documentation of the chosen detection method to get the list of available option.

Example

<SPH-UPDATE-INTERACTION Method="Lcm"/>

Simulation example

00060_{sph}{mechanical}{fluid}_LIQUID-RAIN


[PlugIn] : SPH-UPDATE-LOCAL-DENSITY

  • id : SPH-UPDATE-LOCAL-DENSITY
  • source file : Lib/GranOO3/PlugIn/SphUpdateLocalDensity.cpp

Update the local density of a SPH::Particle set

Info

  • Process on : SPH::Particle set
  • Multithreaded : No
  • Recommended section: Processing

Optional param

Set (string, default=global)
The SPH::Particle SetOf ID to apply the treatment

Example

<SPH-UPDATE-LOCAL-DENSITY />

Simulation example

00060_{sph}{mechanical}{fluid}_LIQUID-RAIN


[PlugIn] : SPH-UPDATE-PRESSURE

  • id : SPH-UPDATE-PRESSURE
  • source file : Lib/GranOO3/PlugIn/SphUpdatePressure.cpp

Update the local pressure of a SPH::Particle set

Info

  • Process on : SPH::Particle set
  • Multithreaded : No
  • Recommended section: Processing

Optional param

GazStiffness (float)
global gaz stiffness
GazDensity (float)
global gaz density

Optional param

Set (string, default=global)
The SPH::Particle SetOf ID to apply the treatment

Example

<SPH-UPDATE-PRESSURE GazStiffness="3" GazDensity="1000"/>

Simulation example

00060_{sph}{mechanical}{fluid}_LIQUID-RAIN


[PlugIn] : STATIC-SOLVE

  • id : STATIC-SOLVE
  • source file : 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.

Info

  • Process on : DEM::Bond set
  • Multithreaded : No
  • Recommended section: Processing

Optional param

Set (string, default=global)
The DEM::Bond SetOf ID to apply the treatment

Example

<STATIC-SOLVE/>

Simulation example

00020_{lattice}{fem}{mechanical}{elastic}{xbeam}_TENSILE-TEST and other xbeam examples


[PlugIn] : STEP

  • id : STEP
  • source file : 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.

Info

  • Process on : Nothing
  • Multithreaded : No

Required param

Label (string)
The name of your step

Optional param

TimeStep (float, default=none)
You can choose a kind of local time step for your step
DisplayProgression (bool, default=True)
Display the current progression of your step (or not)
IterNumber (int, default=1)
Choose a number of iteration loop

Example

 <STEP Label="init-processing" IterNumber="10000" >
   ...
   ... some plugin here ...
   ...
 </STEP>

Simulation example

00001_{tutorial}_HELLO-WORLD and all the examples !


[PlugIn] : UPDATE-BOND-STRAIN

  • id : UPDATE-BOND-STRAIN
  • source file : 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.

Info

  • Process on : DEM::Bond that bond DEM::Element which own DEM::Strain property
  • Multithreaded : No
  • Recommended section: Processing

Example

 <UPDATE-STRAIN Method="LSQ" /> 
 <UPDATE-BOND-STRAIN />

Simulation example

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.


[PlugIn] : UPDATE-BOND-STRESS

  • id : UPDATE-BOND-STRESS
  • source file : 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.

Info

  • Process on : DEM::Bond which own DEM::BondStrain property
  • Multithreaded : No
  • Recommended section: Processing

Required param

YoungModulus (float)
Set the Young’s modulus for the Hook’s law application
PoissonRatio (float)
Set the Poisson’s ratio for the Hook’s law application

Optional param

MaxPrincipalStress (float, default=None)
Set a failure limit in terms of maximal principal stresse values (Rankine criterion)
MaxNormalStress (float, default=None)
Set a failure limit in terms of maximal normal stresses (normal to the bond facet)

Example

 <UPDATE-STRAIN Method="LSQ" /> 
 <UPDATE-BOND-STRAIN />
 <UPDATE-BOND-STRESS YoungModulus="50e9" PoissonRatio="0.2"/>

Simulation example

TODO


[PlugIn] : UPDATE-BOND-VECTOR-STRESS

  • id : UPDATE-BOND-VECTOR-STRESS
  • source file : 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.


[PlugIn] : UPDATE-STRAIN

  • id : UPDATE-STRAIN
  • source file : 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.

Info

  • Process on : DEM::Element with DEM::Strain property
  • Multithreaded : No
  • Recommended section: Processing

Required param

Method (string)
The name of the method for computng the strain. Actually, only the ‘LSQ’ method (least square)
is available

Example

 <UPDATE-STRAIN Method="LSQ" />

Simulation example

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.


[PlugIn] : UPDATE-STRESS

  • id : UPDATE-STRESS
  • source file : 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)

Info

  • Process on : DEM::Element set with DEM::Stress property
  • Multithreaded : No
  • Recommended section: Processing

Required param

Method (string, must be “VIRIAL” or “LSQ”)
Choose here the method that will be used to compute the stress

Optional param

NeighbourLevel(int, default=1)
Choose the level number of neighbour to compute the virial stress. The default value (one) is a good compromise between accuracy and speed of computation. You can choose the zero value to speed up the comutation. Therefore results are less accurate.
Periodic(bool, default=False)
Manage periodic boundaries or not. If this the case, the stress is computed over the periodic boundaries.
UpdatePrincipalStress (bool, default=True)
Tell here if you want to update the principal virial stress. It requires to compute the eigen values of the tensile stress tensor matrix. This step is very time consuming but it is necessary for failure computation.
IncludeVelocity (bool, default=True)
Include the velocity in the computatio of the equivalent virial stress tensor This option is only available for the “VIRIAL” method
VolumeFraction (float, default=auto)
By default, the volumic fraction is automatically computed. You can force it by setting a value here. Note that the volumic fraction is very important for the accuracy of the virial stress computation. This option is only available for the “VIRIAL” method
Periodic (bool, default=false)
manage periodic boundaries or not… default is false, it means that you don’t need to manage periodic boundaries (free boundaries)

Example

<UPDATE-STRESS Method="Virial" VolumeFraction"0.68" NeighbourLevel="1" />

Simulation example

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.


[PlugIn] : UPDATE-SUPPORT-SHAPE

  • id : UPDATE-SUPPORT-SHAPE
  • source file : 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.

Info

  • Process on : DEM::SupportShape set
  • Multithreaded : No
  • Recommended section: Processing

Optional param

Set (string, default=global)
The DEM::SupportShape ID to apply the treatment

Example

<UPDATE-SUPPORT-SHAPE />

Simulation example

00010_{lattice}{dem}{mechanical}{elastic}{beam}_TENSILE-TEST and some other examples


[PlugIn] : UPDATE-VORONOI-DOMAIN

  • id : UPDATE-VORONOI-DOMAIN
  • source file : 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)

Info

  • Process on : DEM::VoronoiBond and DEM::VoronoiElement set
  • Multithreaded : No
  • Recommended section: Processing

Optional param

UpdateElement (bool, default=True)
Tell if you want to update or not the shape of DEM::Element
MonitorFractureSurface (bool, default=False)
Tell if you want to compute the total fracture surface value and display it in the terminal

Example

<UPDATE-VORONOI-DOMAIN EveryIter="5" MonitorFractureSurface="True"/>

Simulation example

00012_{lattice}{dem}{mechanical}{elastic}{flatbond}_TENSILE-TEST and some other examples that implement voronoi domains


[PlugIn] : VELOCITY-VERLET-STEP1

  • id : VELOCITY-VERLET-STEP1
  • source file : 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

Info

  • Process on : Physic::Node and Physic::Body
  • Multithreaded : No
  • Recommended section: Processing

Required param

Linear (bool)
Set to true if you want to perform linear integration
Angular (bool)
Set to true if you want to perform angular integration

Optional param

Set (string, default=global)
The SetOf ID (both Physic::Body and Physic::Particle) to apply the treatment
TimeStep (string, default=)
Give an alternative Physic::Time ID to use. This alternatrive time step may be created with the NewTimeStep plugin. By default the main time step is chosen.

Example

<VELOCITY-VERLET-STEP1 Linear="Yes" Angular="No"/>

... some plugins and treatments (bond loads, contact managements, etc.) ...

<VELOCITY-VERLET-STEP2 Linear="Yes" Angular="No"/>

Simulation example

No example, useful for internal benchmark

1 https://en.wikipedia.org/wiki/Verlet_integration#Velocity_Verlet


[PlugIn] : VELOCITY-VERLET-STEP2

  • id : VELOCITY-VERLET-STEP2
  • source file : 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

Info

  • Process on : Physic::Node and Physic::Body
  • Multithreaded : No
  • Recommended section: Processing

Required param

Linear (bool)
Set to true if you want to perform linear integration
Angular (bool)
Set to true if you want to perform angular integration

Optional param

Set (string, default=global)
The SetOf ID (both Physic::Body and Physic::Particle) to apply the treatment
TimeStep (string, default=)
Give an alternative Physic::Time ID to use. This alternatrive time step may be created with the NewTimeStep plugin. By default the main time step is chosen.

Example

<VELOCITY-VERLET-STEP1 Linear="Yes" Angular="No"/>

... some plugins and treatments (bond loads, contact managements, etc.) ...

<VELOCITY-VERLET-STEP2 Linear="Yes" Angular="No"/>

Simulation example

No example, useful for internal benchmark

1 https://en.wikipedia.org/wiki/Verlet_integration#Velocity_Verlet


[PlugIn] : WRITE-SENSOR-DATA

  • id : WRITE-SENSOR-DATA
  • source file : 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.

Info

  • Process on : libCore::Sensor objects
  • Multithreaded : No
  • Recommended section: Processing

Optional param

HeaderShape (string, default=“Column”)
Choose the header shape, allowed values are “Column” or “Row”
FileName (string, default=“Sensors.txt”)
Choose a file name

Example

<WRITE-SENSOR-DATA HeaderShape="Column"/>

Simulation example

00010_{lattice}{dem}{mechanical}{elastic}{beam}_TENSILE-TEST and a lot of examples that implement numerical sensors


[ShapeBase] : Box

  • id : Box
  • source file : Lib/GranOO3/Shape/Box.cpp

Use it to build something with a Shape::Box shape

Sketch

     Class Box is a Volume with rectangular sections:
    
                                  ^ Y
                                  |
                                  |
                         ---------|-----------
                        /         |          /|
                  dimZ /          |         / |
                      /           .        /  |
                     /            .       /   |
                    /--------------------/    |
                    |             .      |    |
                    |             .......|...---------> X
                    |            .       |    |
               dimY |           .        |    /
                    |          /         |   /
                    |         /          |  /
                    |        /           | / 
                    |-------/------------|/
                           /   dimX
                          Z
    

Required param

Lx (float)
The length of the box along its local X axis
Ly (float)
The length of the box along its local Y axis
Lz (float)
The length of the box along its local Z axis

Example

<..something... Lx="1." Ly="1." Lz="1." />

[ShapeBase] : Cone

  • id : Cone
  • source file : Lib/GranOO3/Shape/Cone.cpp

Use it to build something with a Shape::Cone shape.

Sketch

                             ^ 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

Required param

Radius (float)
The radius of the cone
Length (float)
The length of the cone along its local X axis

Example

<..something... Radius=".1" Length="1." />

[ShapeBase] : ConeTruncated

  • id : ConeTruncated
  • source file : Lib/GranOO3/Shape/ConeTruncated.cpp

Use it to build something with a Shape::ConeTruncated shape.

Sketch

                             ^ 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

Required param

Radius (float)
The radius of the ConeTruncated
Length (float)
The length of the ConeTruncated along its local X axis

Example

<..something... Radius=".1" Length="1." />

[ShapeBase] : Cylinder

  • id : Cylinder
  • source file : Lib/GranOO3/Shape/Cylinder.cpp

Use it to build something with a Shape::Cylinder shape

Sketch

                                  ^ Y
                                  |
                                  |
                                  |
                                  |
                                length
               -------------------------------------
              / R \               .               /   \
             /  a  \              -              /     \
             |  d  |              .              |     |
             |  i  |              ..................+--------> X
             |  u  |             .               |     |
             \  s  /            .                \     /
              \   /            .                  \   /
               -------------------------------------
                             /
                            /
                           /
                          Z

Note that the symmetry axis is along its local X axis

Required param

Radius (float)
The radius of the cylinder
Length (float)
The length of the cylinder along its local X axis

Example

<..something... Radius=".1" Length="1." />

[ShapeBase] : Disk

  • id : Disk
  • source file : Lib/GranOO3/Shape/Disk.cpp

Use it to build something with a Shape::Disk shape. A disk shape is a Surface shape.

Sketch

                    -
                 /  ^  \
                /   R   \
               /    a    \
              /     d     \
              |     i     |
              |     u - --------> X
              |     s     |
              \           /
               \         /
                \       /
                 \     -
                  ----

Note that the normal is oriented along its local X axis

Required param

Radius (float)
The radius of the disk

Example

<..something... Radius=".1" />

[ShapeBase] : Plane

  • id : Plane
  • source file : Lib/GranOO3/Shape/Plane.cpp

Use it to build something with a Shape::Plane shape. A plane shape is an infinite Surface shape.

Sketch

                 /+
               /- |
            /--   |
         /--      |
       /-         |
     --|          |
       |          |
       |          |
       |     ---------------> X
       |          |
       |          |
       |         -+
       |      --/
       |    -/
       | --/
       +/

Note that the normal is oriented along its local X axis

Example

<..something...  />

[ShapeBase] : Polyhedron

  • id : Polyhedron
  • source file : Lib/GranOO3/Shape/Polyhedron.cpp

Use it to build something with a Shape::Polyhedron shape. A polyhedron model any kind of shape

Required param

File (string)
Gives .off file that describes the polyhedron to load

Optional param

Offset_File (string)
Gives an offset file that describes the boundaries of the off file. It may be useful to mark some Surfaces of the polyhedron. You can get an example in the Tool/Script directory.
Scale (float, default=1)
Set a scale factor to enlarge or scale down the polyhedron

Example

<..something...  File="Bunny.off"/>

[ShapeBase] : Rectangle

  • id : Rectangle
  • source file : Lib/GranOO3/Shape/Rectangle.cpp

Use it to build something with a Shape::Rectangle shape. Note that the Shape::Rectangle is a Surface shape.

Sketch

             |Y  /+
             | /- |
            /+-   |
         /-- |    |
       /-    |    |
     --|     |    |
       |     |    |
       |     |    |
       |    -+--------------> X
       |  -/      |
       +-/        |
     -/|         -+
  Z-/  |      --/
       |    -/
       | --/
       +/

Note that the normal is oriented along its local X axis

Required param

DimY (float)
The length of the box along its local Y axis
DimZ (float)
The length of the box along its local Z axis

Example

<..something... DimY="1." DimZ="1." />

[ShapeBase] : Sphere

  • id : Sphere
  • source file : Lib/GranOO3/Shape/Sphere.cpp

Use it to build something with a Shape::Sphere shape.

Sketch

                                  ^ Y
                                  |
                                  |
                                  |
                             -----+-----
                         ---/     .     \---
                       -/         .         \-
                      /           .           \
                     /            -            \
                    /             . R a d i u s \
                    |             . ............|-----> X
                    \            .              /
                     \          .              /
                      \        .              /
                       -\     .             /-
                         ---\.          /---
                            /-----------
                           /
                          Z

Required param

Radius (float)
The radius of the sphere

Example

<..something... Radius=".1" />

[ShapeBase] : Triangle

  • id : Triangle
  • source file : Lib/GranOO3/Shape/Triangle.cpp

Use it to build something with a Shape::Triangle shape. Note that the Shape::Triangle is a Surface shape.

Sketch

   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.

Required param

La (float)
The first length of the triangle
Lb (float)
The second length of the triangle
Angle (float)
The first angle in degree

Example

<..something... La="1." Lb="1." Angle="1." />

[UpdateStrategy<DEM::DiscreteElement, DEM::DiscreteElement>] : IterLoop

  • id : IterLoop
  • source file : 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.

Info

  • Process on : ALL colliding type Physic::Body, Physic::Particle, Physic::Ground, DEM::DiscreteElement
  • Multithreaded : No
  • Recommended section: Processing
  • Perf Critical : YES

Required param

IterLoopVal
The iteration value to trigger the updating of collision detection pairs.

Example

<...  UpdateStrategy="IterLoop" IterLoopVal="10"... />

[UpdateStrategy<DEM::DiscreteElement, DEM::SupportShape>] : IterLoop

  • id : IterLoop
  • source file : 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.

Info

  • Process on : ALL colliding type Physic::Body, Physic::Particle, Physic::Ground, DEM::DiscreteElement
  • Multithreaded : No
  • Recommended section: Processing
  • Perf Critical : YES

Required param

IterLoopVal
The iteration value to trigger the updating of collision detection pairs.

Example

<...  UpdateStrategy="IterLoop" IterLoopVal="10"... />

[UpdateStrategy<DEM::DiscreteElement, DEM::Tool>] : IterLoop

  • id : IterLoop
  • source file : 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.

Info

  • Process on : ALL colliding type Physic::Body, Physic::Particle, Physic::Ground, DEM::DiscreteElement
  • Multithreaded : No
  • Recommended section: Processing
  • Perf Critical : YES

Required param

IterLoopVal
The iteration value to trigger the updating of collision detection pairs.

Example

<...  UpdateStrategy="IterLoop" IterLoopVal="10"... />

[UpdateStrategy<Physic::Body, Physic::Body>] : IterLoop

  • id : IterLoop
  • source file : 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.

Info

  • Process on : ALL colliding type Physic::Body, Physic::Particle, Physic::Ground, DEM::DiscreteElement
  • Multithreaded : No
  • Recommended section: Processing
  • Perf Critical : YES

Required param

IterLoopVal
The iteration value to trigger the updating of collision detection pairs.

Example

<...  UpdateStrategy="IterLoop" IterLoopVal="10"... />

[UpdateStrategy<Physic::Body, Physic::Ground>] : IterLoop

  • id : IterLoop
  • source file : 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.

Info

  • Process on : ALL colliding type Physic::Body, Physic::Particle, Physic::Ground, DEM::DiscreteElement
  • Multithreaded : No
  • Recommended section: Processing
  • Perf Critical : YES

Required param

IterLoopVal
The iteration value to trigger the updating of collision detection pairs.

Example

<...  UpdateStrategy="IterLoop" IterLoopVal="10"... />

[UpdateStrategy<Physic::Node, Physic::Ground>] : IterLoop

  • id : IterLoop
  • source file : 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.

Info

  • Process on : ALL colliding type Physic::Body, Physic::Particle, Physic::Ground, DEM::DiscreteElement
  • Multithreaded : No
  • Recommended section: Processing
  • Perf Critical : YES

Required param

IterLoopVal
The iteration value to trigger the updating of collision detection pairs.

Example

<...  UpdateStrategy="IterLoop" IterLoopVal="10"... />

[Variable] : dt

  • id : dt
  • source file : Lib/GranOO3/Math/Variable.cpp

Current time step


[Variable] : it

  • id : it
  • source file : Lib/GranOO3/Math/Variable.cpp

Current iteration step


[Variable] : t

  • id : t
  • source file : Lib/GranOO3/Math/Variable.cpp

Current time