Class reference (yade.wrapper module)

Bodies

Body

class yade.wrapper.Body(inherits Serializable)

A particle, basic element of simulation; interacts with other bodies.

aspherical(=false)

Whether this body has different inertia along principal axes; NewtonIntegrator makes use of this flag to call rotation integration routine for aspherical bodies, which is more expensive.

bound(=uninitalized)

Bound, approximating volume for the purposes of collision detection.

bounded(=true)

Whether this body should have Body.bound created. Note that bodies without a bound do not participate in collision detection. (In c++, use Body::isBounded/Body::setBounded)

chain

Returns Id of chain to which the body belongs.

clumpId

Id of clump this body makes part of; invalid number if not part of clump; see Body::isStandalone, Body::isClump, Body::isClumpMember properties.

Not meant to be modified directly from Python, use O.bodies.appendClumped instead.

dict() → dict

Return dictionary of attributes.

dynamic(=true)

Whether this body will be moved by forces. (In c++, use Body::isDynamic/Body::setDynamic)

flags(=FLAG_BOUNDED)

Bits of various body-related flags. Do not access directly. In c++, use isDynamic/setDynamic, isBounded/setBounded, isAspherical/setAspherical. In python, use Body.dynamic, Body.bounded, Body.aspherical.

groupMask(=1)

Bitmask for determining interactions.

id(=Body::ID_NONE)

Unique id of this body.

intrs() → list

Return all interactions in which this body participates.

isClump

True if this body is clump itself, false otherwise.

isClumpMember

True if this body is clump member, false otherwise.

isStandalone

True if this body is neither clump, nor clump member; false otherwise.

iterBorn

Returns step number at which the body was added to simulation.

mask

Shorthand for Body::groupMask

mat

Shorthand for Body::material

material(=uninitalized)

Material instance associated with this body.

shape(=uninitalized)

Geometrical Shape.

state(=new State)

Physical state.

timeBorn

Returns time at which the body was added to simulation.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

Shape

digraph Shape {
        rankdir=RL;
        margin=.2;
        "Shape" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Shape"];
        "Box" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Box"];
        "Box" -> "Shape" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Cylinder" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Cylinder"];
        "Cylinder" -> "Sphere" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "ChainedCylinder" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.ChainedCylinder"];
        "ChainedCylinder" -> "Cylinder" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "GridConnection" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.GridConnection"];
        "GridConnection" -> "Sphere" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Wall" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Wall"];
        "Wall" -> "Shape" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Tetra" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Tetra"];
        "Tetra" -> "Shape" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Polyhedra" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Polyhedra"];
        "Polyhedra" -> "Shape" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "GridNode" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.GridNode"];
        "GridNode" -> "Sphere" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Facet" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Facet"];
        "Facet" -> "Shape" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Sphere" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Sphere"];
        "Sphere" -> "Shape" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Clump" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Clump"];
        "Clump" -> "Shape" [arrowsize=0.5,style="setlinewidth(0.5)"];
}

class yade.wrapper.Shape(inherits Serializable)

Geometry of a body

color(=Vector3r(1, 1, 1))

Color for rendering (normalized RGB).

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

highlight(=false)

Whether this Shape will be highlighted when rendered.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wire(=false)

Whether this Shape is rendered using color surfaces, or only wireframe (can still be overridden by global config of the renderer).

class yade.wrapper.Box(inherits Shape → Serializable)

Box (cuboid) particle geometry. (Avoid using in new code, prefer Facet instead.

color(=Vector3r(1, 1, 1))

Color for rendering (normalized RGB).

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

extents(=uninitalized)

Half-size of the cuboid

highlight(=false)

Whether this Shape will be highlighted when rendered.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wire(=false)

Whether this Shape is rendered using color surfaces, or only wireframe (can still be overridden by global config of the renderer).

class yade.wrapper.ChainedCylinder(inherits Cylinder → Sphere → Shape → Serializable)

Geometry of a deformable chained cylinder, using geometry Cylinder.

chainedOrientation(=Quaternionr::Identity())

Deviation of node1 orientation from node-to-node vector

color(=Vector3r(1, 1, 1))

Color for rendering (normalized RGB).

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

highlight(=false)

Whether this Shape will be highlighted when rendered.

initLength(=0)

tensile-free length, used as reference for tensile strain

length(=NaN)

Length [m]

radius(=NaN)

Radius [m]

segment(=Vector3r::Zero())

Length vector

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wire(=false)

Whether this Shape is rendered using color surfaces, or only wireframe (can still be overridden by global config of the renderer).

class yade.wrapper.Clump(inherits Shape → Serializable)

Rigid aggregate of bodies

color(=Vector3r(1, 1, 1))

Color for rendering (normalized RGB).

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

highlight(=false)

Whether this Shape will be highlighted when rendered.

members

Return clump members as {‘id1’:(relPos,relOri),...}

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wire(=false)

Whether this Shape is rendered using color surfaces, or only wireframe (can still be overridden by global config of the renderer).

class yade.wrapper.Cylinder(inherits Sphere → Shape → Serializable)

Geometry of a cylinder, as Minkowski sum of line and sphere.

color(=Vector3r(1, 1, 1))

Color for rendering (normalized RGB).

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

highlight(=false)

Whether this Shape will be highlighted when rendered.

length(=NaN)

Length [m]

radius(=NaN)

Radius [m]

segment(=Vector3r::Zero())

Length vector

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wire(=false)

Whether this Shape is rendered using color surfaces, or only wireframe (can still be overridden by global config of the renderer).

class yade.wrapper.Facet(inherits Shape → Serializable)

Facet (triangular particle) geometry.

area(=NaN)

Facet’s area

color(=Vector3r(1, 1, 1))

Color for rendering (normalized RGB).

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

highlight(=false)

Whether this Shape will be highlighted when rendered.

normal(=Vector3r(NaN, NaN, NaN))

Facet’s normal (in local coordinate system)

setVertices((Vector3)arg2, (Vector3)arg3, (Vector3)arg4) → None

TODO

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

vertices(=vector<Vector3r>(3, Vector3r(NaN, NaN, NaN)))

Vertex positions in local coordinates.

wire(=false)

Whether this Shape is rendered using color surfaces, or only wireframe (can still be overridden by global config of the renderer).

class yade.wrapper.GridConnection(inherits Sphere → Shape → Serializable)

GridConnection shape. Component of a grid designed to link two GridNodes. It’s highly recommended to use utils.gridConnection(...) to generate correct GridConnections.

cellDist(=Vector3i(0, 0, 0))

missing doc :(

color(=Vector3r(1, 1, 1))

Color for rendering (normalized RGB).

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

highlight(=false)

Whether this Shape will be highlighted when rendered.

node1(=uninitalized)

First Body the GridConnection is connected to.

node2(=uninitalized)

Second Body the GridConnection is connected to.

periodic(=false)

true if two nodes from different periods are connected.

radius(=NaN)

Radius [m]

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wire(=false)

Whether this Shape is rendered using color surfaces, or only wireframe (can still be overridden by global config of the renderer).

class yade.wrapper.GridNode(inherits Sphere → Shape → Serializable)

GridNode shape, component of a grid. To create a Grid, place the nodes first, they will define the spacial discretisation of it. It’s highly recommended to use utils.gridNode(...) to generate correct GridNodes. Note that the GridNodes should only be in an Interaction with other GridNodes. The Sphere-Grid contact is only handled by the GridConnections.

ConnList(=uninitalized)

List of GridConnections the GridNode is connected to.

addConnection((Body)Body) → None

Add a GridConnection to the GridNode.

color(=Vector3r(1, 1, 1))

Color for rendering (normalized RGB).

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

highlight(=false)

Whether this Shape will be highlighted when rendered.

radius(=NaN)

Radius [m]

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wire(=false)

Whether this Shape is rendered using color surfaces, or only wireframe (can still be overridden by global config of the renderer).

class yade.wrapper.Polyhedra(inherits Shape → Serializable)

Polyhedral (convex) geometry.

GetCentroid() → Vector3

return polyhedra’s centroid

GetInertia() → Vector3

return polyhedra’s inertia tensor

GetOri() → Quaternion

return polyhedra’s orientation

GetSurfaceTriangulation() → object

triangulation of facets (for plotting)

GetSurfaces() → object

get indices of surfaces’ vertices (for postprocessing)

GetVolume() → float

return polyhedra’s volume

Initialize() → None

Initialization

color(=Vector3r(1, 1, 1))

Color for rendering (normalized RGB).

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

highlight(=false)

Whether this Shape will be highlighted when rendered.

seed(=time(__null))

Seed for random generator.

setVertices((object)arg2) → None

set vertices and update receiver

size(=Vector3r(1., 1., 1.))

Size of the grain in meters - x,y,z - before random rotation

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

v(=uninitalized)

Tetrahedron vertices in global coordinate system.

wire(=false)

Whether this Shape is rendered using color surfaces, or only wireframe (can still be overridden by global config of the renderer).

class yade.wrapper.Sphere(inherits Shape → Serializable)

Geometry of spherical particle.

color(=Vector3r(1, 1, 1))

Color for rendering (normalized RGB).

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

highlight(=false)

Whether this Shape will be highlighted when rendered.

radius(=NaN)

Radius [m]

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wire(=false)

Whether this Shape is rendered using color surfaces, or only wireframe (can still be overridden by global config of the renderer).

class yade.wrapper.Tetra(inherits Shape → Serializable)

Tetrahedron geometry.

color(=Vector3r(1, 1, 1))

Color for rendering (normalized RGB).

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

highlight(=false)

Whether this Shape will be highlighted when rendered.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

v(=std::vector<Vector3r>(4))

Tetrahedron vertices (in local coordinate system).

wire(=false)

Whether this Shape is rendered using color surfaces, or only wireframe (can still be overridden by global config of the renderer).

class yade.wrapper.Wall(inherits Shape → Serializable)

Object representing infinite plane aligned with the coordinate system (axis-aligned wall).

axis(=0)

Axis of the normal; can be 0,1,2 for +x, +y, +z respectively (Body’s orientation is disregarded for walls)

color(=Vector3r(1, 1, 1))

Color for rendering (normalized RGB).

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

highlight(=false)

Whether this Shape will be highlighted when rendered.

sense(=0)

Which side of the wall interacts: -1 for negative only, 0 for both, +1 for positive only

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wire(=false)

Whether this Shape is rendered using color surfaces, or only wireframe (can still be overridden by global config of the renderer).

State

digraph State {
        rankdir=RL;
        margin=.2;
        "State" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.State"];
        "JCFpmState" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.JCFpmState"];
        "JCFpmState" -> "State" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "ChainedState" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.ChainedState"];
        "ChainedState" -> "State" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "WireState" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.WireState"];
        "WireState" -> "State" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "CpmState" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.CpmState"];
        "CpmState" -> "State" [arrowsize=0.5,style="setlinewidth(0.5)"];
}

class yade.wrapper.State(inherits Serializable)

State of a body (spatial configuration, internal variables).

angMom(=Vector3r::Zero())

Current angular momentum

angVel(=Vector3r::Zero())

Current angular velocity

blockedDOFs

Degress of freedom where linear/angular velocity will be always constant (equal to zero, or to an user-defined value), regardless of applied force/torque. String that may contain ‘xyzXYZ’ (translations and rotations).

densityScaling(=1)

(auto-updated) see GlobalStiffnessTimeStepper::targetDt.

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

displ() → Vector3

Displacement from reference position (pos - refPos)

inertia(=Vector3r::Zero())

Inertia of associated body, in local coordinate system.

isDamped(=true)

Damping in Newtonintegrator can be deactivated for individual particles by setting this variable to FALSE. E.g. damping is inappropriate for particles in free flight under gravity but it might still be applicable to other particles in the same simulation.

mass(=0)

Mass of this body

ori

Current orientation.

pos

Current position.

press

Returns the pressure (only for SPH-model).

refOri(=Quaternionr::Identity())

Reference orientation

refPos(=Vector3r::Zero())

Reference position

rho

Returns the current density (only for SPH-model).

rho0

Returns the rest density (only for SPH-model).

rot() → Vector3

Rotation from reference orientation (as rotation vector)

se3(=Se3r(Vector3r::Zero(), Quaternionr::Identity()))

Position and orientation as one object.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

vel(=Vector3r::Zero())

Current linear velocity.

class yade.wrapper.ChainedState(inherits State → Serializable)

State of a chained bodies, containing information on connectivity in order to track contacts jumping over contiguous elements. Chains are 1D lists from which id of chained bodies are retrieved via rank and chainNumber.

addToChain((int)bodyId) → None

Add body to current active chain

angMom(=Vector3r::Zero())

Current angular momentum

angVel(=Vector3r::Zero())

Current angular velocity

bId(=-1)

id of the body containing - for postLoad operations only.

blockedDOFs

Degress of freedom where linear/angular velocity will be always constant (equal to zero, or to an user-defined value), regardless of applied force/torque. String that may contain ‘xyzXYZ’ (translations and rotations).

chainNumber(=0)

chain id.

currentChain = 0
densityScaling(=1)

(auto-updated) see GlobalStiffnessTimeStepper::targetDt.

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

displ() → Vector3

Displacement from reference position (pos - refPos)

inertia(=Vector3r::Zero())

Inertia of associated body, in local coordinate system.

isDamped(=true)

Damping in Newtonintegrator can be deactivated for individual particles by setting this variable to FALSE. E.g. damping is inappropriate for particles in free flight under gravity but it might still be applicable to other particles in the same simulation.

mass(=0)

Mass of this body

ori

Current orientation.

pos

Current position.

press

Returns the pressure (only for SPH-model).

rank(=0)

rank in the chain.

refOri(=Quaternionr::Identity())

Reference orientation

refPos(=Vector3r::Zero())

Reference position

rho

Returns the current density (only for SPH-model).

rho0

Returns the rest density (only for SPH-model).

rot() → Vector3

Rotation from reference orientation (as rotation vector)

se3(=Se3r(Vector3r::Zero(), Quaternionr::Identity()))

Position and orientation as one object.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

vel(=Vector3r::Zero())

Current linear velocity.

class yade.wrapper.CpmState(inherits State → Serializable)

State information about body use by cpm-model.

None of that is used for computation (at least not now), only for post-processing.

angMom(=Vector3r::Zero())

Current angular momentum

angVel(=Vector3r::Zero())

Current angular velocity

blockedDOFs

Degress of freedom where linear/angular velocity will be always constant (equal to zero, or to an user-defined value), regardless of applied force/torque. String that may contain ‘xyzXYZ’ (translations and rotations).

damageTensor(=Matrix3r::Zero())

Damage tensor computed with microplane theory averaging. state.damageTensor.trace() = state.normDmg

densityScaling(=1)

(auto-updated) see GlobalStiffnessTimeStepper::targetDt.

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

displ() → Vector3

Displacement from reference position (pos - refPos)

epsVolumetric(=0)

Volumetric strain around this body (unused for now)

inertia(=Vector3r::Zero())

Inertia of associated body, in local coordinate system.

isDamped(=true)

Damping in Newtonintegrator can be deactivated for individual particles by setting this variable to FALSE. E.g. damping is inappropriate for particles in free flight under gravity but it might still be applicable to other particles in the same simulation.

mass(=0)

Mass of this body

normDmg(=0)

Average damage including already deleted contacts (it is really not damage, but 1-relResidualStrength now)

numBrokenCohesive(=0)

Number of (cohesive) contacts that damaged completely

numContacts(=0)

Number of contacts with this body

ori

Current orientation.

pos

Current position.

press

Returns the pressure (only for SPH-model).

refOri(=Quaternionr::Identity())

Reference orientation

refPos(=Vector3r::Zero())

Reference position

rho

Returns the current density (only for SPH-model).

rho0

Returns the rest density (only for SPH-model).

rot() → Vector3

Rotation from reference orientation (as rotation vector)

se3(=Se3r(Vector3r::Zero(), Quaternionr::Identity()))

Position and orientation as one object.

stress(=Matrix3r::Zero())

Stress tensor of the spherical particle (under assumption that particle volume = pi*r*r*r*4/3.) for packing fraction 0.62

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

vel(=Vector3r::Zero())

Current linear velocity.

class yade.wrapper.JCFpmState(inherits State → Serializable)

JCFpm state information about each body.

angMom(=Vector3r::Zero())

Current angular momentum

angVel(=Vector3r::Zero())

Current angular velocity

blockedDOFs

Degress of freedom where linear/angular velocity will be always constant (equal to zero, or to an user-defined value), regardless of applied force/torque. String that may contain ‘xyzXYZ’ (translations and rotations).

densityScaling(=1)

(auto-updated) see GlobalStiffnessTimeStepper::targetDt.

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

displ() → Vector3

Displacement from reference position (pos - refPos)

inertia(=Vector3r::Zero())

Inertia of associated body, in local coordinate system.

isDamped(=true)

Damping in Newtonintegrator can be deactivated for individual particles by setting this variable to FALSE. E.g. damping is inappropriate for particles in free flight under gravity but it might still be applicable to other particles in the same simulation.

joint(=0)

Indicates the number of joint surfaces to which the particle belongs (0-> no joint, 1->1 joint, etc..). [-]

jointNormal1(=Vector3r::Zero())

Specifies the normal direction to the joint plane 1. Rk: the ideal here would be to create a vector of vector wich size is defined by the joint integer (as much joint normals as joints). However, it needs to make the pushback function works with python since joint detection is done through a python script. lines 272 to 312 of cpp file should therefore be adapted. [-]

jointNormal2(=Vector3r::Zero())

Specifies the normal direction to the joint plane 2. [-]

jointNormal3(=Vector3r::Zero())

Specifies the normal direction to the joint plane 3. [-]

mass(=0)

Mass of this body

Number of initial cohesive interactions. [-]

onJoint(=false)

Identifies if the particle is on a joint surface.

ori

Current orientation.

pos

Current position.

press

Returns the pressure (only for SPH-model).

refOri(=Quaternionr::Identity())

Reference orientation

refPos(=Vector3r::Zero())

Reference position

rho

Returns the current density (only for SPH-model).

rho0

Returns the rest density (only for SPH-model).

rot() → Vector3

Rotation from reference orientation (as rotation vector)

se3(=Se3r(Vector3r::Zero(), Quaternionr::Identity()))

Position and orientation as one object.

shearBreak(=0)

Number of shear breakages. [-]

shearBreakRel(=0)

Relative number (in [0;1], compared with noIniLinks) of shear breakages. [-]

tensBreak(=0)

Number of tensile breakages. [-]

tensBreakRel(=0)

Relative number (in [0;1], compared with noIniLinks) of tensile breakages. [-]

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

vel(=Vector3r::Zero())

Current linear velocity.

class yade.wrapper.WireState(inherits State → Serializable)

Wire state information of each body.

None of that is used for computation (at least not now), only for post-processing.

angMom(=Vector3r::Zero())

Current angular momentum

angVel(=Vector3r::Zero())

Current angular velocity

blockedDOFs

Degress of freedom where linear/angular velocity will be always constant (equal to zero, or to an user-defined value), regardless of applied force/torque. String that may contain ‘xyzXYZ’ (translations and rotations).

densityScaling(=1)

(auto-updated) see GlobalStiffnessTimeStepper::targetDt.

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

displ() → Vector3

Displacement from reference position (pos - refPos)

inertia(=Vector3r::Zero())

Inertia of associated body, in local coordinate system.

isDamped(=true)

Damping in Newtonintegrator can be deactivated for individual particles by setting this variable to FALSE. E.g. damping is inappropriate for particles in free flight under gravity but it might still be applicable to other particles in the same simulation.

mass(=0)

Mass of this body

Number of broken links (e.g. number of wires connected to the body which are broken). [-]

ori

Current orientation.

pos

Current position.

press

Returns the pressure (only for SPH-model).

refOri(=Quaternionr::Identity())

Reference orientation

refPos(=Vector3r::Zero())

Reference position

rho

Returns the current density (only for SPH-model).

rho0

Returns the rest density (only for SPH-model).

rot() → Vector3

Rotation from reference orientation (as rotation vector)

se3(=Se3r(Vector3r::Zero(), Quaternionr::Identity()))

Position and orientation as one object.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

vel(=Vector3r::Zero())

Current linear velocity.

Material

digraph Material {
        rankdir=RL;
        margin=.2;
        "Material" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Material"];
        "ViscElCapMat" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.ViscElCapMat"];
        "ViscElCapMat" -> "ViscElMat" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "InelastCohFrictMat" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.InelastCohFrictMat"];
        "InelastCohFrictMat" -> "FrictMat" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "FrictMat" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.FrictMat"];
        "FrictMat" -> "ElastMat" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "LudingMat" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.LudingMat"];
        "LudingMat" -> "Material" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "BubbleMat" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.BubbleMat"];
        "BubbleMat" -> "Material" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "CpmMat" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.CpmMat"];
        "CpmMat" -> "FrictMat" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "WireMat" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.WireMat"];
        "WireMat" -> "FrictMat" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "CohFrictMat" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.CohFrictMat"];
        "CohFrictMat" -> "FrictMat" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "NormalInelasticMat" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.NormalInelasticMat"];
        "NormalInelasticMat" -> "FrictMat" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "PolyhedraMat" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.PolyhedraMat"];
        "PolyhedraMat" -> "FrictMat" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "ElastMat" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.ElastMat"];
        "ElastMat" -> "Material" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "JCFpmMat" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.JCFpmMat"];
        "JCFpmMat" -> "FrictMat" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "ViscElMat" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.ViscElMat"];
        "ViscElMat" -> "FrictMat" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "FrictViscoMat" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.FrictViscoMat"];
        "FrictViscoMat" -> "FrictMat" [arrowsize=0.5,style="setlinewidth(0.5)"];
}

class yade.wrapper.Material(inherits Serializable)

Material properties of a body.

density(=1000)

Density of the material [kg/m³]

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

id(=-1, not shared)

Numeric id of this material; is non-negative only if this Material is shared (i.e. in O.materials), -1 otherwise. This value is set automatically when the material is inserted to the simulation via O.materials.append. (This id was necessary since before boost::serialization was used, shared pointers were not tracked properly; it might disappear in the future)

label(=uninitalized)

Textual identifier for this material; can be used for shared materials lookup in MaterialContainer.

newAssocState() → State

Return new State instance, which is associated with this Material. Some materials have special requirement on Body::state type and calling this function when the body is created will ensure that they match. (This is done automatically if you use utils.sphere, … functions from python).

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.BubbleMat(inherits Material → Serializable)

material for bubble interactions, for use with other Bubble classes

density(=1000)

Density of the material [kg/m³]

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

id(=-1, not shared)

Numeric id of this material; is non-negative only if this Material is shared (i.e. in O.materials), -1 otherwise. This value is set automatically when the material is inserted to the simulation via O.materials.append. (This id was necessary since before boost::serialization was used, shared pointers were not tracked properly; it might disappear in the future)

label(=uninitalized)

Textual identifier for this material; can be used for shared materials lookup in MaterialContainer.

newAssocState() → State

Return new State instance, which is associated with this Material. Some materials have special requirement on Body::state type and calling this function when the body is created will ensure that they match. (This is done automatically if you use utils.sphere, … functions from python).

surfaceTension(=0.07197)

The surface tension in the fluid surrounding the bubbles. The default value is that of water at 25 degrees Celcius.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.CohFrictMat(inherits FrictMat → ElastMat → Material → Serializable)
alphaKr(=2.0)

Dimensionless rolling stiffness.

alphaKtw(=2.0)

Dimensionless twist stiffness.

density(=1000)

Density of the material [kg/m³]

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

etaRoll(=-1.)

Dimensionless rolling (aka ‘bending’) strength. If negative, rolling moment will be elastic.

etaTwist(=-1.)

Dimensionless twisting strength. If negative, twist moment will be elastic.

fragile(=true)

do cohesion disappear when contact strength is exceeded

frictionAngle(=.5)

Contact friction angle (in radians). Hint : use ‘radians(degreesValue)’ in python scripts.

id(=-1, not shared)

Numeric id of this material; is non-negative only if this Material is shared (i.e. in O.materials), -1 otherwise. This value is set automatically when the material is inserted to the simulation via O.materials.append. (This id was necessary since before boost::serialization was used, shared pointers were not tracked properly; it might disappear in the future)

isCohesive(=true)

label(=uninitalized)

Textual identifier for this material; can be used for shared materials lookup in MaterialContainer.

momentRotationLaw(=false)

Use bending/twisting moment at contact. The contact will have moments only if both bodies have this flag true. See CohFrictPhys::cohesionDisablesFriction for details.

newAssocState() → State

Return new State instance, which is associated with this Material. Some materials have special requirement on Body::state type and calling this function when the body is created will ensure that they match. (This is done automatically if you use utils.sphere, … functions from python).

normalCohesion(=-1)

Tensile strength, homogeneous to a pressure. If negative the normal force is purely elastic.

poisson(=.25)

Poisson’s ratio or the ratio between shear and normal stiffness [-]. It has different meanings depending on the Ip functor.

shearCohesion(=-1)

Shear strength, homogeneous to a pressure. If negative the shear force is purely elastic.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

young(=1e9)

elastic modulus [Pa]. It has different meanings depending on the Ip functor.

class yade.wrapper.CpmMat(inherits FrictMat → ElastMat → Material → Serializable)

Concrete material, for use with other Cpm classes.

Note

Density is initialized to 4800 kgm⁻³automatically, which gives approximate 2800 kgm⁻³ on 0.5 density packing.

Concrete Particle Model (CPM)

CpmMat is particle material, Ip2_CpmMat_CpmMat_CpmPhys averages two particles’ materials, creating CpmPhys, which is then used in interaction resultion by Law2_ScGeom_CpmPhys_Cpm. CpmState is associated to CpmMat and keeps state defined on particles rather than interactions (such as number of completely damaged interactions).

The model is contained in externally defined macro CPM_MATERIAL_MODEL, which features damage in tension, plasticity in shear and compression and rate-dependence. For commercial reasons, rate-dependence and compression-plasticity is not present in reduced version of the model, used when CPM_MATERIAL_MODEL is not defined. The full model will be described in detail in my (Václav Šmilauer) thesis along with calibration procedures (rigidity, poisson’s ratio, compressive/tensile strength ratio, fracture energy, behavior under confinement, rate-dependent behavior).

Even the public model is useful enough to run simulation on concrete samples, such as uniaxial tension-compression test.

damLaw(=1)

Law for damage evolution in uniaxial tension. 0 for linear stress-strain softening branch, 1 (default) for exponential damage evolution law

density(=1000)

Density of the material [kg/m³]

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

dmgRateExp(=0)

Exponent for normal viscosity function. [-]

dmgTau(=-1, deactivated if negative)

Characteristic time for normal viscosity. [s]

epsCrackOnset(=NaN)

Limit elastic strain [-]

frictionAngle(=.5)

Contact friction angle (in radians). Hint : use ‘radians(degreesValue)’ in python scripts.

id(=-1, not shared)

Numeric id of this material; is non-negative only if this Material is shared (i.e. in O.materials), -1 otherwise. This value is set automatically when the material is inserted to the simulation via O.materials.append. (This id was necessary since before boost::serialization was used, shared pointers were not tracked properly; it might disappear in the future)

isoPrestress(=0)

Isotropic prestress of the whole specimen. [Pa]

label(=uninitalized)

Textual identifier for this material; can be used for shared materials lookup in MaterialContainer.

neverDamage(=false)

If true, no damage will occur (for testing only).

newAssocState() → State

Return new State instance, which is associated with this Material. Some materials have special requirement on Body::state type and calling this function when the body is created will ensure that they match. (This is done automatically if you use utils.sphere, … functions from python).

plRateExp(=0)

Exponent for visco-plasticity function. [-]

plTau(=-1, deactivated if negative)

Characteristic time for visco-plasticity. [s]

poisson(=.25)

Poisson’s ratio or the ratio between shear and normal stiffness [-]. It has different meanings depending on the Ip functor.

relDuctility(=NaN)

relative ductility of bonds in normal direction

sigmaT(=NaN)

Initial cohesion [Pa]

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

young(=1e9)

elastic modulus [Pa]. It has different meanings depending on the Ip functor.

class yade.wrapper.ElastMat(inherits Material → Serializable)

Purely elastic material. The material parameters may have different meanings depending on the IPhysFunctor used : true Young and Poisson in Ip2_FrictMat_FrictMat_MindlinPhys, or contact stiffnesses in Ip2_FrictMat_FrictMat_FrictPhys.

density(=1000)

Density of the material [kg/m³]

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

id(=-1, not shared)

Numeric id of this material; is non-negative only if this Material is shared (i.e. in O.materials), -1 otherwise. This value is set automatically when the material is inserted to the simulation via O.materials.append. (This id was necessary since before boost::serialization was used, shared pointers were not tracked properly; it might disappear in the future)

label(=uninitalized)

Textual identifier for this material; can be used for shared materials lookup in MaterialContainer.

newAssocState() → State

Return new State instance, which is associated with this Material. Some materials have special requirement on Body::state type and calling this function when the body is created will ensure that they match. (This is done automatically if you use utils.sphere, … functions from python).

poisson(=.25)

Poisson’s ratio or the ratio between shear and normal stiffness [-]. It has different meanings depending on the Ip functor.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

young(=1e9)

elastic modulus [Pa]. It has different meanings depending on the Ip functor.

class yade.wrapper.FrictMat(inherits ElastMat → Material → Serializable)

Elastic material with contact friction. See also ElastMat.

density(=1000)

Density of the material [kg/m³]

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

frictionAngle(=.5)

Contact friction angle (in radians). Hint : use ‘radians(degreesValue)’ in python scripts.

id(=-1, not shared)

Numeric id of this material; is non-negative only if this Material is shared (i.e. in O.materials), -1 otherwise. This value is set automatically when the material is inserted to the simulation via O.materials.append. (This id was necessary since before boost::serialization was used, shared pointers were not tracked properly; it might disappear in the future)

label(=uninitalized)

Textual identifier for this material; can be used for shared materials lookup in MaterialContainer.

newAssocState() → State

Return new State instance, which is associated with this Material. Some materials have special requirement on Body::state type and calling this function when the body is created will ensure that they match. (This is done automatically if you use utils.sphere, … functions from python).

poisson(=.25)

Poisson’s ratio or the ratio between shear and normal stiffness [-]. It has different meanings depending on the Ip functor.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

young(=1e9)

elastic modulus [Pa]. It has different meanings depending on the Ip functor.

class yade.wrapper.FrictViscoMat(inherits FrictMat → ElastMat → Material → Serializable)

Material for use with the FrictViscoPM classes

betan(=0.)

Fraction of the viscous damping coefficient in normal direction equal to \frac{c_{n}}{C_{n,crit}}.

density(=1000)

Density of the material [kg/m³]

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

frictionAngle(=.5)

Contact friction angle (in radians). Hint : use ‘radians(degreesValue)’ in python scripts.

id(=-1, not shared)

Numeric id of this material; is non-negative only if this Material is shared (i.e. in O.materials), -1 otherwise. This value is set automatically when the material is inserted to the simulation via O.materials.append. (This id was necessary since before boost::serialization was used, shared pointers were not tracked properly; it might disappear in the future)

label(=uninitalized)

Textual identifier for this material; can be used for shared materials lookup in MaterialContainer.

newAssocState() → State

Return new State instance, which is associated with this Material. Some materials have special requirement on Body::state type and calling this function when the body is created will ensure that they match. (This is done automatically if you use utils.sphere, … functions from python).

poisson(=.25)

Poisson’s ratio or the ratio between shear and normal stiffness [-]. It has different meanings depending on the Ip functor.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

young(=1e9)

elastic modulus [Pa]. It has different meanings depending on the Ip functor.

class yade.wrapper.InelastCohFrictMat(inherits FrictMat → ElastMat → Material → Serializable)
alphaKr(=2.0)

Dimensionless coefficient used for the rolling stiffness.

alphaKtw(=2.0)

Dimensionless coefficient used for the twist stiffness.

compressionModulus(=0.0)

Compresion elasticity modulus

creepBending(=0.0)

Bending creeping coefficient. Usual values between 0 and 1.

creepTension(=0.0)

Tension/compression creeping coefficient. Usual values between 0 and 1.

creepTwist(=0.0)

Twist creeping coefficient. Usual values between 0 and 1.

density(=1000)

Density of the material [kg/m³]

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

epsilonMaxCompression(=0.0)

Maximal plastic strain compression

epsilonMaxTension(=0.0)

Maximal plastic strain tension

etaMaxBending(=0.0)

Maximal plastic bending strain

etaMaxTwist(=0.0)

Maximal plastic twist strain

frictionAngle(=.5)

Contact friction angle (in radians). Hint : use ‘radians(degreesValue)’ in python scripts.

id(=-1, not shared)

Numeric id of this material; is non-negative only if this Material is shared (i.e. in O.materials), -1 otherwise. This value is set automatically when the material is inserted to the simulation via O.materials.append. (This id was necessary since before boost::serialization was used, shared pointers were not tracked properly; it might disappear in the future)

label(=uninitalized)

Textual identifier for this material; can be used for shared materials lookup in MaterialContainer.

newAssocState() → State

Return new State instance, which is associated with this Material. Some materials have special requirement on Body::state type and calling this function when the body is created will ensure that they match. (This is done automatically if you use utils.sphere, … functions from python).

nuBending(=0.0)

Bending elastic stress limit

nuTwist(=0.0)

Twist elastic stress limit

poisson(=.25)

Poisson’s ratio or the ratio between shear and normal stiffness [-]. It has different meanings depending on the Ip functor.

shearCohesion(=0.0)

Shear elastic stress limit

shearModulus(=0.0)

shear elasticity modulus

sigmaCompression(=0.0)

Compression elastic stress limit

sigmaTension(=0.0)

Tension elastic stress limit

tensionModulus(=0.0)

Tension elasticity modulus

unloadBending(=0.0)

Bending plastic unload coefficient. Usual values between 0 and +infinity.

unloadTension(=0.0)

Tension/compression plastic unload coefficient. Usual values between 0 and +infinity.

unloadTwist(=0.0)

Twist plastic unload coefficient. Usual values between 0 and +infinity.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

young(=1e9)

elastic modulus [Pa]. It has different meanings depending on the Ip functor.

class yade.wrapper.JCFpmMat(inherits FrictMat → ElastMat → Material → Serializable)

Possibly jointed, cohesive frictional material, for use with other JCFpm classes

cohesion(=0.)

Defines the maximum admissible tangential force in shear, for Fn=0, in the matrix (FsMax = cohesion * crossSection). [Pa]

density(=1000)

Density of the material [kg/m³]

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

frictionAngle(=.5)

Contact friction angle (in radians). Hint : use ‘radians(degreesValue)’ in python scripts.

id(=-1, not shared)

Numeric id of this material; is non-negative only if this Material is shared (i.e. in O.materials), -1 otherwise. This value is set automatically when the material is inserted to the simulation via O.materials.append. (This id was necessary since before boost::serialization was used, shared pointers were not tracked properly; it might disappear in the future)

jointCohesion(=0.)

Defines the maximum admissible tangential force in shear, for Fn=0, on the joint surface. [Pa]

jointDilationAngle(=0)

Defines the dilatancy of the joint surface (only valid for smooth contact logic). [rad]

jointFrictionAngle(=-1)

Defines Coulomb friction on the joint surface. [rad]

jointNormalStiffness(=0.)

Defines the normal stiffness on the joint surface. [Pa/m]

jointShearStiffness(=0.)

Defines the shear stiffness on the joint surface. [Pa/m]

jointTensileStrength(=0.)

Defines the maximum admissible normal force in traction on the joint surface. [Pa]

label(=uninitalized)

Textual identifier for this material; can be used for shared materials lookup in MaterialContainer.

newAssocState() → State

Return new State instance, which is associated with this Material. Some materials have special requirement on Body::state type and calling this function when the body is created will ensure that they match. (This is done automatically if you use utils.sphere, … functions from python).

poisson(=.25)

Poisson’s ratio or the ratio between shear and normal stiffness [-]. It has different meanings depending on the Ip functor.

tensileStrength(=0.)

Defines the maximum admissible normal force in traction in the matrix (FnMax = tensileStrength * crossSection). [Pa]

type(=0)

If particles of two different types interact, it will be with friction only (no cohesion).[-]

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

young(=1e9)

elastic modulus [Pa]. It has different meanings depending on the Ip functor.

class yade.wrapper.LudingMat(inherits Material → Serializable)

Material for simple Ludning`s model of contact.

G0(=NaN)

Viscous damping

PhiF(=NaN)

Dimensionless plasticity depth

density(=1000)

Density of the material [kg/m³]

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

frictionAngle(=NaN)

Friction angle [rad]

id(=-1, not shared)

Numeric id of this material; is non-negative only if this Material is shared (i.e. in O.materials), -1 otherwise. This value is set automatically when the material is inserted to the simulation via O.materials.append. (This id was necessary since before boost::serialization was used, shared pointers were not tracked properly; it might disappear in the future)

k1(=NaN)

Slope of loading plastic branch

kc(=NaN)

Slope of irreversible, tensile adhesive branch

kp(=NaN)

Slope of unloading and reloading limit elastic branch

label(=uninitalized)

Textual identifier for this material; can be used for shared materials lookup in MaterialContainer.

newAssocState() → State

Return new State instance, which is associated with this Material. Some materials have special requirement on Body::state type and calling this function when the body is created will ensure that they match. (This is done automatically if you use utils.sphere, … functions from python).

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.NormalInelasticMat(inherits FrictMat → ElastMat → Material → Serializable)

Material class for particles whose contact obey to a normal inelasticity (governed by this coeff_dech).

coeff_dech(=1.0)

=kn(unload) / kn(load)

density(=1000)

Density of the material [kg/m³]

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

frictionAngle(=.5)

Contact friction angle (in radians). Hint : use ‘radians(degreesValue)’ in python scripts.

id(=-1, not shared)

Numeric id of this material; is non-negative only if this Material is shared (i.e. in O.materials), -1 otherwise. This value is set automatically when the material is inserted to the simulation via O.materials.append. (This id was necessary since before boost::serialization was used, shared pointers were not tracked properly; it might disappear in the future)

label(=uninitalized)

Textual identifier for this material; can be used for shared materials lookup in MaterialContainer.

newAssocState() → State

Return new State instance, which is associated with this Material. Some materials have special requirement on Body::state type and calling this function when the body is created will ensure that they match. (This is done automatically if you use utils.sphere, … functions from python).

poisson(=.25)

Poisson’s ratio or the ratio between shear and normal stiffness [-]. It has different meanings depending on the Ip functor.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

young(=1e9)

elastic modulus [Pa]. It has different meanings depending on the Ip functor.

class yade.wrapper.PolyhedraMat(inherits FrictMat → ElastMat → Material → Serializable)

Elastic material with Coulomb friction.

IsSplitable(=0)

To be splitted ... or not

density(=1000)

Density of the material [kg/m³]

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

frictionAngle(=.5)

Contact friction angle (in radians). Hint : use ‘radians(degreesValue)’ in python scripts.

id(=-1, not shared)

Numeric id of this material; is non-negative only if this Material is shared (i.e. in O.materials), -1 otherwise. This value is set automatically when the material is inserted to the simulation via O.materials.append. (This id was necessary since before boost::serialization was used, shared pointers were not tracked properly; it might disappear in the future)

label(=uninitalized)

Textual identifier for this material; can be used for shared materials lookup in MaterialContainer.

newAssocState() → State

Return new State instance, which is associated with this Material. Some materials have special requirement on Body::state type and calling this function when the body is created will ensure that they match. (This is done automatically if you use utils.sphere, … functions from python).

poisson(=.25)

Poisson’s ratio or the ratio between shear and normal stiffness [-]. It has different meanings depending on the Ip functor.

strength(=100)

Stress at which polyhedra of volume 4/3*pi [mm] breaks.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

young(=1e8)

TODO

class yade.wrapper.ViscElCapMat(inherits ViscElMat → FrictMat → ElastMat → Material → Serializable)

Material for extended viscoelastic model of contact with capillary parameters.

Capillar(=false)

True, if capillar forces need to be added.

CapillarType(="")

Different types of capillar interaction: Willett_numeric, Willett_analytic [Willett2000] , Weigert [Weigert1999] , Rabinovich [Rabinov2005] , Lambert (simplified, corrected Rabinovich model) [Lambert2008]

KernFunctionPressure(=Lucy)

Kernel function for pressure calculation (by default - Lucy). The following kernel functions are available: Lucy=1.

KernFunctionVisco(=Lucy)

Kernel function for viscosity calculation (by default - Lucy). The following kernel functions are available: Lucy=1.

SPHmode(=false)

True, if SPH-mode is enabled.

Vb(=0.0)

Liquid bridge volume [m^3]

cn(=NaN)

Normal viscous constant. Attention, this parameter cannot be set if tc, en or es is defined!

cs(=NaN)

Shear viscous constant. Attention, this parameter cannot be set if tc, en or es is defined!

dcap(=0.0)

Damping coefficient for the capillary phase [-]

density(=1000)

Density of the material [kg/m³]

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

en(=NaN)

Restitution coefficient in normal direction

et(=NaN)

Restitution coefficient in tangential direction

frictionAngle(=.5)

Contact friction angle (in radians). Hint : use ‘radians(degreesValue)’ in python scripts.

gamma(=0.0)

Surface tension [N/m]

h(=-1)

Core radius. See Mueller [Mueller2003] .

id(=-1, not shared)

Numeric id of this material; is non-negative only if this Material is shared (i.e. in O.materials), -1 otherwise. This value is set automatically when the material is inserted to the simulation via O.materials.append. (This id was necessary since before boost::serialization was used, shared pointers were not tracked properly; it might disappear in the future)

kn(=NaN)

Normal elastic stiffness. Attention, this parameter cannot be set if tc, en or es is defined!

ks(=NaN)

Shear elastic stiffness. Attention, this parameter cannot be set if tc, en or es is defined!

label(=uninitalized)

Textual identifier for this material; can be used for shared materials lookup in MaterialContainer.

mR(=0.0)

Rolling resistance, see [Zhou1999536].

mRtype(=1)

Rolling resistance type, see [Zhou1999536]. mRtype=1 - equation (3) in [Zhou1999536]; mRtype=2 - equation (4) in [Zhou1999536].

mu(=-1)

Viscosity. See Mueller [Morris1997] .

newAssocState() → State

Return new State instance, which is associated with this Material. Some materials have special requirement on Body::state type and calling this function when the body is created will ensure that they match. (This is done automatically if you use utils.sphere, … functions from python).

poisson(=.25)

Poisson’s ratio or the ratio between shear and normal stiffness [-]. It has different meanings depending on the Ip functor.

tc(=NaN)

Contact time

theta(=0.0)

Contact angle [°]

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

young(=1e9)

elastic modulus [Pa]. It has different meanings depending on the Ip functor.

class yade.wrapper.ViscElMat(inherits FrictMat → ElastMat → Material → Serializable)

Material for simple viscoelastic model of contact from analytical solution of a pair spheres interaction problem [Pournin2001] .

KernFunctionPressure(=Lucy)

Kernel function for pressure calculation (by default - Lucy). The following kernel functions are available: Lucy=1.

KernFunctionVisco(=Lucy)

Kernel function for viscosity calculation (by default - Lucy). The following kernel functions are available: Lucy=1.

SPHmode(=false)

True, if SPH-mode is enabled.

cn(=NaN)

Normal viscous constant. Attention, this parameter cannot be set if tc, en or es is defined!

cs(=NaN)

Shear viscous constant. Attention, this parameter cannot be set if tc, en or es is defined!

density(=1000)

Density of the material [kg/m³]

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

en(=NaN)

Restitution coefficient in normal direction

et(=NaN)

Restitution coefficient in tangential direction

frictionAngle(=.5)

Contact friction angle (in radians). Hint : use ‘radians(degreesValue)’ in python scripts.

h(=-1)

Core radius. See Mueller [Mueller2003] .

id(=-1, not shared)

Numeric id of this material; is non-negative only if this Material is shared (i.e. in O.materials), -1 otherwise. This value is set automatically when the material is inserted to the simulation via O.materials.append. (This id was necessary since before boost::serialization was used, shared pointers were not tracked properly; it might disappear in the future)

kn(=NaN)

Normal elastic stiffness. Attention, this parameter cannot be set if tc, en or es is defined!

ks(=NaN)

Shear elastic stiffness. Attention, this parameter cannot be set if tc, en or es is defined!

label(=uninitalized)

Textual identifier for this material; can be used for shared materials lookup in MaterialContainer.

mR(=0.0)

Rolling resistance, see [Zhou1999536].

mRtype(=1)

Rolling resistance type, see [Zhou1999536]. mRtype=1 - equation (3) in [Zhou1999536]; mRtype=2 - equation (4) in [Zhou1999536].

mu(=-1)

Viscosity. See Mueller [Morris1997] .

newAssocState() → State

Return new State instance, which is associated with this Material. Some materials have special requirement on Body::state type and calling this function when the body is created will ensure that they match. (This is done automatically if you use utils.sphere, … functions from python).

poisson(=.25)

Poisson’s ratio or the ratio between shear and normal stiffness [-]. It has different meanings depending on the Ip functor.

tc(=NaN)

Contact time

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

young(=1e9)

elastic modulus [Pa]. It has different meanings depending on the Ip functor.

class yade.wrapper.WireMat(inherits FrictMat → ElastMat → Material → Serializable)

Material for use with the Wire classes

as(=0.)

Cross-section area of a single wire used to transform stress into force. [m²]

density(=1000)

Density of the material [kg/m³]

diameter(=0.0027)

Diameter of the single wire in [m] (the diameter is used to compute the cross-section area of the wire).

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

frictionAngle(=.5)

Contact friction angle (in radians). Hint : use ‘radians(degreesValue)’ in python scripts.

id(=-1, not shared)

Numeric id of this material; is non-negative only if this Material is shared (i.e. in O.materials), -1 otherwise. This value is set automatically when the material is inserted to the simulation via O.materials.append. (This id was necessary since before boost::serialization was used, shared pointers were not tracked properly; it might disappear in the future)

isDoubleTwist(=false)

Type of the mesh. If true two particles of the same material which body ids differ by one will be considered as double-twisted interaction.

label(=uninitalized)

Textual identifier for this material; can be used for shared materials lookup in MaterialContainer.

lambdaEps(=0.47)

Parameter between 0 and 1 to reduce strain at failure of a double-twisted wire (as used by [Bertrand2008]). [-]

lambdaF(=1.0)

Parameter between 0 and 1 introduced by [Thoeni2013] which defines where the shifted force-displacement curve intersects with the new initial stiffness: F^*=\lambda_F F_{\text{elastic}}. [-]

lambdak(=0.73)

Parameter between 0 and 1 to compute the elastic stiffness of a double-twisted wire (as used by [Bertrand2008]): k^D=2(\lambda_k k_h + (1-\lambda_k)k^S). [-]

lambdau(=0.2)

Parameter between 0 and 1 introduced by [Thoeni2013] which defines the maximum shift of the force-displacement curve in order to take an additional initial elongation (e.g. wire distortion/imperfections, slipping, system flexibility) into account: \Delta l^*=\lambda_u l_0 \text{rnd(seed)}. [-]

newAssocState() → State

Return new State instance, which is associated with this Material. Some materials have special requirement on Body::state type and calling this function when the body is created will ensure that they match. (This is done automatically if you use utils.sphere, … functions from python).

poisson(=.25)

Poisson’s ratio or the ratio between shear and normal stiffness [-]. It has different meanings depending on the Ip functor.

seed(=12345)

Integer used to initialize the random number generator for the calculation of the distortion. If the integer is equal to 0 a internal seed number based on the time is computed. [-]

strainStressValues(=uninitalized)

Piecewise linear definition of the stress-strain curve by set of points (strain[-]>0,stress[Pa]>0) for one single wire. Tension only is considered and the point (0,0) is not needed! NOTE: Vector needs to be initialized!

strainStressValuesDT(=uninitalized)

Piecewise linear definition of the stress-strain curve by set of points (strain[-]>0,stress[Pa]>0) for the double twist. Tension only is considered and the point (0,0) is not needed! If this value is given the calculation will be based on two different stress-strain curves without considering the parameter introduced by [Bertrand2008] (see [Thoeni2013]).

type

Three different types are considered:

0 Corresponds to Bertrand’s approach (see [Bertrand2008]): only one stress-strain curve is used
1 New approach: two separate stress-strain curves can be used (see [Thoeni2013])
2 New approach with stochastically distorted contact model: two separate stress-strain curves with changed initial stiffness and horizontal shift (shift is random if \text{seed}\geq0, for more details see [Thoeni2013])

By default the type is 0.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

young(=1e9)

elastic modulus [Pa]. It has different meanings depending on the Ip functor.

Bound

digraph Bound {
        rankdir=RL;
        margin=.2;
        "Bound" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Bound"];
        "Aabb" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Aabb"];
        "Aabb" -> "Bound" [arrowsize=0.5,style="setlinewidth(0.5)"];
}

class yade.wrapper.Bound(inherits Serializable)

Object bounding part of space taken by associated body; might be larger, used to optimalize collision detection

color(=Vector3r(1, 1, 1))

Color for rendering this object

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

lastUpdateIter(=0)

record iteration of last reference position update (auto-updated)

max(=Vector3r(NaN, NaN, NaN))

Upper corner of box containing this bound (and the Body as well)

min(=Vector3r(NaN, NaN, NaN))

Lower corner of box containing this bound (and the Body as well)

refPos(=Vector3r(NaN, NaN, NaN))

Reference position, updated at current body position each time the bound dispatcher update bounds (auto-updated)

sweepLength(=0)

The length used to increase the bounding boxe size, can be adjusted on the basis of previous displacement if BoundDispatcher::targetInterv>0. (auto-updated)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Aabb(inherits Bound → Serializable)

Axis-aligned bounding box, for use with InsertionSortCollider. (This class is quasi-redundant since min,max are already contained in Bound itself. That might change at some point, though.)

color(=Vector3r(1, 1, 1))

Color for rendering this object

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

lastUpdateIter(=0)

record iteration of last reference position update (auto-updated)

max(=Vector3r(NaN, NaN, NaN))

Upper corner of box containing this bound (and the Body as well)

min(=Vector3r(NaN, NaN, NaN))

Lower corner of box containing this bound (and the Body as well)

refPos(=Vector3r(NaN, NaN, NaN))

Reference position, updated at current body position each time the bound dispatcher update bounds (auto-updated)

sweepLength(=0)

The length used to increase the bounding boxe size, can be adjusted on the basis of previous displacement if BoundDispatcher::targetInterv>0. (auto-updated)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

Interactions

Interaction

class yade.wrapper.Interaction(inherits Serializable)

Interaction between pair of bodies.

cellDist

Distance of bodies in cell size units, if using periodic boundary conditions; id2 is shifted by this number of cells from its State::pos coordinates for this interaction to exist. Assigned by the collider.

Warning

(internal) cellDist must survive Interaction::reset(), it is only initialized in ctor. Interaction that was cancelled by the constitutive law, was reset() and became only potential must have thepriod information if the geometric functor again makes it real. Good to know after few days of debugging that :-)

dict() → dict

Return dictionary of attributes.

geom(=uninitalized)

Geometry part of the interaction.

id1(=0)

Id of the first body in this interaction.

id2(=0)

Id of the second body in this interaction.

isActive

True if this interaction is active. Otherwise the forces from this interaction will not be taken into account. True by default.

isReal

True if this interaction has both geom and phys; False otherwise.

iterBorn(=-1)

Step number at which the interaction was added to simulation.

iterMadeReal(=-1)

Step number at which the interaction was fully (in the sense of geom and phys) created. (Should be touched only by IPhysDispatcher and InteractionLoop, therefore they are made friends of Interaction

phys(=uninitalized)

Physical (material) part of the interaction.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

IGeom

digraph IGeom {
        rankdir=RL;
        margin=.2;
        "IGeom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.IGeom"];
        "ScGeom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.ScGeom"];
        "ScGeom" -> "GenericSpheresContact" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "L6Geom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.L6Geom"];
        "L6Geom" -> "L3Geom" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "ScGridCoGeom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.ScGridCoGeom"];
        "ScGridCoGeom" -> "ScGeom6D" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "TTetraGeom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.TTetraGeom"];
        "TTetraGeom" -> "IGeom" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "CylScGeom6D" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.CylScGeom6D"];
        "CylScGeom6D" -> "ScGeom6D" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "ScGeom6D" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.ScGeom6D"];
        "ScGeom6D" -> "ScGeom" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "GenericSpheresContact" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.GenericSpheresContact"];
        "GenericSpheresContact" -> "IGeom" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "GridNodeGeom6D" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.GridNodeGeom6D"];
        "GridNodeGeom6D" -> "ScGeom6D" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "TTetraSimpleGeom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.TTetraSimpleGeom"];
        "TTetraSimpleGeom" -> "IGeom" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "PolyhedraGeom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.PolyhedraGeom"];
        "PolyhedraGeom" -> "IGeom" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "CylScGeom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.CylScGeom"];
        "CylScGeom" -> "ScGeom" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "L3Geom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.L3Geom"];
        "L3Geom" -> "GenericSpheresContact" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "GridCoGridCoGeom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.GridCoGridCoGeom"];
        "GridCoGridCoGeom" -> "ScGeom" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "ChCylGeom6D" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.ChCylGeom6D"];
        "ChCylGeom6D" -> "ScGeom6D" [arrowsize=0.5,style="setlinewidth(0.5)"];
}

class yade.wrapper.IGeom(inherits Serializable)

Geometrical configuration of interaction

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.ChCylGeom6D(inherits ScGeom6D → ScGeom → GenericSpheresContact → IGeom → Serializable)

Test

bending(=Vector3r::Zero())

Bending at contact as a vector defining axis of rotation and angle (angle=norm).

contactPoint(=uninitalized)

some reference point for the interaction (usually in the middle). (auto-computed)

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

incidentVel((Interaction)i[, (bool)avoidGranularRatcheting=True]) → Vector3

Return incident velocity of the interaction (see also Ig2_Sphere_Sphere_ScGeom.avoidGranularRatcheting for explanation of the ratcheting argument).

initialOrientation1(=Quaternionr(1.0, 0.0, 0.0, 0.0))

Orientation of body 1 one at initialisation time (auto-updated)

initialOrientation2(=Quaternionr(1.0, 0.0, 0.0, 0.0))

Orientation of body 2 one at initialisation time (auto-updated)

normal(=uninitalized)

Unit vector oriented along the interaction, from particle #1, towards particle #2. (auto-updated)

penetrationDepth(=NaN)

Penetration distance of spheres (positive if overlapping)

refR1(=uninitalized)

Reference radius of particle #1. (auto-computed)

refR2(=uninitalized)

Reference radius of particle #2. (auto-computed)

relAngVel((Interaction)i) → Vector3

Return relative angular velocity of the interaction.

shearInc(=Vector3r::Zero())

Shear displacement increment in the last step

twist(=0)

Elastic twist angle (around normal axis) of the contact.

twistCreep(=Quaternionr(1.0, 0.0, 0.0, 0.0))

Stored creep, substracted from total relative rotation for computation of elastic moment (auto-updated)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.CylScGeom(inherits ScGeom → GenericSpheresContact → IGeom → Serializable)

Geometry of a cylinder-sphere contact.

contactPoint(=uninitalized)

some reference point for the interaction (usually in the middle). (auto-computed)

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

end(=Vector3r::Zero())

position of 2nd node (auto-updated)

id3(=0)

id of next chained cylinder (auto-updated)

incidentVel((Interaction)i[, (bool)avoidGranularRatcheting=True]) → Vector3

Return incident velocity of the interaction (see also Ig2_Sphere_Sphere_ScGeom.avoidGranularRatcheting for explanation of the ratcheting argument).

isDuplicate(=0)

this flag is turned true (1) automatically if the contact is shared between two chained cylinders. A duplicated interaction will be skipped once by the constitutive law, so that only one contact at a time is effective. If isDuplicate=2, it means one of the two duplicates has no longer geometric interaction, and should be erased by the constitutive laws.

normal(=uninitalized)

Unit vector oriented along the interaction, from particle #1, towards particle #2. (auto-updated)

onNode(=false)

contact on node?

penetrationDepth(=NaN)

Penetration distance of spheres (positive if overlapping)

refR1(=uninitalized)

Reference radius of particle #1. (auto-computed)

refR2(=uninitalized)

Reference radius of particle #2. (auto-computed)

relAngVel((Interaction)i) → Vector3

Return relative angular velocity of the interaction.

relPos(=0)

position of the contact on the cylinder (0: node-, 1:node+) (auto-updated)

shearInc(=Vector3r::Zero())

Shear displacement increment in the last step

start(=Vector3r::Zero())

position of 1st node (auto-updated)

trueInt(=-1)

Defines the body id of the cylinder where the contact is real, when CylScGeom::isDuplicate>0.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.CylScGeom6D(inherits ScGeom6D → ScGeom → GenericSpheresContact → IGeom → Serializable)

Class representing geometry of two bodies in contact. The contact has 6 DOFs (normal, 2×shear, twist, 2xbending) and uses ScGeom incremental algorithm for updating shear.

bending(=Vector3r::Zero())

Bending at contact as a vector defining axis of rotation and angle (angle=norm).

contactPoint(=uninitalized)

some reference point for the interaction (usually in the middle). (auto-computed)

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

end(=Vector3r::Zero())

position of 2nd node (auto-updated)

id3(=0)

id of next chained cylinder (auto-updated)

incidentVel((Interaction)i[, (bool)avoidGranularRatcheting=True]) → Vector3

Return incident velocity of the interaction (see also Ig2_Sphere_Sphere_ScGeom.avoidGranularRatcheting for explanation of the ratcheting argument).

initialOrientation1(=Quaternionr(1.0, 0.0, 0.0, 0.0))

Orientation of body 1 one at initialisation time (auto-updated)

initialOrientation2(=Quaternionr(1.0, 0.0, 0.0, 0.0))

Orientation of body 2 one at initialisation time (auto-updated)

isDuplicate(=0)

this flag is turned true (1) automatically if the contact is shared between two chained cylinders. A duplicated interaction will be skipped once by the constitutive law, so that only one contact at a time is effective. If isDuplicate=2, it means one of the two duplicates has no longer geometric interaction, and should be erased by the constitutive laws.

normal(=uninitalized)

Unit vector oriented along the interaction, from particle #1, towards particle #2. (auto-updated)

onNode(=false)

contact on node?

penetrationDepth(=NaN)

Penetration distance of spheres (positive if overlapping)

refR1(=uninitalized)

Reference radius of particle #1. (auto-computed)

refR2(=uninitalized)

Reference radius of particle #2. (auto-computed)

relAngVel((Interaction)i) → Vector3

Return relative angular velocity of the interaction.

relPos(=0)

position of the contact on the cylinder (0: node-, 1:node+) (auto-updated)

shearInc(=Vector3r::Zero())

Shear displacement increment in the last step

start(=Vector3r::Zero())

position of 1st node (auto-updated)

trueInt(=-1)

Defines the body id of the cylinder where the contact is real, when CylScGeom::isDuplicate>0.

twist(=0)

Elastic twist angle (around normal axis) of the contact.

twistCreep(=Quaternionr(1.0, 0.0, 0.0, 0.0))

Stored creep, substracted from total relative rotation for computation of elastic moment (auto-updated)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.GenericSpheresContact(inherits IGeom → Serializable)

Class uniting ScGeom and L3Geom, for the purposes of GlobalStiffnessTimeStepper. (It might be removed in the future). Do not use this class directly.

contactPoint(=uninitalized)

some reference point for the interaction (usually in the middle). (auto-computed)

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

normal(=uninitalized)

Unit vector oriented along the interaction, from particle #1, towards particle #2. (auto-updated)

refR1(=uninitalized)

Reference radius of particle #1. (auto-computed)

refR2(=uninitalized)

Reference radius of particle #2. (auto-computed)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.GridCoGridCoGeom(inherits ScGeom → GenericSpheresContact → IGeom → Serializable)

Geometry of a GridConnection-GridConnection contact.

contactPoint(=uninitalized)

some reference point for the interaction (usually in the middle). (auto-computed)

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

incidentVel((Interaction)i[, (bool)avoidGranularRatcheting=True]) → Vector3

Return incident velocity of the interaction (see also Ig2_Sphere_Sphere_ScGeom.avoidGranularRatcheting for explanation of the ratcheting argument).

normal(=uninitalized)

Unit vector oriented along the interaction, from particle #1, towards particle #2. (auto-updated)

penetrationDepth(=NaN)

Penetration distance of spheres (positive if overlapping)

refR1(=uninitalized)

Reference radius of particle #1. (auto-computed)

refR2(=uninitalized)

Reference radius of particle #2. (auto-computed)

relAngVel((Interaction)i) → Vector3

Return relative angular velocity of the interaction.

relPos1(=0)

position of the contact on the first connection (0: node-, 1:node+) (auto-updated)

relPos2(=0)

position of the contact on the first connection (0: node-, 1:node+) (auto-updated)

shearInc(=Vector3r::Zero())

Shear displacement increment in the last step

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.GridNodeGeom6D(inherits ScGeom6D → ScGeom → GenericSpheresContact → IGeom → Serializable)

Geometry of a GridNode-GridNode contact. Inherits almost everything from ScGeom6D.

bending(=Vector3r::Zero())

Bending at contact as a vector defining axis of rotation and angle (angle=norm).

connectionBody(=uninitalized)

Reference to the GridNode Body who is linking the two GridNodes.

contactPoint(=uninitalized)

some reference point for the interaction (usually in the middle). (auto-computed)

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

incidentVel((Interaction)i[, (bool)avoidGranularRatcheting=True]) → Vector3

Return incident velocity of the interaction (see also Ig2_Sphere_Sphere_ScGeom.avoidGranularRatcheting for explanation of the ratcheting argument).

initialOrientation1(=Quaternionr(1.0, 0.0, 0.0, 0.0))

Orientation of body 1 one at initialisation time (auto-updated)

initialOrientation2(=Quaternionr(1.0, 0.0, 0.0, 0.0))

Orientation of body 2 one at initialisation time (auto-updated)

normal(=uninitalized)

Unit vector oriented along the interaction, from particle #1, towards particle #2. (auto-updated)

penetrationDepth(=NaN)

Penetration distance of spheres (positive if overlapping)

refR1(=uninitalized)

Reference radius of particle #1. (auto-computed)

refR2(=uninitalized)

Reference radius of particle #2. (auto-computed)

relAngVel((Interaction)i) → Vector3

Return relative angular velocity of the interaction.

shearInc(=Vector3r::Zero())

Shear displacement increment in the last step

twist(=0)

Elastic twist angle (around normal axis) of the contact.

twistCreep(=Quaternionr(1.0, 0.0, 0.0, 0.0))

Stored creep, substracted from total relative rotation for computation of elastic moment (auto-updated)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.L3Geom(inherits GenericSpheresContact → IGeom → Serializable)

Geometry of contact given in local coordinates with 3 degress of freedom: normal and two in shear plane. [experimental]

F(=Vector3r::Zero())

Applied force in local coordinates [debugging only, will be removed]

contactPoint(=uninitalized)

some reference point for the interaction (usually in the middle). (auto-computed)

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

normal(=uninitalized)

Unit vector oriented along the interaction, from particle #1, towards particle #2. (auto-updated)

refR1(=uninitalized)

Reference radius of particle #1. (auto-computed)

refR2(=uninitalized)

Reference radius of particle #2. (auto-computed)

trsf(=Matrix3r::Identity())

Transformation (rotation) from global to local coordinates. (the translation part is in GenericSpheresContact.contactPoint)

u(=Vector3r::Zero())

Displacement components, in local coordinates. (auto-updated)

u0

Zero displacement value; u0 should be always subtracted from the geometrical displacement u computed by appropriate IGeomFunctor, resulting in u. This value can be changed for instance

  1. by IGeomFunctor, e.g. to take in account large shear displacement value unrepresentable by underlying geomeric algorithm based on quaternions)
  2. by LawFunctor, to account for normal equilibrium position different from zero geometric overlap (set once, just after the interaction is created)
  3. by LawFunctor to account for plastic slip.

Note

Never set an absolute value of u0, only increment, since both IGeomFunctor and LawFunctor use it. If you need to keep track of plastic deformation, store it in IPhys isntead (this might be changed: have u0 for LawFunctor exclusively, and a separate value stored (when that is needed) inside classes deriving from L3Geom.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.L6Geom(inherits L3Geom → GenericSpheresContact → IGeom → Serializable)

Geometric of contact in local coordinates with 6 degrees of freedom. [experimental]

F(=Vector3r::Zero())

Applied force in local coordinates [debugging only, will be removed]

contactPoint(=uninitalized)

some reference point for the interaction (usually in the middle). (auto-computed)

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

normal(=uninitalized)

Unit vector oriented along the interaction, from particle #1, towards particle #2. (auto-updated)

phi(=Vector3r::Zero())

Rotation components, in local coordinates. (auto-updated)

phi0(=Vector3r::Zero())

Zero rotation, should be always subtracted from phi to get the value. See L3Geom.u0.

refR1(=uninitalized)

Reference radius of particle #1. (auto-computed)

refR2(=uninitalized)

Reference radius of particle #2. (auto-computed)

trsf(=Matrix3r::Identity())

Transformation (rotation) from global to local coordinates. (the translation part is in GenericSpheresContact.contactPoint)

u(=Vector3r::Zero())

Displacement components, in local coordinates. (auto-updated)

u0

Zero displacement value; u0 should be always subtracted from the geometrical displacement u computed by appropriate IGeomFunctor, resulting in u. This value can be changed for instance

  1. by IGeomFunctor, e.g. to take in account large shear displacement value unrepresentable by underlying geomeric algorithm based on quaternions)
  2. by LawFunctor, to account for normal equilibrium position different from zero geometric overlap (set once, just after the interaction is created)
  3. by LawFunctor to account for plastic slip.

Note

Never set an absolute value of u0, only increment, since both IGeomFunctor and LawFunctor use it. If you need to keep track of plastic deformation, store it in IPhys isntead (this might be changed: have u0 for LawFunctor exclusively, and a separate value stored (when that is needed) inside classes deriving from L3Geom.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.PolyhedraGeom(inherits IGeom → Serializable)

Geometry of interaction between 2 vector, including volumetric characteristics

contactPoint(=Vector3r::Zero())

Contact point (global coords), centriod of the overlapping polyhedron

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

equivalentCrossSection(=NaN)

Cross-section area of the overlap (perpendicular to the normal) - not used

equivalentPenetrationDepth(=NaN)

volume / equivalentCrossSection - not used

normal(=Vector3r::Zero())

Normal direction of the interaction

orthonormal_axis(=Vector3r::Zero())

penetrationVolume(=NaN)

Volume of overlap [m³]

shearInc(=Vector3r::Zero())

Shear displacement increment in the last step

twist_axis(=Vector3r::Zero())

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.ScGeom(inherits GenericSpheresContact → IGeom → Serializable)

Class representing geometry of a contact point between two bodies. It is more general than sphere-sphere contact even though it is primarily focused on spheres interactions (reason for the ‘Sc’ namming); it is also used for representing contacts of a Sphere with non-spherical bodies (Facet, Plane, Box, ChainedCylinder), or between two non-spherical bodies (ChainedCylinder). The contact has 3 DOFs (normal and 2×shear) and uses incremental algorithm for updating shear.

We use symbols \vec{x}, \vec{v}, \vec{\omega} respectively for position, linear and angular velocities (all in global coordinates) and r for particles radii; subscripted with 1 or 2 to distinguish 2 spheres in contact. Then we define branch length and unit contact normal

l=||\vec{x}_2-\vec{x}_1||, \vec{n}=\frac{\vec{x}_2-\vec{x}_1}{||\vec{x}_2-\vec{x}_1||}

The relative velocity of the spheres is then

\vec{v}_{12}=\frac{r_1+r_2}{l}(\vec{v}_2-\vec{v}_1) -(r_2 \vec{\omega}_2 + r_1\vec{\omega}_1)\times\vec{n}

where the fraction multiplying translational velocities is to make the definition objective and avoid ratcheting effects (see Ig2_Sphere_Sphere_ScGeom.avoidGranularRatcheting). The shear component is

\vec{v}_{12}^s=\vec{v}_{12}-(\vec{n}\cdot\vec{v}_{12})\vec{n}.

Tangential displacement increment over last step then reads

\Delta\vec{x}_{12}^s=\Delta t \vec{v}_{12}^s.

contactPoint(=uninitalized)

some reference point for the interaction (usually in the middle). (auto-computed)

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

incidentVel((Interaction)i[, (bool)avoidGranularRatcheting=True]) → Vector3

Return incident velocity of the interaction (see also Ig2_Sphere_Sphere_ScGeom.avoidGranularRatcheting for explanation of the ratcheting argument).

normal(=uninitalized)

Unit vector oriented along the interaction, from particle #1, towards particle #2. (auto-updated)

penetrationDepth(=NaN)

Penetration distance of spheres (positive if overlapping)

refR1(=uninitalized)

Reference radius of particle #1. (auto-computed)

refR2(=uninitalized)

Reference radius of particle #2. (auto-computed)

relAngVel((Interaction)i) → Vector3

Return relative angular velocity of the interaction.

shearInc(=Vector3r::Zero())

Shear displacement increment in the last step

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.ScGeom6D(inherits ScGeom → GenericSpheresContact → IGeom → Serializable)

Class representing geometry of two bodies in contact. The contact has 6 DOFs (normal, 2×shear, twist, 2xbending) and uses ScGeom incremental algorithm for updating shear.

bending(=Vector3r::Zero())

Bending at contact as a vector defining axis of rotation and angle (angle=norm).

contactPoint(=uninitalized)

some reference point for the interaction (usually in the middle). (auto-computed)

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

incidentVel((Interaction)i[, (bool)avoidGranularRatcheting=True]) → Vector3

Return incident velocity of the interaction (see also Ig2_Sphere_Sphere_ScGeom.avoidGranularRatcheting for explanation of the ratcheting argument).

initialOrientation1(=Quaternionr(1.0, 0.0, 0.0, 0.0))

Orientation of body 1 one at initialisation time (auto-updated)

initialOrientation2(=Quaternionr(1.0, 0.0, 0.0, 0.0))

Orientation of body 2 one at initialisation time (auto-updated)

normal(=uninitalized)

Unit vector oriented along the interaction, from particle #1, towards particle #2. (auto-updated)

penetrationDepth(=NaN)

Penetration distance of spheres (positive if overlapping)

refR1(=uninitalized)

Reference radius of particle #1. (auto-computed)

refR2(=uninitalized)

Reference radius of particle #2. (auto-computed)

relAngVel((Interaction)i) → Vector3

Return relative angular velocity of the interaction.

shearInc(=Vector3r::Zero())

Shear displacement increment in the last step

twist(=0)

Elastic twist angle (around normal axis) of the contact.

twistCreep(=Quaternionr(1.0, 0.0, 0.0, 0.0))

Stored creep, substracted from total relative rotation for computation of elastic moment (auto-updated)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.ScGridCoGeom(inherits ScGeom6D → ScGeom → GenericSpheresContact → IGeom → Serializable)

Geometry of a GridConnection-Sphere contact.

bending(=Vector3r::Zero())

Bending at contact as a vector defining axis of rotation and angle (angle=norm).

contactPoint(=uninitalized)

some reference point for the interaction (usually in the middle). (auto-computed)

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

id3(=0)

id of the first GridNode. (auto-updated)

id4(=0)

id of the second GridNode. (auto-updated)

incidentVel((Interaction)i[, (bool)avoidGranularRatcheting=True]) → Vector3

Return incident velocity of the interaction (see also Ig2_Sphere_Sphere_ScGeom.avoidGranularRatcheting for explanation of the ratcheting argument).

initialOrientation1(=Quaternionr(1.0, 0.0, 0.0, 0.0))

Orientation of body 1 one at initialisation time (auto-updated)

initialOrientation2(=Quaternionr(1.0, 0.0, 0.0, 0.0))

Orientation of body 2 one at initialisation time (auto-updated)

isDuplicate(=0)

this flag is turned true (1) automatically if the contact is shared between two Connections. A duplicated interaction will be skipped once by the constitutive law, so that only one contact at a time is effective. If isDuplicate=2, it means one of the two duplicates has no longer geometric interaction, and should be erased by the constitutive laws.

normal(=uninitalized)

Unit vector oriented along the interaction, from particle #1, towards particle #2. (auto-updated)

penetrationDepth(=NaN)

Penetration distance of spheres (positive if overlapping)

refR1(=uninitalized)

Reference radius of particle #1. (auto-computed)

refR2(=uninitalized)

Reference radius of particle #2. (auto-computed)

relAngVel((Interaction)i) → Vector3

Return relative angular velocity of the interaction.

relPos(=0)

position of the contact on the connection (0: node-, 1:node+) (auto-updated)

shearInc(=Vector3r::Zero())

Shear displacement increment in the last step

trueInt(=-1)

Defines the body id of the GridConnection where the contact is real, when ScGridCoGeom::isDuplicate>0.

twist(=0)

Elastic twist angle (around normal axis) of the contact.

twistCreep(=Quaternionr(1.0, 0.0, 0.0, 0.0))

Stored creep, substracted from total relative rotation for computation of elastic moment (auto-updated)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.TTetraGeom(inherits IGeom → Serializable)

Geometry of interaction between 2 tetrahedra, including volumetric characteristics

contactPoint(=uninitalized)

Contact point (global coords)

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

equivalentCrossSection(=NaN)

Cross-section of the overlap (perpendicular to the axis of least inertia

equivalentPenetrationDepth(=NaN)

??

maxPenetrationDepthA(=NaN)

??

maxPenetrationDepthB(=NaN)

??

normal(=uninitalized)

Normal of the interaction, directed in the sense of least inertia of the overlap volume

penetrationVolume(=NaN)

Volume of overlap [m³]

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.TTetraSimpleGeom(inherits IGeom → Serializable)

EXPERIMENTAL. Geometry of interaction between 2 tetrahedra

contactPoint(=uninitalized)

Contact point (global coords)

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

flag(=0)

TODO

normal(=uninitalized)

Normal of the interaction TODO

penetrationVolume(=NaN)

Volume of overlap [m³]

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

IPhys

digraph IPhys {
        rankdir=RL;
        margin=.2;
        "IPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.IPhys"];
        "MindlinCapillaryPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.MindlinCapillaryPhys"];
        "MindlinCapillaryPhys" -> "MindlinPhys" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "InelastCohFrictPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.InelastCohFrictPhys"];
        "InelastCohFrictPhys" -> "FrictPhys" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "FrictPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.FrictPhys"];
        "FrictPhys" -> "NormShearPhys" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "PolyhedraPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.PolyhedraPhys"];
        "PolyhedraPhys" -> "FrictPhys" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "ViscElPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.ViscElPhys"];
        "ViscElPhys" -> "FrictPhys" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "LudingPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.LudingPhys"];
        "LudingPhys" -> "FrictPhys" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "NormalInelasticityPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.NormalInelasticityPhys"];
        "NormalInelasticityPhys" -> "FrictPhys" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "MindlinPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.MindlinPhys"];
        "MindlinPhys" -> "FrictPhys" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "NormShearPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.NormShearPhys"];
        "NormShearPhys" -> "NormPhys" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "CapillaryPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.CapillaryPhys"];
        "CapillaryPhys" -> "FrictPhys" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "WirePhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.WirePhys"];
        "WirePhys" -> "FrictPhys" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "CohFrictPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.CohFrictPhys"];
        "CohFrictPhys" -> "FrictPhys" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "CpmPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.CpmPhys"];
        "CpmPhys" -> "NormShearPhys" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "ViscoFrictPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.ViscoFrictPhys"];
        "ViscoFrictPhys" -> "FrictPhys" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "ViscElCapPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.ViscElCapPhys"];
        "ViscElCapPhys" -> "ViscElPhys" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "BubblePhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.BubblePhys"];
        "BubblePhys" -> "IPhys" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "NormPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.NormPhys"];
        "NormPhys" -> "IPhys" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "FrictViscoPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.FrictViscoPhys"];
        "FrictViscoPhys" -> "FrictPhys" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "JCFpmPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.JCFpmPhys"];
        "JCFpmPhys" -> "NormShearPhys" [arrowsize=0.5,style="setlinewidth(0.5)"];
}

class yade.wrapper.IPhys(inherits Serializable)

Physical (material) properties of interaction.

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.BubblePhys(inherits IPhys → Serializable)

Physics of bubble-bubble interactions, for use with BubbleMat

Dmax(=NaN)

Maximum penetrationDepth of the bubbles before the force displacement curve changes to an artificial exponential curve. Setting this value will have no effect. See Law2_ScGeom_BubblePhys_Bubble::pctMaxForce for more information

static computeForce((float)arg1, (float)arg2, (float)arg3, (int)arg4, (float)arg5, (float)arg6, (float)arg7, (BubblePhys)arg8) → float :

Computes the normal force acting between the two interacting bubbles using the Newton-Rhapson method

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

fN(=NaN)

Contact normal force

newtonIter(=50)

Maximum number of force iterations allowed

newtonTol(=1e-6)

Convergence criteria for force iterations

normalForce(=Vector3r::Zero())

Normal force

rAvg(=NaN)

Average radius of the two interacting bubbles

surfaceTension(=NaN)

Surface tension of the surrounding liquid

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.CapillaryPhys(inherits FrictPhys → NormShearPhys → NormPhys → IPhys → Serializable)

Physics (of interaction) for Law2_ScGeom_CapillaryPhys_Capillarity.

Delta1(=0.)

Defines the surface area wetted by the meniscus on the smallest grains of radius R1 (R1<R2)

Delta2(=0.)

Defines the surface area wetted by the meniscus on the biggest grains of radius R2 (R1<R2)

capillaryPressure(=0.)

Value of the capillary pressure Uc. Defined as Ugas-Uliquid, obtained from corresponding Law2 parameter

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

fCap(=Vector3r::Zero())

Capillary force produced by the presence of the meniscus. This is the force acting on particle #2

fusionNumber(=0.)

Indicates the number of meniscii that overlap with this one

isBroken(=false)

Might be set to true by the user to make liquid bridge inactive (capillary force is zero)

kn(=0)

Normal stiffness

ks(=0)

Shear stiffness

meniscus(=false)

True when a meniscus with a non-zero liquid volume (vMeniscus) has been computed for this interaction

normalForce(=Vector3r::Zero())

Normal force after previous step (in global coordinates).

shearForce(=Vector3r::Zero())

Shear force after previous step (in global coordinates).

tangensOfFrictionAngle(=NaN)

tan of angle of friction

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

vMeniscus(=0.)

Volume of the meniscus

class yade.wrapper.CohFrictPhys(inherits FrictPhys → NormShearPhys → NormPhys → IPhys → Serializable)
cohesionBroken(=true)

is cohesion active? Set to false at the creation of a cohesive contact, and set to true when a fragile contact is broken

cohesionDisablesFriction(=false)

is shear strength the sum of friction and adhesion or only adhesion?

creep_viscosity(=-1)

creep viscosity [Pa.s/m].

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

fragile(=true)

do cohesion disappear when contact strength is exceeded?

initCohesion(=false)

Initialize the cohesive behaviour with current state as equilibrium state (same as Ip2_CohFrictMat_CohFrictMat_CohFrictPhys::setCohesionNow but acting on only one interaction)

kn(=0)

Normal stiffness

kr(=0)

rotational stiffness [N.m/rad]

ks(=0)

Shear stiffness

ktw(=0)

twist stiffness [N.m/rad]

maxRollPl(=0.0)

Coefficient of rolling friction (negative means elastic).

maxTwistPl(=0.0)

Coefficient of twisting friction (negative means elastic).

momentRotationLaw(=false)

use bending/twisting moment at contacts. See Law2_ScGeom6D_CohFrictPhys_CohesionMoment::always_use_moment_law for details.

moment_bending(=Vector3r(0, 0, 0))

Bending moment

moment_twist(=Vector3r(0, 0, 0))

Twist moment

normalAdhesion(=0)

tensile strength

normalForce(=Vector3r::Zero())

Normal force after previous step (in global coordinates).

shearAdhesion(=0)

cohesive part of the shear strength (a frictional term might be added depending on CohFrictPhys::cohesionDisablesFriction)

shearForce(=Vector3r::Zero())

Shear force after previous step (in global coordinates).

tangensOfFrictionAngle(=NaN)

tan of angle of friction

unp(=0)

plastic normal displacement, only used for tensile behaviour and if CohFrictPhys::fragile =false.

unpMax(=0)

maximum value of plastic normal displacement (counted positively), after that the interaction breaks even if CohFrictPhys::fragile =false. A negative value (i.e. -1) means no maximum.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.CpmPhys(inherits NormShearPhys → NormPhys → IPhys → Serializable)

Representation of a single interaction of the Cpm type: storage for relevant parameters.

Evolution of the contact is governed by Law2_ScGeom_CpmPhys_Cpm, that includes damage effects and chages of parameters inside CpmPhys. See cpm-model for details.

E(=NaN)

normal modulus (stiffness / crossSection) [Pa]

Fn

Magnitude of normal force (auto-updated)

Fs

Magnitude of shear force (auto-updated)

G(=NaN)

shear modulus [Pa]

crossSection(=NaN)

equivalent cross-section associated with this contact [m²]

cummBetaCount = 0
cummBetaIter = 0
damLaw(=1)

Law for softening part of uniaxial tension. 0 for linear, 1 for exponential (default)

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

dmgOverstress(=0)

damage viscous overstress (at previous step or at current step)

dmgRateExp(=0)

exponent in the rate-dependent damage evolution

dmgStrain(=0)

damage strain (at previous or current step)

dmgTau(=-1)

characteristic time for damage (if non-positive, the law without rate-dependence is used)

epsCrackOnset(=NaN)

strain at which the material starts to behave non-linearly

epsFracture(=NaN)

strain at which the bond is fully broken [-]

epsN

Current normal strain (auto-updated)

epsNPl

normal plastic strain (initially zero) (auto-updated)

epsT

Current shear strain (auto-updated)

epsTPl

shear plastic strain (initially zero) (auto-updated)

static funcG((float)kappaD, (float)epsCrackOnset, (float)epsFracture[, (bool)neverDamage=False[, (int)damLaw=1]]) → float :

Damage evolution law, evaluating the \omega parameter. \kappa_D is historically maximum strain, epsCrackOnset (\varepsilon_0) = CpmPhys.epsCrackOnset, epsFracture = CpmPhys.epsFracture; if neverDamage is True, the value returned will always be 0 (no damage). TODO

static funcGInv((float)omega, (float)epsCrackOnset, (float)epsFracture[, (bool)neverDamage=False[, (int)damLaw=1]]) → float :

Inversion of damage evolution law, evaluating the \kappa_D parameter. \omega is damage, for other parameters see funcG function

isCohesive(=false)

if not cohesive, interaction is deleted when distance is greater than zero.

isoPrestress(=0)

“prestress” of this link (used to simulate isotropic stress)

kappaD

Up to now maximum normal strain (semi-norm), non-decreasing in time (auto-updated)

kn(=0)

Normal stiffness

ks(=0)

Shear stiffness

neverDamage(=false)

the damage evolution function will always return virgin state

normalForce(=Vector3r::Zero())

Normal force after previous step (in global coordinates).

omega

Damage internal variable (auto-updated)

plRateExp(=0)

exponent in the rate-dependent viscoplasticity

plTau(=-1)

characteristic time for viscoplasticity (if non-positive, no rate-dependence for shear)

refLength(=NaN)

initial length of interaction [m]

refPD(=NaN)

initial penetration depth of interaction [m] (used with ScGeom)

relDuctility(=NaN)

Relative ductility of bonds in normal direction

relResidualStrength

Relative residual strength (auto-updated)

setDamage((float)arg2) → None

TODO

setRelResidualStrength((float)arg2) → None

TODO

shearForce(=Vector3r::Zero())

Shear force after previous step (in global coordinates).

sigmaN

Current normal stress (auto-updated)

sigmaT

Current shear stress (auto-updated)

tanFrictionAngle(=NaN)

tangens of internal friction angle [-]

undamagedCohesion(=NaN)

virgin material cohesion [Pa]

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.FrictPhys(inherits NormShearPhys → NormPhys → IPhys → Serializable)

The simple linear elastic-plastic interaction with friction angle, like in the traditional [CundallStrack1979]

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

kn(=0)

Normal stiffness

ks(=0)

Shear stiffness

normalForce(=Vector3r::Zero())

Normal force after previous step (in global coordinates).

shearForce(=Vector3r::Zero())

Shear force after previous step (in global coordinates).

tangensOfFrictionAngle(=NaN)

tan of angle of friction

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.FrictViscoPhys(inherits FrictPhys → NormShearPhys → NormPhys → IPhys → Serializable)

Representation of a single interaction of the FrictViscoPM type, storage for relevant parameters

cn(=NaN)

Normal viscous constant defined as \c_{n}=c_{n,crit}\beta_n.

cn_crit(=NaN)

Normal viscous constant for ctitical damping defined as \c_{n}=C_{n,crit}\beta_n.

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

kn(=0)

Normal stiffness

ks(=0)

Shear stiffness

normalForce(=Vector3r::Zero())

Normal force after previous step (in global coordinates).

normalViscous(=Vector3r::Zero())

Normal viscous component

shearForce(=Vector3r::Zero())

Shear force after previous step (in global coordinates).

tangensOfFrictionAngle(=NaN)

tan of angle of friction

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.InelastCohFrictPhys(inherits FrictPhys → NormShearPhys → NormPhys → IPhys → Serializable)
cohesionBroken(=false)

is cohesion active? will be set false when a fragile contact is broken

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

isBroken(=false)

true if compression plastic fracture achieved

kDam(=0)

Damage coefficient on bending, computed from maximum bending moment reached and pure creep behaviour. Its values will vary between InelastCohFrictPhys::kr and InelastCohFrictPhys::kRCrp .

kRCrp(=0.0)

Bending creep stiffness

kRUnld(=0.0)

Bending plastic unload stiffness

kTCrp(=0.0)

Tension/compression creep stiffness

kTUnld(=0.0)

Tension/compression plastic unload stiffness

kTwCrp(=0.0)

Twist creep stiffness

kTwUnld(=0.0)

Twist plastic unload stiffness

kn(=0)

Normal stiffness

knC(=0)

compression stiffness

knT(=0)

tension stiffness

kr(=0)

bending stiffness

ks(=0)

shear stiffness

ktw(=0)

twist shear stiffness

maxBendMom(=0.0)

Plastic failure bending moment.

maxContract(=0.0)

Plastic failure contraction (shrinkage).

maxCrpRchdB(=Vector3r(0, 0, 0))

maximal bending moment reached on plastic deformation.

maxCrpRchdC(=Vector2r(0, 0))

maximal compression reached on plastic deformation. maxCrpRchdC[0] stores un and maxCrpRchdC[1] stores Fn.

maxCrpRchdT(=Vector2r(0, 0))

maximal extension reached on plastic deformation. maxCrpRchdT[0] stores un and maxCrpRchdT[1] stores Fn.

maxCrpRchdTw(=Vector2r(0, 0))

maximal twist reached on plastic deformation. maxCrpRchdTw[0] stores twist angle and maxCrpRchdTw[1] stores twist moment.

maxElB(=0.0)

Maximum bending elastic moment.

maxElC(=0.0)

Maximum compression elastic force.

maxElT(=0.0)

Maximum tension elastic force.

maxElTw(=0.0)

Maximum twist elastic moment.

maxExten(=0.0)

Plastic failure extension (stretching).

maxTwist(=0.0)

Plastic failure twist angle

moment_bending(=Vector3r(0, 0, 0))

Bending moment

moment_twist(=Vector3r(0, 0, 0))

Twist moment

normalForce(=Vector3r::Zero())

Normal force after previous step (in global coordinates).

onPlastB(=false)

true if plasticity achieved on bending

onPlastC(=false)

true if plasticity achieved on compression

onPlastT(=false)

true if plasticity achieved on traction

onPlastTw(=false)

true if plasticity achieved on twisting

pureCreep(=Vector3r(0, 0, 0))

Pure creep curve, used for comparison in calculation.

shearAdhesion(=0)

Maximum elastic shear force (cohesion).

shearForce(=Vector3r::Zero())

Shear force after previous step (in global coordinates).

tangensOfFrictionAngle(=NaN)

tan of angle of friction

twp(=0)

plastic twist penetration depth describing the equilibrium state.

unp(=0)

plastic normal penetration depth describing the equilibrium state.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.JCFpmPhys(inherits NormShearPhys → NormPhys → IPhys → Serializable)

Representation of a single interaction of the JCFpm type, storage for relevant parameters

FnMax(=0)

positiv value computed from tensile strength (or joint variant) to define the maximum admissible normal force in traction: Fn >= -FnMax. [N]

FsMax(=0)

computed from cohesion (or jointCohesion) to define the maximum admissible tangential force in shear, for Fn=0. [N]

crackJointAperture(=0)

Relative displacement between 2 spheres (in case of a crack it is equivalent of the crack aperture)

crossSection(=0)

crossSection=pi*Rmin^2. [m2]

dict() → dict

Return dictionary of attributes.

dilation(=0)

defines the normal displacement in the joint after sliding treshold. [m]

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

initD(=0)

equilibrium distance for interacting particles. Computed as the interparticular distance at first contact detection.

isBroken(=false)

flag for broken interactions

isCohesive(=false)

If false, particles interact in a frictional way. If true, particles are bonded regarding the given cohesion and tensile strength (or their jointed variants).

isOnJoint(=false)

defined as true when both interacting particles are on joint and are in opposite sides of the joint surface. In this case, mechanical parameters of the interaction are derived from the ‘’joint...’’ material properties of the particles. Furthermore, the normal of the interaction may be re-oriented (see Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM.smoothJoint).

jointCumulativeSliding(=0)

sliding distance for particles interacting on a joint. Used, when is true, to take into account dilatancy due to shearing. [-]

jointNormal(=Vector3r::Zero())

normal direction to the joint, deduced from e.g. .

kn(=0)

Normal stiffness

ks(=0)

Shear stiffness

more(=false)

specifies if the interaction is crossed by more than 3 joints. If true, interaction is deleted (temporary solution).

normalForce(=Vector3r::Zero())

Normal force after previous step (in global coordinates).

shearForce(=Vector3r::Zero())

Shear force after previous step (in global coordinates).

tanDilationAngle(=0)

tangent of the angle defining the dilatancy of the joint surface (auto. computed from JCFpmMat.jointDilationAngle). [-]

tanFrictionAngle(=0)

tangent of Coulomb friction angle for this interaction (auto. computed). [-]

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.LudingPhys(inherits FrictPhys → NormShearPhys → NormPhys → IPhys → Serializable)

IPhys created from LudingMat, for use with Law2_ScGeom_LudingPhys_Basic.

DeltMax(=NaN)

Maximum overlap between particles for a collision

DeltMin(=NaN)

MinimalDelta value of delta

DeltNull(=NaN)

Force free overlap, plastic contact deformation

DeltPMax(=NaN)

Maximum overlap between particles for the limit case

DeltPNull(=NaN)

Max force free overlap, plastic contact deformation

DeltPrev(=NaN)

Previous value of delta

G0(=NaN)

Viscous damping

PhiF(=NaN)

Dimensionless plasticity depth

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

k1(=NaN)

Slope of loading plastic branch

k2(=NaN)

Slope of unloading and reloading elastic branch

kc(=NaN)

Slope of irreversible, tensile adhesive branch

kn(=0)

Normal stiffness

kp(=NaN)

Slope of unloading and reloading limit elastic branch

ks(=0)

Shear stiffness

normalForce(=Vector3r::Zero())

Normal force after previous step (in global coordinates).

shearForce(=Vector3r::Zero())

Shear force after previous step (in global coordinates).

tangensOfFrictionAngle(=NaN)

tan of angle of friction

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.MindlinCapillaryPhys(inherits MindlinPhys → FrictPhys → NormShearPhys → NormPhys → IPhys → Serializable)

Adds capillary physics to Mindlin’s interaction physics.

Delta1(=0.)

Defines the surface area wetted by the meniscus on the smallest grains of radius R1 (R1<R2)

Delta2(=0.)

Defines the surface area wetted by the meniscus on the biggest grains of radius R2 (R1<R2)

Fs(=Vector2r::Zero())

Shear force in local axes (computed incrementally)

adhesionForce(=0.0)

Force of adhesion as predicted by DMT

alpha(=0.0)

Constant coefficient to define contact viscous damping for non-linear elastic force-displacement relationship.

betan(=0.0)

Normal Damping Ratio. Fraction of the viscous damping coefficient (normal direction) equal to \frac{c_{n}}{C_{n,crit}}.

betas(=0.0)

Shear Damping Ratio. Fraction of the viscous damping coefficient (shear direction) equal to \frac{c_{s}}{C_{s,crit}}.

capillaryPressure(=0.)

Value of the capillary pressure Uc. Defined as Ugas-Uliquid, obtained from corresponding Law2 parameter

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

fCap(=Vector3r::Zero())

Capillary Force produces by the presence of the meniscus. This is the force acting on particle #2

fusionNumber(=0.)

Indicates the number of meniscii that overlap with this one

isAdhesive(=false)

bool to identify if the contact is adhesive, that is to say if the contact force is attractive

isBroken(=false)

Might be set to true by the user to make liquid bridge inactive (capillary force is zero)

isSliding(=false)

check if the contact is sliding (useful to calculate the ratio of sliding contacts)

kn(=0)

Normal stiffness

kno(=0.0)

Constant value in the formulation of the normal stiffness

kr(=0.0)

Rotational stiffness

ks(=0)

Shear stiffness

kso(=0.0)

Constant value in the formulation of the tangential stiffness

ktw(=0.0)

Rotational stiffness

maxBendPl(=0.0)

Coefficient to determine the maximum plastic moment to apply at the contact

meniscus(=false)

True when a meniscus with a non-zero liquid volume (vMeniscus) has been computed for this interaction

momentBend(=Vector3r::Zero())

Artificial bending moment to provide rolling resistance in order to account for some degree of interlocking between particles

momentTwist(=Vector3r::Zero())

Artificial twisting moment (no plastic condition can be applied at the moment)

normalForce(=Vector3r::Zero())

Normal force after previous step (in global coordinates).

normalViscous(=Vector3r::Zero())

Normal viscous component

prevU(=Vector3r::Zero())

Previous local displacement; only used with Law2_L3Geom_FrictPhys_HertzMindlin.

radius(=NaN)

Contact radius (only computed with Law2_ScGeom_MindlinPhys_Mindlin::calcEnergy)

shearElastic(=Vector3r::Zero())

Total elastic shear force

shearForce(=Vector3r::Zero())

Shear force after previous step (in global coordinates).

shearViscous(=Vector3r::Zero())

Shear viscous component

tangensOfFrictionAngle(=NaN)

tan of angle of friction

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

usElastic(=Vector3r::Zero())

Total elastic shear displacement (only elastic part)

usTotal(=Vector3r::Zero())

Total elastic shear displacement (elastic+plastic part)

vMeniscus(=0.)

Volume of the meniscus

class yade.wrapper.MindlinPhys(inherits FrictPhys → NormShearPhys → NormPhys → IPhys → Serializable)

Representation of an interaction of the Hertz-Mindlin type.

Fs(=Vector2r::Zero())

Shear force in local axes (computed incrementally)

adhesionForce(=0.0)

Force of adhesion as predicted by DMT

alpha(=0.0)

Constant coefficient to define contact viscous damping for non-linear elastic force-displacement relationship.

betan(=0.0)

Normal Damping Ratio. Fraction of the viscous damping coefficient (normal direction) equal to \frac{c_{n}}{C_{n,crit}}.

betas(=0.0)

Shear Damping Ratio. Fraction of the viscous damping coefficient (shear direction) equal to \frac{c_{s}}{C_{s,crit}}.

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

isAdhesive(=false)

bool to identify if the contact is adhesive, that is to say if the contact force is attractive

isSliding(=false)

check if the contact is sliding (useful to calculate the ratio of sliding contacts)

kn(=0)

Normal stiffness

kno(=0.0)

Constant value in the formulation of the normal stiffness

kr(=0.0)

Rotational stiffness

ks(=0)

Shear stiffness

kso(=0.0)

Constant value in the formulation of the tangential stiffness

ktw(=0.0)

Rotational stiffness

maxBendPl(=0.0)

Coefficient to determine the maximum plastic moment to apply at the contact

momentBend(=Vector3r::Zero())

Artificial bending moment to provide rolling resistance in order to account for some degree of interlocking between particles

momentTwist(=Vector3r::Zero())

Artificial twisting moment (no plastic condition can be applied at the moment)

normalForce(=Vector3r::Zero())

Normal force after previous step (in global coordinates).

normalViscous(=Vector3r::Zero())

Normal viscous component

prevU(=Vector3r::Zero())

Previous local displacement; only used with Law2_L3Geom_FrictPhys_HertzMindlin.

radius(=NaN)

Contact radius (only computed with Law2_ScGeom_MindlinPhys_Mindlin::calcEnergy)

shearElastic(=Vector3r::Zero())

Total elastic shear force

shearForce(=Vector3r::Zero())

Shear force after previous step (in global coordinates).

shearViscous(=Vector3r::Zero())

Shear viscous component

tangensOfFrictionAngle(=NaN)

tan of angle of friction

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

usElastic(=Vector3r::Zero())

Total elastic shear displacement (only elastic part)

usTotal(=Vector3r::Zero())

Total elastic shear displacement (elastic+plastic part)

class yade.wrapper.NormPhys(inherits IPhys → Serializable)

Abstract class for interactions that have normal stiffness.

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

kn(=0)

Normal stiffness

normalForce(=Vector3r::Zero())

Normal force after previous step (in global coordinates).

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.NormShearPhys(inherits NormPhys → IPhys → Serializable)

Abstract class for interactions that have shear stiffnesses, in addition to normal stiffness. This class is used in the PFC3d-style stiffness timestepper.

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

kn(=0)

Normal stiffness

ks(=0)

Shear stiffness

normalForce(=Vector3r::Zero())

Normal force after previous step (in global coordinates).

shearForce(=Vector3r::Zero())

Shear force after previous step (in global coordinates).

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.NormalInelasticityPhys(inherits FrictPhys → NormShearPhys → NormPhys → IPhys → Serializable)

Physics (of interaction) for using Law2_ScGeom6D_NormalInelasticityPhys_NormalInelasticity : with inelastic unloadings

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

forMaxMoment(=1.0)

parameter stored for each interaction, and allowing to compute the maximum value of the exchanged torque : TorqueMax= forMaxMoment * NormalForce

kn(=0)

Normal stiffness

knLower(=0.0)

the stifness corresponding to a virgin load for example

kr(=0.0)

the rolling stiffness of the interaction

ks(=0)

Shear stiffness

moment_bending(=Vector3r(0, 0, 0))

Bending moment. Defined here, being initialized as it should be, to be used in Law2_ScGeom6D_NormalInelasticityPhys_NormalInelasticity

moment_twist(=Vector3r(0, 0, 0))

Twist moment. Defined here, being initialized as it should be, to be used in Law2_ScGeom6D_NormalInelasticityPhys_NormalInelasticity

normalForce(=Vector3r::Zero())

Normal force after previous step (in global coordinates).

previousFn(=0.0)

the value of the normal force at the last time step

previousun(=0.0)

the value of this un at the last time step

shearForce(=Vector3r::Zero())

Shear force after previous step (in global coordinates).

tangensOfFrictionAngle(=NaN)

tan of angle of friction

unMax(=0.0)

the maximum value of penetration depth of the history of this interaction

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.PolyhedraPhys(inherits FrictPhys → NormShearPhys → NormPhys → IPhys → Serializable)

Simple elastic material with friction for volumetric constitutive laws

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

kn(=0)

Normal stiffness

ks(=0)

Shear stiffness

normalForce(=Vector3r::Zero())

Normal force after previous step (in global coordinates).

shearForce(=Vector3r::Zero())

Shear force after previous step (in global coordinates).

tangensOfFrictionAngle(=NaN)

tan of angle of friction

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.ViscElCapPhys(inherits ViscElPhys → FrictPhys → NormShearPhys → NormPhys → IPhys → Serializable)

IPhys created from ViscElCapMat, for use with Law2_ScGeom_ViscElCapPhys_Basic.

Capillar(=false)

True, if capillar forces need to be added.

CapillarType(=None_Capillar)

Different types of capillar interaction: Willett_numeric, Willett_analytic, Weigert, Rabinovich, Lambert, Soulie

SPHmode(=false)

True, if SPH-mode is enabled.

Vb(=0.0)

Liquid bridge volume [m^3]

cn(=NaN)

Normal viscous constant

cs(=NaN)

Shear viscous constant

dcap(=0.0)

Damping coefficient for the capillary phase [-]

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

gamma(=0.0)

Surface tension [N/m]

h(=-1)

Core radius. See Mueller [Mueller2003] .

kn(=0)

Normal stiffness

ks(=0)

Shear stiffness

liqBridgeActive(=false)

Whether liquid bridge is active at the moment

liqBridgeCreated(=false)

Whether liquid bridge was created, only after a normal contact of spheres

mR(=0.0)

Rolling resistance, see [Zhou1999536].

mRtype(=1)

Rolling resistance type, see [Zhou1999536]. mRtype=1 - equation (3) in [Zhou1999536]; mRtype=2 - equation (4) in [Zhou1999536]

mu(=-1)

Viscosity. See Mueller [Mueller2003] .

normalForce(=Vector3r::Zero())

Normal force after previous step (in global coordinates).

sCrit(=false)

Critical bridge length [m]

shearForce(=Vector3r::Zero())

Shear force after previous step (in global coordinates).

tangensOfFrictionAngle(=NaN)

tan of angle of friction

theta(=0.0)

Contact angle [rad]

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.ViscElPhys(inherits FrictPhys → NormShearPhys → NormPhys → IPhys → Serializable)

IPhys created from ViscElMat, for use with Law2_ScGeom_ViscElPhys_Basic.

SPHmode(=false)

True, if SPH-mode is enabled.

cn(=NaN)

Normal viscous constant

cs(=NaN)

Shear viscous constant

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

h(=-1)

Core radius. See Mueller [Mueller2003] .

kn(=0)

Normal stiffness

ks(=0)

Shear stiffness

mR(=0.0)

Rolling resistance, see [Zhou1999536].

mRtype(=1)

Rolling resistance type, see [Zhou1999536]. mRtype=1 - equation (3) in [Zhou1999536]; mRtype=2 - equation (4) in [Zhou1999536]

mu(=-1)

Viscosity. See Mueller [Mueller2003] .

normalForce(=Vector3r::Zero())

Normal force after previous step (in global coordinates).

shearForce(=Vector3r::Zero())

Shear force after previous step (in global coordinates).

tangensOfFrictionAngle(=NaN)

tan of angle of friction

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.ViscoFrictPhys(inherits FrictPhys → NormShearPhys → NormPhys → IPhys → Serializable)

Temporary version of FrictPhys for compatibility with e.g. Law2_ScGeom6D_NormalInelasticityPhys_NormalInelasticity

creepedShear(=Vector3r(0, 0, 0))

Creeped force (parallel)

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

kn(=0)

Normal stiffness

ks(=0)

Shear stiffness

normalForce(=Vector3r::Zero())

Normal force after previous step (in global coordinates).

shearForce(=Vector3r::Zero())

Shear force after previous step (in global coordinates).

tangensOfFrictionAngle(=NaN)

tan of angle of friction

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.WirePhys(inherits FrictPhys → NormShearPhys → NormPhys → IPhys → Serializable)

Representation of a single interaction of the WirePM type, storage for relevant parameters

dL(=0.)

Additional wire length for considering the distortion for WireMat type=2 (see [Thoeni2013]).

dict() → dict

Return dictionary of attributes.

dispHierarchy([(bool)names=True]) → list

Return list of dispatch classes (from down upwards), starting with the class instance itself, top-level indexable at last. If names is true (default), return class names rather than numerical indices.

dispIndex

Return class index of this instance.

displForceValues(=uninitalized)

Defines the values for force-displacement curve.

initD(=0.)

Equilibrium distance for particles. Computed as the initial inter-particular distance when particle are linked.

isDoubleTwist(=false)

If true the properties of the interaction will be defined as a double-twisted wire.

isLinked(=false)

If true particles are linked and will interact. Interactions are linked automatically by the definition of the corresponding interaction radius. The value is false if the wire breaks (no more interaction).

isShifted(=false)

If true WireMat type=2 and the force-displacement curve will be shifted.

kn(=0)

Normal stiffness

ks(=0)

Shear stiffness

limitFactor(=0.)

This value indicates on how far from failing the wire is, e.g. actual normal displacement divided by admissible normal displacement.

normalForce(=Vector3r::Zero())

Normal force after previous step (in global coordinates).

plastD

Plastic part of the inter-particular distance of the previous step.

Note

Only elastic displacements are reversible (the elastic stiffness is used for unloading) and compressive forces are inadmissible. The compressive stiffness is assumed to be equal to zero.

shearForce(=Vector3r::Zero())

Shear force after previous step (in global coordinates).

stiffnessValues(=uninitalized)

Defines the values for the various stiffnesses (the elastic stiffness is stored as kn).

tangensOfFrictionAngle(=NaN)

tan of angle of friction

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

Global engines

GlobalEngine

digraph GlobalEngine {
        rankdir=RL;
        margin=.2;
        "GlobalEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.GlobalEngine"];
        "Collider" [shape="box",fontsize=8,style="setlinewidth(0.5),filled,dashed",fillcolor=grey,height=0.2,URL="yade.wrapper.html#yade.wrapper.Collider"];
        "Collider" -> "GlobalEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "PeriodicEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.PeriodicEngine"];
        "PeriodicEngine" -> "GlobalEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "DomainLimiter" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.DomainLimiter"];
        "DomainLimiter" -> "PeriodicEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "BoundaryController" [shape="box",fontsize=8,style="setlinewidth(0.5),filled,dashed",fillcolor=grey,height=0.2,URL="yade.wrapper.html#yade.wrapper.BoundaryController"];
        "BoundaryController" -> "GlobalEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "CapillaryStressRecorder" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.CapillaryStressRecorder"];
        "CapillaryStressRecorder" -> "Recorder" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "RungeKuttaCashKarp54Integrator" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.RungeKuttaCashKarp54Integrator"];
        "RungeKuttaCashKarp54Integrator" -> "Integrator" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Recorder" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Recorder"];
        "Recorder" -> "PeriodicEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "ForceRecorder" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.ForceRecorder"];
        "ForceRecorder" -> "Recorder" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "BoxFactory" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.BoxFactory"];
        "BoxFactory" -> "SpheresFactory" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "GlobalStiffnessTimeStepper" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.GlobalStiffnessTimeStepper"];
        "GlobalStiffnessTimeStepper" -> "TimeStepper" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "FacetTopologyAnalyzer" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.FacetTopologyAnalyzer"];
        "FacetTopologyAnalyzer" -> "GlobalEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "CpmStateUpdater" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.CpmStateUpdater"];
        "CpmStateUpdater" -> "PeriodicEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "ResetRandomPosition" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.ResetRandomPosition"];
        "ResetRandomPosition" -> "PeriodicEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "FieldApplier" [shape="box",fontsize=8,style="setlinewidth(0.5),filled,dashed",fillcolor=grey,height=0.2,URL="yade.wrapper.html#yade.wrapper.FieldApplier"];
        "FieldApplier" -> "GlobalEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "CohesiveFrictionalContactLaw" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.CohesiveFrictionalContactLaw"];
        "CohesiveFrictionalContactLaw" -> "GlobalEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "NewtonIntegrator" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.NewtonIntegrator"];
        "NewtonIntegrator" -> "GlobalEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "HydrodynamicsLawLBM" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.HydrodynamicsLawLBM"];
        "HydrodynamicsLawLBM" -> "GlobalEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "TriaxialStateRecorder" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.TriaxialStateRecorder"];
        "TriaxialStateRecorder" -> "Recorder" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_ScGeom_CapillaryPhys_Capillarity" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_ScGeom_CapillaryPhys_Capillarity"];
        "Law2_ScGeom_CapillaryPhys_Capillarity" -> "GlobalEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "TorqueRecorder" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.TorqueRecorder"];
        "TorqueRecorder" -> "Recorder" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "TesselationWrapper" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.TesselationWrapper"];
        "TesselationWrapper" -> "GlobalEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "ForceResetter" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.ForceResetter"];
        "ForceResetter" -> "GlobalEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "TimeStepper" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.TimeStepper"];
        "TimeStepper" -> "GlobalEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "TetraVolumetricLaw" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.TetraVolumetricLaw"];
        "TetraVolumetricLaw" -> "GlobalEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "PolyhedraSplitter" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.PolyhedraSplitter"];
        "PolyhedraSplitter" -> "PeriodicEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "PyRunner" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.PyRunner"];
        "PyRunner" -> "PeriodicEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "MicroMacroAnalyser" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.MicroMacroAnalyser"];
        "MicroMacroAnalyser" -> "GlobalEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "CircularFactory" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.CircularFactory"];
        "CircularFactory" -> "SpheresFactory" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "SpheresFactory" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.SpheresFactory"];
        "SpheresFactory" -> "GlobalEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "VTKRecorder" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.VTKRecorder"];
        "VTKRecorder" -> "PeriodicEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "ElasticContactLaw" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.ElasticContactLaw"];
        "ElasticContactLaw" -> "GlobalEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Integrator" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Integrator"];
        "Integrator" -> "TimeStepper" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "SnapshotEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.SnapshotEngine"];
        "SnapshotEngine" -> "PeriodicEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "InteractionLoop" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.InteractionLoop"];
        "InteractionLoop" -> "GlobalEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
}

class yade.wrapper.GlobalEngine(inherits Engine → Serializable)

Engine that will generally affect the whole simulation (contrary to PartialEngine).

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.BoxFactory(inherits SpheresFactory → GlobalEngine → Engine → Serializable)

Box geometry of the SpheresFactory region, given by extents and center

PSDcalculateMass(=true)

PSD-Input is in mass (true), otherwise the number of particles will be considered.

PSDcum(=uninitalized)

PSD-dispersion, cumulative procent meanings [-]

PSDsizes(=uninitalized)

PSD-dispersion, sizes of cells, Diameter [m]

blockedDOFs(="")

Blocked degress of freedom

center(=Vector3r(NaN, NaN, NaN))

Center of the region

color(=Vector3r(-1, -1, -1))

Use the color for newly created particles, if specified

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

exactDiam(=true)

If true, the particles only with the defined in PSDsizes diameters will be created. Otherwise the diameter will be randomly chosen in the range [PSDsizes[i-1]:PSDsizes[i]], in this case the length of PSDsizes should be more on 1, than the length of PSDcum.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

extents(=Vector3r(NaN, NaN, NaN))

Extents of the region

goalMass(=0)

Total mass that should be attained at the end of the current step. (auto-updated)

ids(=uninitalized)

ids of created bodies

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

mask(=-1)

groupMask to apply for newly created spheres

massFlowRate(=NaN)

Mass flow rate [kg/s]

materialId(=-1)

Shared material id to use for newly created spheres (can be negative to count from the end)

maxAttempt(=5000)

Maximum number of attempts to position a new sphere randomly.

maxMass(=-1)

Maximal mass at which to stop generating new particles regardless of massFlowRate. if maxMass=-1 - this parameter is ignored.

maxParticles(=100)

The number of particles at which to stop generating new ones regardless of massFlowRate. if maxParticles=-1 - this parameter is ignored .

normal(=Vector3r(NaN, NaN, NaN))

Orientation of the region’s geometry, direction of particle’s velocites if normalVel is not set.

normalVel(=Vector3r(NaN, NaN, NaN))

Direction of particle’s velocites.

numParticles(=0)

Cummulative number of particles produces so far (auto-updated)

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

rMax(=NaN)

Maximum radius of generated spheres (uniform distribution)

rMin(=NaN)

Minimum radius of generated spheres (uniform distribution)

silent(=false)

If true no complain about excessing maxAttempt but disable the factory (by set massFlowRate=0).

stopIfFailed(=true)

If true, the SpheresFactory stops (sets massFlowRate=0), when maximal number of attempts to insert particle exceed.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

totalMass(=0)

Mass of spheres that was produced so far. (auto-updated)

totalVolume(=0)

Volume of spheres that was produced so far. (auto-updated)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

vAngle(=NaN)

Maximum angle by which the initial sphere velocity deviates from the normal.

vMax(=NaN)

Maximum velocity norm of generated spheres (uniform distribution)

vMin(=NaN)

Minimum velocity norm of generated spheres (uniform distribution)

class yade.wrapper.CapillaryStressRecorder(inherits Recorder → PeriodicEngine → GlobalEngine → Engine → Serializable)

Records information from capillary meniscii on samples submitted to triaxial compressions. Classical sign convention (tension positiv) is used for capillary stresses. -> New formalism needs to be tested!!!

addIterNum(=false)

Adds an iteration number to the file name, when the file was created. Useful for creating new files at each call (false by default)

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

file(=uninitalized)

Name of file to save to; must not be empty.

firstIterRun(=0)

Sets the step number, at each an engine should be executed for the first time (disabled by default).

initRun(=false)

Run the first time we are called as well.

iterLast(=0)

Tracks step number of last run (auto-updated).

iterPeriod(=0, deactivated)

Periodicity criterion using step number (deactivated if <= 0)

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

nDo(=-1, deactivated)

Limit number of executions by this number (deactivated if negative)

nDone(=0)

Track number of executions (cummulative) (auto-updated).

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

realLast(=0)

Tracks real time of last run (auto-updated).

realPeriod(=0, deactivated)

Periodicity criterion using real (wall clock, computation, human) time (deactivated if <=0)

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

truncate(=false)

Whether to delete current file contents, if any, when opening (false by default)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

virtLast(=0)

Tracks virtual time of last run (auto-updated).

virtPeriod(=0, deactivated)

Periodicity criterion using virtual (simulation) time (deactivated if <= 0)

class yade.wrapper.CircularFactory(inherits SpheresFactory → GlobalEngine → Engine → Serializable)

Circular geometry of the SpheresFactory region. It can be disk (given by radius and center), or cylinder (given by radius, length and center).

PSDcalculateMass(=true)

PSD-Input is in mass (true), otherwise the number of particles will be considered.

PSDcum(=uninitalized)

PSD-dispersion, cumulative procent meanings [-]

PSDsizes(=uninitalized)

PSD-dispersion, sizes of cells, Diameter [m]

blockedDOFs(="")

Blocked degress of freedom

center(=Vector3r(NaN, NaN, NaN))

Center of the region

color(=Vector3r(-1, -1, -1))

Use the color for newly created particles, if specified

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

exactDiam(=true)

If true, the particles only with the defined in PSDsizes diameters will be created. Otherwise the diameter will be randomly chosen in the range [PSDsizes[i-1]:PSDsizes[i]], in this case the length of PSDsizes should be more on 1, than the length of PSDcum.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

goalMass(=0)

Total mass that should be attained at the end of the current step. (auto-updated)

ids(=uninitalized)

ids of created bodies

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

length(=0)

Length of the cylindrical region (0 by default)

mask(=-1)

groupMask to apply for newly created spheres

massFlowRate(=NaN)

Mass flow rate [kg/s]

materialId(=-1)

Shared material id to use for newly created spheres (can be negative to count from the end)

maxAttempt(=5000)

Maximum number of attempts to position a new sphere randomly.

maxMass(=-1)

Maximal mass at which to stop generating new particles regardless of massFlowRate. if maxMass=-1 - this parameter is ignored.

maxParticles(=100)

The number of particles at which to stop generating new ones regardless of massFlowRate. if maxParticles=-1 - this parameter is ignored .

normal(=Vector3r(NaN, NaN, NaN))

Orientation of the region’s geometry, direction of particle’s velocites if normalVel is not set.

normalVel(=Vector3r(NaN, NaN, NaN))

Direction of particle’s velocites.

numParticles(=0)

Cummulative number of particles produces so far (auto-updated)

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

rMax(=NaN)

Maximum radius of generated spheres (uniform distribution)

rMin(=NaN)

Minimum radius of generated spheres (uniform distribution)

radius(=NaN)

Radius of the region

silent(=false)

If true no complain about excessing maxAttempt but disable the factory (by set massFlowRate=0).

stopIfFailed(=true)

If true, the SpheresFactory stops (sets massFlowRate=0), when maximal number of attempts to insert particle exceed.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

totalMass(=0)

Mass of spheres that was produced so far. (auto-updated)

totalVolume(=0)

Volume of spheres that was produced so far. (auto-updated)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

vAngle(=NaN)

Maximum angle by which the initial sphere velocity deviates from the normal.

vMax(=NaN)

Maximum velocity norm of generated spheres (uniform distribution)

vMin(=NaN)

Minimum velocity norm of generated spheres (uniform distribution)

class yade.wrapper.CohesiveFrictionalContactLaw(inherits GlobalEngine → Engine → Serializable)

[DEPRECATED] Loop over interactions applying Law2_ScGeom6D_CohFrictPhys_CohesionMoment on all interactions.

Note

Use InteractionLoop and Law2_ScGeom6D_CohFrictPhys_CohesionMoment instead of this class for performance reasons.

always_use_moment_law(=false)

If true, use bending/twisting moments at all contacts. If false, compute moments only for cohesive contacts.

creep_viscosity(=false)

creep viscosity [Pa.s/m]. probably should be moved to Ip2_CohFrictMat_CohFrictMat_CohFrictPhys...

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

neverErase(=false)

Keep interactions even if particles go away from each other (only in case another constitutive law is in the scene, e.g. Law2_ScGeom_CapillaryPhys_Capillarity)

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

shear_creep(=false)

activate creep on the shear force, using CohesiveFrictionalContactLaw::creep_viscosity.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

twist_creep(=false)

activate creep on the twisting moment, using CohesiveFrictionalContactLaw::creep_viscosity.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.CpmStateUpdater(inherits PeriodicEngine → GlobalEngine → Engine → Serializable)

Update CpmState of bodies based on state variables in CpmPhys of interactions with this bod. In particular, bodies’ colors and CpmState::normDmg depending on average damage of their interactions and number of interactions that were already fully broken and have disappeared is updated. This engine contains its own loop (2 loops, more precisely) over all bodies and should be run periodically to update colors during the simulation, if desired.

avgRelResidual(=NaN)

Average residual strength at last run.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

firstIterRun(=0)

Sets the step number, at each an engine should be executed for the first time (disabled by default).

initRun(=false)

Run the first time we are called as well.

iterLast(=0)

Tracks step number of last run (auto-updated).

iterPeriod(=0, deactivated)

Periodicity criterion using step number (deactivated if <= 0)

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

maxOmega(=NaN)

Globally maximum damage parameter at last run.

nDo(=-1, deactivated)

Limit number of executions by this number (deactivated if negative)

nDone(=0)

Track number of executions (cummulative) (auto-updated).

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

realLast(=0)

Tracks real time of last run (auto-updated).

realPeriod(=0, deactivated)

Periodicity criterion using real (wall clock, computation, human) time (deactivated if <=0)

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

virtLast(=0)

Tracks virtual time of last run (auto-updated).

virtPeriod(=0, deactivated)

Periodicity criterion using virtual (simulation) time (deactivated if <= 0)

class yade.wrapper.DomainLimiter(inherits PeriodicEngine → GlobalEngine → Engine → Serializable)

Delete particles that are out of axis-aligned box given by lo and hi.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

firstIterRun(=0)

Sets the step number, at each an engine should be executed for the first time (disabled by default).

hi(=Vector3r(0, 0, 0))

Upper corner of the domain.

initRun(=false)

Run the first time we are called as well.

iterLast(=0)

Tracks step number of last run (auto-updated).

iterPeriod(=0, deactivated)

Periodicity criterion using step number (deactivated if <= 0)

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

lo(=Vector3r(0, 0, 0))

Lower corner of the domain.

mDeleted(=0)

Mass of deleted particles.

mask(=-1)

If mask is defined, only particles with corresponding groupMask will be deleted.

nDeleted(=0)

Cummulative number of particles deleted.

nDo(=-1, deactivated)

Limit number of executions by this number (deactivated if negative)

nDone(=0)

Track number of executions (cummulative) (auto-updated).

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

realLast(=0)

Tracks real time of last run (auto-updated).

realPeriod(=0, deactivated)

Periodicity criterion using real (wall clock, computation, human) time (deactivated if <=0)

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

vDeleted(=0)

Volume of deleted particles.

virtLast(=0)

Tracks virtual time of last run (auto-updated).

virtPeriod(=0, deactivated)

Periodicity criterion using virtual (simulation) time (deactivated if <= 0)

class yade.wrapper.ElasticContactLaw(inherits GlobalEngine → Engine → Serializable)

[DEPRECATED] Loop over interactions applying Law2_ScGeom_FrictPhys_CundallStrack on all interactions.

Note

Use InteractionLoop and Law2_ScGeom_FrictPhys_CundallStrack instead of this class for performance reasons.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

neverErase(=false)

Keep interactions even if particles go away from each other (only in case another constitutive law is in the scene, e.g. Law2_ScGeom_CapillaryPhys_Capillarity)

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.FacetTopologyAnalyzer(inherits GlobalEngine → Engine → Serializable)

Initializer for filling adjacency geometry data for facets.

Common vertices and common edges are identified and mutual angle between facet faces is written to Facet instances. If facets don’t move with respect to each other, this must be done only at the beginng.

commonEdgesFound(=0)

how many common edges were identified during last run. (auto-updated)

commonVerticesFound(=0)

how many common vertices were identified during last run. (auto-updated)

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

projectionAxis(=Vector3r::UnitX())

Axis along which to do the initial vertex sort

relTolerance(=1e-4)

maximum distance of ‘identical’ vertices, relative to minimum facet size

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.ForceRecorder(inherits Recorder → PeriodicEngine → GlobalEngine → Engine → Serializable)

Engine saves the resultant force affecting to bodies, listed in ids. For instance, can be useful for defining the forces, which affects to _buldozer_ during its work.

addIterNum(=false)

Adds an iteration number to the file name, when the file was created. Useful for creating new files at each call (false by default)

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

file(=uninitalized)

Name of file to save to; must not be empty.

firstIterRun(=0)

Sets the step number, at each an engine should be executed for the first time (disabled by default).

ids(=uninitalized)

List of bodies whose state will be measured

initRun(=false)

Run the first time we are called as well.

iterLast(=0)

Tracks step number of last run (auto-updated).

iterPeriod(=0, deactivated)

Periodicity criterion using step number (deactivated if <= 0)

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

nDo(=-1, deactivated)

Limit number of executions by this number (deactivated if negative)

nDone(=0)

Track number of executions (cummulative) (auto-updated).

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

realLast(=0)

Tracks real time of last run (auto-updated).

realPeriod(=0, deactivated)

Periodicity criterion using real (wall clock, computation, human) time (deactivated if <=0)

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

totalForce(=Vector3r::Zero())

Resultant force, returning by the function.

truncate(=false)

Whether to delete current file contents, if any, when opening (false by default)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

virtLast(=0)

Tracks virtual time of last run (auto-updated).

virtPeriod(=0, deactivated)

Periodicity criterion using virtual (simulation) time (deactivated if <= 0)

class yade.wrapper.ForceResetter(inherits GlobalEngine → Engine → Serializable)

Reset all forces stored in Scene::forces (O.forces in python). Typically, this is the first engine to be run at every step. In addition, reset those energies that should be reset, if energy tracing is enabled.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.GlobalStiffnessTimeStepper(inherits TimeStepper → GlobalEngine → Engine → Serializable)

An engine assigning the time-step as a fraction of the minimum eigen-period in the problem. The derivation is detailed in the chapter on DEM formulation. The viscEl option enables to evaluate the timestep in a similar way for the visco-elastic contact law Law2_ScGeom_ViscElPhys_Basic, more detail in GlobalStiffnessTimestepper::viscEl.

active(=true)

is the engine active?

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

defaultDt(=-1)

used as the initial value of the timestep (especially useful in the first steps when no contact exist). If negative, it will be defined by utils.PWaveTimeStep * GlobalStiffnessTimeStepper::timestepSafetyCoefficient

densityScaling(=false)

(auto-updated) don’t modify this value if you don’t plan to modify the scaling factor manually for some bodies. In most cases, it is enough to set NewtonIntegrator::densityScaling and let this one be adjusted automatically.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

maxDt(=Mathr::MAX_REAL)

if positive, used as max value of the timestep whatever the computed value

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

previousDt(=1)

last computed dt (auto-updated)

targetDt(=1)

if NewtonIntegrator::densityScaling is active, this value will be used as the simulation timestep and the scaling will use this value of dt as the target value. The value of targetDt is arbitrary and should have no effect in the result in general. However if some bodies have imposed velocities, for instance, they will move more or less per each step depending on this value.

timeStepUpdateInterval(=1)

dt update interval

timestepSafetyCoefficient(=0.8)

safety factor between the minimum eigen-period and the final assigned dt (less than 1)

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

viscEl(=false)

To use with ViscElPhys. if True, evaluate separetly the minimum eigen-period in the problem considering only the elastic contribution on one hand (spring only), and only the viscous contribution on the other hand (dashpot only). Take then the minimum of the two and use the safety coefficient GlobalStiffnessTimestepper::timestepSafetyCoefficient to take into account the possible coupling between the two contribution.

class yade.wrapper.HydrodynamicsLawLBM(inherits GlobalEngine → Engine → Serializable)

Engine to simulate fluid flow (with the lattice Boltzmann method) with a coupling with the discrete element method. If you use this Engine, please cite and refer to F. Lominé et al. International Journal For Numerical and Analytical Method in Geomechanics, 2012, doi: 10.1002/nag.1109

ConvergenceThreshold(=0.000001)

CstBodyForce(=Vector3r::Zero())

A constant body force (=that does not vary in time or space, otherwise the implementation introduces errors)

DemIterLbmIterRatio(=-1)

Ratio between DEM and LBM iterations for subcycling

EndTime(=-1)

the time to stop the simulation

EngineIsActivated(=true)

To activate (or not) the engine

IterMax(=1)

This variable can be used to do several LBM iterations during one DEM iteration.

IterPrint(=1)

Print info on screen every IterPrint iterations

IterSave(=100)

Data are saved every IterSave LBM iteration (or see TimeSave)

IterSubCyclingStart(=-1)

Iteration number when the subcycling process starts

LBMSavedData(=" ")

a list of data that will be saved. Can use velocity,velXY,forces,rho,bodies,nodeBD,newNode,observedptc,observednode,contacts,spheres,bz2

Nu(=0.000001)

Fluid kinematic viscosity

Nx(=1000)

The number of grid division in x direction

ObservedNode(=-1)

The identifier of the node that will be observed (-1 means none)

ObservedPtc(=-1)

The identifier of the particle that will be observed (-1 means the first one)

RadFactor(=1.0)

The radius of DEM particules seen by the LBM is the real radius of particules*RadFactor

Rho(=1000.)

Fluid density

SaveGridRatio(=1)

Grid data are saved every SaveGridRatio * IterSave LBM iteration (with SaveMode=1)

SaveMode(=1)

Save Mode (1-> default, 2-> in time (not yet implemented)

TimeSave(=-1)

Data are saved at constant time interval (or see IterSave)

VbCutOff(=-1)

the minimum boundary velocity that is taken into account

VelocityThreshold(=-1.)

Velocity threshold when removingCriterion=2

WallXm_id(=2)

Identifier of the X- wall

WallXp_id(=3)

Identifier of the X+ wall

WallYm_id(=0)

Identifier of the Y- wall

WallYp_id(=1)

Identifier of the Y+ wall

WallZm_id(=4)

Identifier of the Z- wall

WallZp_id(=5)

Identifier of the Z+ wall

XmBCType(=1)

Boundary condition for the wall in Xm (-1: unused, 1: pressure condition, 2: velocity condition).

XmBcRho(=-1)

(!!! not fully implemented !!) The density imposed at the boundary

XmBcVel(=Vector3r::Zero())

(!!! not fully implemented !!) The velocity imposed at the boundary

XmYmZmBCType(=-1)

Boundary condition for the corner node XmYmZm (not used with d2q9, -1: unused, 1: pressure condition, 2: velocity condition).

XmYmZpBCType(=2)

Boundary condition for the corner node XmYmZp (-1: unused, 1: pressure condition, 2: velocity condition).

XmYpZmBCType(=-1)

Boundary condition for the corner node XmYpZm (not used with d2q9, -1: unused, 1: pressure condition, 2: velocity condition).

XmYpZpBCType(=2)

Boundary condition for the corner node XmYpZp (-1: unused, 1: pressure condition, 2: velocity condition).

XpBCType(=1)

Boundary condition for the wall in Xp (-1: unused, 1: pressure condition, 2: velocity condition).

XpBcRho(=-1)

(!!! not fully implemented !!) The density imposed at the boundary

XpBcVel(=Vector3r::Zero())

(!!! not fully implemented !!) The velocity imposed at the boundary

XpYmZmBCType(=-1)

Boundary condition for the corner node XpYmZm (not used with d2q9, -1: unused, 1: pressure condition, 2: velocity condition).

XpYmZpBCType(=2)

Boundary condition for the corner node XpYmZp (-1: unused, 1: pressure condition, 2: velocity condition).

XpYpZmBCType(=-1)

Boundary condition for the corner node XpYpZm (not used with d2q9, -1: unused, 1: pressure condition, 2: velocity condition).

XpYpZpBCType(=2)

Boundary condition for the corner node XpYpZp (-1: unused, 1: pressure condition, 2: velocity condition).

YmBCType(=2)

Boundary condition for the wall in Ym (-1: unused, 1: pressure condition, 2: velocity condition).

YmBcRho(=-1)

(!!! not fully implemented !!) The density imposed at the boundary

YmBcVel(=Vector3r::Zero())

(!!! not fully implemented !!) The velocity imposed at the boundary

YpBCType(=2)

Boundary condition for the wall in Yp (-1: unused, 1: pressure condition, 2: velocity condition).

YpBcRho(=-1)

(!!! not fully implemented !!) The density imposed at the boundary

YpBcVel(=Vector3r::Zero())

(!!! not fully implemented !!) The velocity imposed at the boundary

ZmBCType(=-1)

Boundary condition for the wall in Zm (-1: unused, 1: pressure condition, 2: velocity condition).

ZmBcRho(=-1)

(!!! not fully implemented !!) The density imposed at the boundary

ZmBcVel(=Vector3r::Zero())

(!!! not fully implemented !!) The velocity imposed at the boundary

ZpBCType(=-1)

Boundary condition for the wall in Zp (-1: unused, 1: pressure condition, 2: velocity condition).

ZpBcVel(=Vector3r::Zero())

(!!! not fully implemented !!) The velocity imposed at the boundary

applyForcesAndTorques(=true)

Switch to apply forces and torques

bc(=" ")

Boundary condition

dP(=Vector3r(0., 0., 0.))

Pressure difference between input and output

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

defaultLbmInitMode(=0)

Switch between the two initialisation methods

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

model(="d2q9")

The LB model. Until now only d2q9 is implemented

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

periodicity(=" ")

periodicity

removingCriterion(=0)

Criterion to remove a sphere (1->based on particle position, 2->based on particle velocity

tau(=0.6)

Relaxation time

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

useWallXm(=false)

Set true if you want that the LBM see the wall in Xm

useWallXp(=false)

Set true if you want that the LBM see the wall in Xp

useWallYm(=true)

Set true if you want that the LBM see the wall in Ym

useWallYp(=true)

Set true if you want that the LBM see the wall in Yp

useWallZm(=false)

Set true if you want that the LBM see the wall in Zm

useWallZp(=false)

Set true if you want that the LBM see the wall in Zp

zpBcRho(=-1)

(!!! not fully implemented !!) The density imposed at the boundary

class yade.wrapper.Integrator(inherits TimeStepper → GlobalEngine → Engine → Serializable)

Integration Engine Interface.

active(=true)

is the engine active?

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

integrationsteps(=uninitalized)

all integrationsteps count as all succesfull substeps

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

maxVelocitySq(=NaN)

store square of max. velocity, for informative purposes; computed again at every step. (auto-updated)

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

slaves

List of lists of Engines to calculate the force acting on the particles; to obtain the derivatives of the states, engines inside will be run sequentially.

timeStepUpdateInterval(=1)

dt update interval

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.InteractionLoop(inherits GlobalEngine → Engine → Serializable)

Unified dispatcher for handling interaction loop at every step, for parallel performance reasons.

Special constructor

Constructs from 3 lists of Ig2, Ip2, Law functors respectively; they will be passed to interal dispatchers, which you might retrieve.

callbacks(=uninitalized)

Callbacks which will be called for every Interaction, if activated.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

eraseIntsInLoop(=false)

Defines if the interaction loop should erase pending interactions, else the collider takes care of that alone (depends on what collider is used).

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

geomDispatcher(=new IGeomDispatcher)

IGeomDispatcher object that is used for dispatch.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

lawDispatcher(=new LawDispatcher)

LawDispatcher object used for dispatch.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

physDispatcher(=new IPhysDispatcher)

IPhysDispatcher object used for dispatch.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Law2_ScGeom_CapillaryPhys_Capillarity(inherits GlobalEngine → Engine → Serializable)

This law allows one to take into account capillary forces/effects between spheres coming from the presence of interparticular liquid bridges (menisci).

The control parameter is the capillary pressure (or suction) Uc = Ugas - Uliquid. Liquid bridges properties (volume V, extent over interacting grains delta1 and delta2) are computed as a result of the defined capillary pressure and of the interacting geometry (spheres radii and interparticular distance).

References: in english [Scholtes2009b]; more detailed, but in french [Scholtes2009d].

The law needs ascii files M(r=i) with i=R1/R2 to work (see https://yade-dem.org/wiki/CapillaryTriaxialTest). These ASCII files contain a set of results from the resolution of the Laplace-Young equation for different configurations of the interacting geometry, assuming a null wetting angle.

In order to allow capillary forces between distant spheres, it is necessary to enlarge the bounding boxes using Bo1_Sphere_Aabb::aabbEnlargeFactor and make the Ig2 define define distant interactions via interactionDetectionFactor. It is also necessary to disable interactions removal by the constitutive law (Law2). The only combinations of laws supported are currently capillary law + Law2_ScGeom_FrictPhys_CundallStrack and capillary law + Law2_ScGeom_MindlinPhys_Mindlin (and the other variants of Hertz-Mindlin).

See CapillaryPhys-example.py for an example script.

binaryFusion(=true)

If true, capillary forces are set to zero as soon as, at least, 1 overlap (menisci fusion) is detected. Otherwise fCap = fCap / (fusionNumber + 1 )

capillaryPressure(=0.)

Value of the capillary pressure Uc defined as Uc=Ugas-Uliquid

createDistantMeniscii(=false)

Generate meniscii between distant spheres? Else only maintain the existing ones. For modeling a wetting path this flag should always be false. For a drying path it should be true for one step (initialization) then false, as in the logic of [Scholtes2009c]

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

fusionDetection(=false)

If true potential menisci overlaps are checked, computing fusionNumber for each capillary interaction, and reducing fCap according to binaryFusion

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

surfaceTension(=0.073)

Value of considered surface tension

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.MicroMacroAnalyser(inherits GlobalEngine → Engine → Serializable)

compute fabric tensor, local porosity, local deformation, and other micromechanicaly defined quantities based on triangulation/tesselation of the packing.

compDeformation(=false)

Is the engine just saving states or also computing and outputing deformations for each increment?

compIncrt(=false)

Should increments of force and displacements be defined on [n,n+1]? If not, states will be saved with only positions and forces (no displacements).

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

incrtNumber(=1)

interval(=100)

Number of timesteps between analyzed states.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

nonSphereAsFictious(=true)

bodies that are not spheres will be used to defines bounds (else just skipped).

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

outputFile(="MicroMacroAnalysis")

Base name for increment analysis output file.

stateFileName(="state")

Base name of state files.

stateNumber(=0)

A number incremented and appended at the end of output files to reflect increment number.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.NewtonIntegrator(inherits GlobalEngine → Engine → Serializable)

Engine integrating newtonian motion equations.

damping(=0.2)

damping coefficient for Cundall’s non viscous damping (see numerical damping and [Chareyre2005])

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

densityScaling

if True, then density scaling [Pfc3dManual30] will be applied in order to have a critical timestep equal to GlobalStiffnessTimeStepper::targetDt for all bodies. This option makes the simulation unrealistic from a dynamic point of view, but may speedup quasistatic simulations. In rare situations, it could be useful to not set the scalling factor automatically for each body (which the time-stepper does). In such case revert GlobalStiffnessTimeStepper.densityScaling to False.

dict() → dict

Return dictionary of attributes.

exactAsphericalRot(=true)

Enable more exact body rotation integrator for aspherical bodies only, using formulation from [Allen1989], pg. 89.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

gravity(=Vector3r::Zero())

Gravitational acceleration (effectively replaces GravityEngine).

kinSplit(=false)

Whether to separately track translational and rotational kinetic energy.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

mask(=-1)

If mask defined and the bitwise AND between mask and body`s groupMask gives 0, the body will not move/rotate. Velocities and accelerations will be calculated not paying attention to this parameter.

maxVelocitySq(=NaN)

store square of max. velocity, for informative purposes; computed again at every step. (auto-updated)

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

prevVelGrad(=Matrix3r::Zero())

Store previous velocity gradient (Cell::velGrad) to track acceleration. (auto-updated)

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

warnNoForceReset(=true)

Warn when forces were not resetted in this step by ForceResetter; this mostly points to ForceResetter being forgotten incidentally and should be disabled only with a good reason.

class yade.wrapper.PeriodicEngine(inherits GlobalEngine → Engine → Serializable)

Run Engine::action with given fixed periodicity real time (=wall clock time, computation time), virtual time (simulation time), iteration number), by setting any of those criteria (virtPeriod, realPeriod, iterPeriod) to a positive value. They are all negative (inactive) by default.

The number of times this engine is activated can be limited by setting nDo>0. If the number of activations will have been already reached, no action will be called even if an active period has elapsed.

If initRun is set (false by default), the engine will run when called for the first time; otherwise it will only start counting period (realLast etc interal variables) from that point, but without actually running, and will run only once a period has elapsed since the initial run.

This class should not be used directly; rather, derive your own engine which you want to be run periodically.

Derived engines should override Engine::action(), which will be called periodically. If the derived Engine overrides also Engine::isActivated, it should also take in account return value from PeriodicEngine::isActivated, since otherwise the periodicity will not be functional.

Example with PyRunner, which derives from PeriodicEngine; likely to be encountered in python scripts:

PyRunner(realPeriod=5,iterPeriod=10000,command='print O.iter')  

will print iteration number every 10000 iterations or every 5 seconds of wall clock time, whiever comes first since it was last run.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

firstIterRun(=0)

Sets the step number, at each an engine should be executed for the first time (disabled by default).

initRun(=false)

Run the first time we are called as well.

iterLast(=0)

Tracks step number of last run (auto-updated).

iterPeriod(=0, deactivated)

Periodicity criterion using step number (deactivated if <= 0)

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

nDo(=-1, deactivated)

Limit number of executions by this number (deactivated if negative)

nDone(=0)

Track number of executions (cummulative) (auto-updated).

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

realLast(=0)

Tracks real time of last run (auto-updated).

realPeriod(=0, deactivated)

Periodicity criterion using real (wall clock, computation, human) time (deactivated if <=0)

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

virtLast(=0)

Tracks virtual time of last run (auto-updated).

virtPeriod(=0, deactivated)

Periodicity criterion using virtual (simulation) time (deactivated if <= 0)

class yade.wrapper.PolyhedraSplitter(inherits PeriodicEngine → GlobalEngine → Engine → Serializable)

Engine that splits polyhedras.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

firstIterRun(=0)

Sets the step number, at each an engine should be executed for the first time (disabled by default).

initRun(=false)

Run the first time we are called as well.

iterLast(=0)

Tracks step number of last run (auto-updated).

iterPeriod(=0, deactivated)

Periodicity criterion using step number (deactivated if <= 0)

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

nDo(=-1, deactivated)

Limit number of executions by this number (deactivated if negative)

nDone(=0)

Track number of executions (cummulative) (auto-updated).

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

realLast(=0)

Tracks real time of last run (auto-updated).

realPeriod(=0, deactivated)

Periodicity criterion using real (wall clock, computation, human) time (deactivated if <=0)

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

virtLast(=0)

Tracks virtual time of last run (auto-updated).

virtPeriod(=0, deactivated)

Periodicity criterion using virtual (simulation) time (deactivated if <= 0)

class yade.wrapper.PyRunner(inherits PeriodicEngine → GlobalEngine → Engine → Serializable)

Execute a python command periodically, with defined (and adjustable) periodicity. See PeriodicEngine documentation for details.

command(="")

Command to be run by python interpreter. Not run if empty.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

firstIterRun(=0)

Sets the step number, at each an engine should be executed for the first time (disabled by default).

initRun(=false)

Run the first time we are called as well.

iterLast(=0)

Tracks step number of last run (auto-updated).

iterPeriod(=0, deactivated)

Periodicity criterion using step number (deactivated if <= 0)

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

nDo(=-1, deactivated)

Limit number of executions by this number (deactivated if negative)

nDone(=0)

Track number of executions (cummulative) (auto-updated).

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

realLast(=0)

Tracks real time of last run (auto-updated).

realPeriod(=0, deactivated)

Periodicity criterion using real (wall clock, computation, human) time (deactivated if <=0)

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

virtLast(=0)

Tracks virtual time of last run (auto-updated).

virtPeriod(=0, deactivated)

Periodicity criterion using virtual (simulation) time (deactivated if <= 0)

class yade.wrapper.Recorder(inherits PeriodicEngine → GlobalEngine → Engine → Serializable)

Engine periodically storing some data to (one) external file. In addition PeriodicEngine, it handles opening the file as needed. See PeriodicEngine for controlling periodicity.

addIterNum(=false)

Adds an iteration number to the file name, when the file was created. Useful for creating new files at each call (false by default)

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

file(=uninitalized)

Name of file to save to; must not be empty.

firstIterRun(=0)

Sets the step number, at each an engine should be executed for the first time (disabled by default).

initRun(=false)

Run the first time we are called as well.

iterLast(=0)

Tracks step number of last run (auto-updated).

iterPeriod(=0, deactivated)

Periodicity criterion using step number (deactivated if <= 0)

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

nDo(=-1, deactivated)

Limit number of executions by this number (deactivated if negative)

nDone(=0)

Track number of executions (cummulative) (auto-updated).

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

realLast(=0)

Tracks real time of last run (auto-updated).

realPeriod(=0, deactivated)

Periodicity criterion using real (wall clock, computation, human) time (deactivated if <=0)

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

truncate(=false)

Whether to delete current file contents, if any, when opening (false by default)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

virtLast(=0)

Tracks virtual time of last run (auto-updated).

virtPeriod(=0, deactivated)

Periodicity criterion using virtual (simulation) time (deactivated if <= 0)

class yade.wrapper.ResetRandomPosition(inherits PeriodicEngine → GlobalEngine → Engine → Serializable)

Creates spheres during simulation, placing them at random positions. Every time called, one new sphere will be created and inserted in the simulation.

angularVelocity(=Vector3r::Zero())

Mean angularVelocity of spheres.

angularVelocityRange(=Vector3r::Zero())

Half size of a angularVelocity distribution interval. New sphere will have random angularVelocity within the range angularVelocity±angularVelocityRange.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

factoryFacets(=uninitalized)

The geometry of the section where spheres will be placed; they will be placed on facets or in volume between them depending on volumeSection flag.

firstIterRun(=0)

Sets the step number, at each an engine should be executed for the first time (disabled by default).

initRun(=false)

Run the first time we are called as well.

iterLast(=0)

Tracks step number of last run (auto-updated).

iterPeriod(=0, deactivated)

Periodicity criterion using step number (deactivated if <= 0)

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

maxAttempts(=20)

Max attempts to place sphere. If placing the sphere in certain random position would cause an overlap with any other physical body in the model, SpheresFactory will try to find another position.

nDo(=-1, deactivated)

Limit number of executions by this number (deactivated if negative)

nDone(=0)

Track number of executions (cummulative) (auto-updated).

normal(=Vector3r(0, 1, 0))

??

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

point(=Vector3r::Zero())

??

realLast(=0)

Tracks real time of last run (auto-updated).

realPeriod(=0, deactivated)

Periodicity criterion using real (wall clock, computation, human) time (deactivated if <=0)

subscribedBodies(=uninitalized)

Affected bodies.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

velocity(=Vector3r::Zero())

Mean velocity of spheres.

velocityRange(=Vector3r::Zero())

Half size of a velocities distribution interval. New sphere will have random velocity within the range velocity±velocityRange.

virtLast(=0)

Tracks virtual time of last run (auto-updated).

virtPeriod(=0, deactivated)

Periodicity criterion using virtual (simulation) time (deactivated if <= 0)

volumeSection(=false, define factory by facets.)

Create new spheres inside factory volume rather than on its surface.

class yade.wrapper.RungeKuttaCashKarp54Integrator(inherits Integrator → TimeStepper → GlobalEngine → Engine → Serializable)

RungeKuttaCashKarp54Integrator engine.

__init__() → None

object __init__(tuple args, dict kwds)

__init__((list)arg2) → object :
Construct from (possibly nested) list of slaves.
a_dxdt(=1.0)

a_x(=1.0)

abs_err(=1e-6)

Relative integration tolerance

active(=true)

is the engine active?

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

integrationsteps(=uninitalized)

all integrationsteps count as all succesfull substeps

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

maxVelocitySq(=NaN)

store square of max. velocity, for informative purposes; computed again at every step. (auto-updated)

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

rel_err(=1e-6)

Absolute integration tolerance

slaves

List of lists of Engines to calculate the force acting on the particles; to obtain the derivatives of the states, engines inside will be run sequentially.

stepsize(=1e-6)

It is not important for an adaptive integration but important for the observer for setting the found states after integration

timeStepUpdateInterval(=1)

dt update interval

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.SnapshotEngine(inherits PeriodicEngine → GlobalEngine → Engine → Serializable)

Periodically save snapshots of GLView(s) as .png files. Files are named fileBase + counter + ‘.png’ (counter is left-padded by 0s, i.e. snap00004.png).

counter(=0)

Number that will be appended to fileBase when the next snapshot is saved (incremented at every save). (auto-updated)

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

deadTimeout(=3)

Timeout for 3d operations (opening new view, saving snapshot); after timing out, throw exception (or only report error if ignoreErrors) and make myself dead. [s]

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

fileBase(="")

Basename for snapshots

firstIterRun(=0)

Sets the step number, at each an engine should be executed for the first time (disabled by default).

format(="PNG")

Format of snapshots (one of JPEG, PNG, EPS, PS, PPM, BMP) QGLViewer documentation. File extension will be lowercased format. Validity of format is not checked.

ignoreErrors(=true)

Only report errors instead of throwing exceptions, in case of timeouts.

initRun(=false)

Run the first time we are called as well.

iterLast(=0)

Tracks step number of last run (auto-updated).

iterPeriod(=0, deactivated)

Periodicity criterion using step number (deactivated if <= 0)

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

msecSleep(=0)

number of msec to sleep after snapshot (to prevent 3d hw problems) [ms]

nDo(=-1, deactivated)

Limit number of executions by this number (deactivated if negative)

nDone(=0)

Track number of executions (cummulative) (auto-updated).

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

plot(=uninitalized)

Name of field in plot.imgData to which taken snapshots will be appended automatically.

realLast(=0)

Tracks real time of last run (auto-updated).

realPeriod(=0, deactivated)

Periodicity criterion using real (wall clock, computation, human) time (deactivated if <=0)

snapshots(=uninitalized)

Files that have been created so far

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

virtLast(=0)

Tracks virtual time of last run (auto-updated).

virtPeriod(=0, deactivated)

Periodicity criterion using virtual (simulation) time (deactivated if <= 0)

class yade.wrapper.SpheresFactory(inherits GlobalEngine → Engine → Serializable)

Engine for spitting spheres based on mass flow rate, particle size distribution etc. Initial velocity of particles is given by vMin, vMax, the massFlowRate determines how many particles to generate at each step. When goalMass is attained or positive maxParticles is reached, the engine does not produce particles anymore. Geometry of the region should be defined in a derived engine by overridden SpheresFactory::pickRandomPosition().

A sample script for this engine is in scripts/spheresFactory.py.

PSDcalculateMass(=true)

PSD-Input is in mass (true), otherwise the number of particles will be considered.

PSDcum(=uninitalized)

PSD-dispersion, cumulative procent meanings [-]

PSDsizes(=uninitalized)

PSD-dispersion, sizes of cells, Diameter [m]

blockedDOFs(="")

Blocked degress of freedom

color(=Vector3r(-1, -1, -1))

Use the color for newly created particles, if specified

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

exactDiam(=true)

If true, the particles only with the defined in PSDsizes diameters will be created. Otherwise the diameter will be randomly chosen in the range [PSDsizes[i-1]:PSDsizes[i]], in this case the length of PSDsizes should be more on 1, than the length of PSDcum.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

goalMass(=0)

Total mass that should be attained at the end of the current step. (auto-updated)

ids(=uninitalized)

ids of created bodies

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

mask(=-1)

groupMask to apply for newly created spheres

massFlowRate(=NaN)

Mass flow rate [kg/s]

materialId(=-1)

Shared material id to use for newly created spheres (can be negative to count from the end)

maxAttempt(=5000)

Maximum number of attempts to position a new sphere randomly.

maxMass(=-1)

Maximal mass at which to stop generating new particles regardless of massFlowRate. if maxMass=-1 - this parameter is ignored.

maxParticles(=100)

The number of particles at which to stop generating new ones regardless of massFlowRate. if maxParticles=-1 - this parameter is ignored .

normal(=Vector3r(NaN, NaN, NaN))

Orientation of the region’s geometry, direction of particle’s velocites if normalVel is not set.

normalVel(=Vector3r(NaN, NaN, NaN))

Direction of particle’s velocites.

numParticles(=0)

Cummulative number of particles produces so far (auto-updated)

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

rMax(=NaN)

Maximum radius of generated spheres (uniform distribution)

rMin(=NaN)

Minimum radius of generated spheres (uniform distribution)

silent(=false)

If true no complain about excessing maxAttempt but disable the factory (by set massFlowRate=0).

stopIfFailed(=true)

If true, the SpheresFactory stops (sets massFlowRate=0), when maximal number of attempts to insert particle exceed.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

totalMass(=0)

Mass of spheres that was produced so far. (auto-updated)

totalVolume(=0)

Volume of spheres that was produced so far. (auto-updated)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

vAngle(=NaN)

Maximum angle by which the initial sphere velocity deviates from the normal.

vMax(=NaN)

Maximum velocity norm of generated spheres (uniform distribution)

vMin(=NaN)

Minimum velocity norm of generated spheres (uniform distribution)

class yade.wrapper.TesselationWrapper(inherits GlobalEngine → Engine → Serializable)

Handle the triangulation of spheres in a scene, build tesselation on request, and give access to computed quantities (see also the dedicated section in user manual). The calculation of microstrain is explained in [Catalano2014a]

See example usage in script example/tesselationWrapper/tesselationWrapper.py.

Below is an output of the defToVtk function visualized with paraview (in this case Yade’s TesselationWrapper was used to process experimental data obtained on sand by Edward Ando at Grenoble University, 3SR lab.)

_images/localstrain.png
computeDeformations() → None

compute per-particle deformation. Get it with TesselationWrapper::deformation (id,i,j).

computeVolumes() → None

compute volumes of all Voronoi’s cells.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

defToVtk([(str)outputFile='def.vtk']) → None

Write local deformations in vtk format from states 0 and 1.

defToVtkFromPositions([(str)input1='pos1'[, (str)input2='pos2'[, (str)outputFile='def.vtk'[, (bool)bz2=False]]]]) → None

Write local deformations in vtk format from positions files (one sphere per line, with x,y,z,rad separated by spaces).

defToVtkFromStates([(str)input1='state1'[, (str)input2='state2'[, (str)outputFile='def.vtk'[, (bool)bz2=True]]]]) → None

Write local deformations in vtk format from state files (since the file format is very special, consider using defToVtkFromPositions if the input files were not generated by TesselationWrapper).

deformation((int)id, (int)i, (int)j) → float

Get particle deformation

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

far(=10000.)

Defines the radius of the large virtual spheres used to define nearly flat boundaries around the assembly. The radius will be the (scene’s) bounding box size multiplied by ‘far’. Higher values will minimize the error theoretically (since the infinite sphere really defines a plane), but it may increase numerical errors at some point. The default should give a resonable compromize.

getVolPoroDef([(bool)deformation=False]) → dict

Return a table with per-sphere computed quantities. Include deformations on the increment defined by states 0 and 1 if deformation=True (make sure to define states 0 and 1 consistently).

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

loadState([(str)inputFile='state'[, (bool)state=0[, (bool)bz2=True]]]) → None

Load a file with positions to define state 0 or 1.

n_spheres(=0)

(auto-computed)

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

saveState([(str)outputFile='state'[, (bool)state=0[, (bool)bz2=True]]]) → None

Save a file with positions, can be later reloaded in order to define state 0 or 1.

setState([(bool)state=0]) → None

Make the current state of the simulation the initial (0) or final (1) configuration for the definition of displacement increments, use only state=0 if you just want to get volmumes and porosity.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

triangulate([(bool)reset=True]) → None

triangulate spheres of the packing

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

volume([(int)id=0]) → float

Returns the volume of Voronoi’s cell of a sphere.

class yade.wrapper.TetraVolumetricLaw(inherits GlobalEngine → Engine → Serializable)

Calculate physical response of 2 tetrahedra in interaction, based on penetration configuration given by TTetraGeom.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.TimeStepper(inherits GlobalEngine → Engine → Serializable)

Engine defining time-step (fundamental class)

active(=true)

is the engine active?

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timeStepUpdateInterval(=1)

dt update interval

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.TorqueRecorder(inherits Recorder → PeriodicEngine → GlobalEngine → Engine → Serializable)

Engine saves the total torque according to the given axis and ZeroPoint, the force is taken from bodies, listed in ids For instance, can be useful for defining the torque, which affects on ball mill during its work.

addIterNum(=false)

Adds an iteration number to the file name, when the file was created. Useful for creating new files at each call (false by default)

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

file(=uninitalized)

Name of file to save to; must not be empty.

firstIterRun(=0)

Sets the step number, at each an engine should be executed for the first time (disabled by default).

ids(=uninitalized)

List of bodies whose state will be measured

initRun(=false)

Run the first time we are called as well.

iterLast(=0)

Tracks step number of last run (auto-updated).

iterPeriod(=0, deactivated)

Periodicity criterion using step number (deactivated if <= 0)

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

nDo(=-1, deactivated)

Limit number of executions by this number (deactivated if negative)

nDone(=0)

Track number of executions (cummulative) (auto-updated).

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

realLast(=0)

Tracks real time of last run (auto-updated).

realPeriod(=0, deactivated)

Periodicity criterion using real (wall clock, computation, human) time (deactivated if <=0)

rotationAxis(=Vector3r::UnitX())

Rotation axis

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

totalTorque(=0)

Resultant torque, returning by the function.

truncate(=false)

Whether to delete current file contents, if any, when opening (false by default)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

virtLast(=0)

Tracks virtual time of last run (auto-updated).

virtPeriod(=0, deactivated)

Periodicity criterion using virtual (simulation) time (deactivated if <= 0)

zeroPoint(=Vector3r::Zero())

Point of rotation center

class yade.wrapper.TriaxialStateRecorder(inherits Recorder → PeriodicEngine → GlobalEngine → Engine → Serializable)

Engine recording triaxial variables (see the variables list in the first line of the output file). This recorder needs TriaxialCompressionEngine or ThreeDTriaxialEngine present in the simulation).

addIterNum(=false)

Adds an iteration number to the file name, when the file was created. Useful for creating new files at each call (false by default)

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

file(=uninitalized)

Name of file to save to; must not be empty.

firstIterRun(=0)

Sets the step number, at each an engine should be executed for the first time (disabled by default).

initRun(=false)

Run the first time we are called as well.

iterLast(=0)

Tracks step number of last run (auto-updated).

iterPeriod(=0, deactivated)

Periodicity criterion using step number (deactivated if <= 0)

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

nDo(=-1, deactivated)

Limit number of executions by this number (deactivated if negative)

nDone(=0)

Track number of executions (cummulative) (auto-updated).

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

porosity(=1)

porosity of the packing [-]

realLast(=0)

Tracks real time of last run (auto-updated).

realPeriod(=0, deactivated)

Periodicity criterion using real (wall clock, computation, human) time (deactivated if <=0)

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

truncate(=false)

Whether to delete current file contents, if any, when opening (false by default)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

virtLast(=0)

Tracks virtual time of last run (auto-updated).

virtPeriod(=0, deactivated)

Periodicity criterion using virtual (simulation) time (deactivated if <= 0)

class yade.wrapper.VTKRecorder(inherits PeriodicEngine → GlobalEngine → Engine → Serializable)

Engine recording snapshots of simulation into series of *.vtu files, readable by VTK-based postprocessing programs such as Paraview. Both bodies (spheres and facets) and interactions can be recorded, with various vector/scalar quantities that are defined on them.

PeriodicEngine.initRun is initialized to True automatically.

Key(="")

Necessary if recorders contains ‘cracks’. A string specifying the name of file ‘cracks___.txt’ that is considered in this case (see corresponding attribute).

ascii(=false)

Store data as readable text in the XML file (sets vtkXMLWriter data mode to vtkXMLWriter::Ascii, while the default is Appended

compress(=false)

Compress output XML files [experimental].

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

fileName(="")

Base file name; it will be appended with {spheres,intrs,facets}-243100.vtu (unless multiblock is True) depending on active recorders and step number (243100 in this case). It can contain slashes, but the directory must exist already.

firstIterRun(=0)

Sets the step number, at each an engine should be executed for the first time (disabled by default).

initRun(=false)

Run the first time we are called as well.

iterLast(=0)

Tracks step number of last run (auto-updated).

iterPeriod(=0, deactivated)

Periodicity criterion using step number (deactivated if <= 0)

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

mask(=0)

If mask defined, only bodies with corresponding groupMask will be exported. If 0, all bodies will be exported.

multiblock(=false)

Use multi-block (.vtm) files to store data, rather than separate .vtu files.

nDo(=-1, deactivated)

Limit number of executions by this number (deactivated if negative)

nDone(=0)

Track number of executions (cummulative) (auto-updated).

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

realLast(=0)

Tracks real time of last run (auto-updated).

realPeriod(=0, deactivated)

Periodicity criterion using real (wall clock, computation, human) time (deactivated if <=0)

recorders

List of active recorders (as strings). all (the default value) enables all base and generic recorders.

Base recorders

Base recorders save the geometry (unstructured grids) on which other data is defined. They are implicitly activated by many of the other recorders. Each of them creates a new file (or a block, if multiblock is set).

spheres
Saves positions and radii (radii) of spherical particles.
facets
Save facets positions (vertices).
boxes
Save boxes positions (edges).
intr
Store interactions as lines between nodes at respective particles positions. Additionally stores magnitude of normal (forceN) and shear (absForceT) forces on interactions (the geom).

Generic recorders

Generic recorders do not depend on specific model being used and save commonly useful data.

id
Saves id’s (field id) of spheres; active only if spheres is active.
mass
Saves masses (field mass) of spheres; active only if spheres is active.
clumpId
Saves id’s of clumps to which each sphere belongs (field clumpId); active only if spheres is active.
colors
Saves colors of spheres and of facets (field color); only active if spheres or facets are activated.
mask
Saves groupMasks of spheres and of facets (field mask); only active if spheres or facets are activated.
materialId
Saves materialID of spheres and of facets; only active if spheres or facets are activated.
coordNumber
Saves coordination number (number of neighbours) of spheres and of facets; only active if spheres or facets are activated.
velocity
Saves linear and angular velocities of spherical particles as Vector3 and length(fields linVelVec, linVelLen and angVelVec, angVelLen respectively``); only effective with spheres.
stress
Saves stresses of spheres and of facets as Vector3 and length; only active if spheres or facets are activated.
force
Saves force and torque of spheres, facets and boxes as Vector3 and length (norm); only active if spheres, facets or boxes are activated.
pericell
Saves the shape of the cell (simulation has to be periodic).
bstresses
Saves per-particle principal stresses (sigI >= sigII >= sigIII) and associated principal directions (dirI/II/III). Per-particle stress tensors are given by bodyStressTensors (positive values for tensile states).

Specific recorders

The following should only be activated in appropriate cases, otherwise crashes can occur due to violation of type presuppositions.

cpm
Saves data pertaining to the concrete model: cpmDamage (normalized residual strength averaged on particle), cpmStress (stress on particle); intr is activated automatically by cpm
wpm
Saves data pertaining to the wire particle model: wpmForceNFactor shows the loading factor for the wire, e.g. normal force divided by threshold normal force.
jcfpm
Saves data pertaining to the rock (smooth)-jointed model: damage is defined by JCFpmState.tensBreak + JCFpmState.shearBreak; intr is activated automatically by jcfpm, and on joint or cohesive interactions can be vizualized.
cracks
Saves other data pertaining to the rock model: cracks shows locations where cohesive bonds failed during the simulation, with their types (0/1 for tensile/shear breakages), their sizes (0.5*(R1+R2)), and their normal directions. The corresponding attribute has to be activated, and Key attributes have to be consistent.

skipFacetIntr(=true)

Skip interactions that are not of sphere-sphere type (e.g. sphere-facet, sphere-box...), when saving interactions

skipNondynamic(=false)

Skip non-dynamic spheres (but not facets).

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

virtLast(=0)

Tracks virtual time of last run (auto-updated).

virtPeriod(=0, deactivated)

Periodicity criterion using virtual (simulation) time (deactivated if <= 0)

BoundaryController

digraph BoundaryController {
        rankdir=RL;
        margin=.2;
        "BoundaryController" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.BoundaryController"];
        "Disp2DPropLoadEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Disp2DPropLoadEngine"];
        "Disp2DPropLoadEngine" -> "BoundaryController" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Peri3dController" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Peri3dController"];
        "Peri3dController" -> "BoundaryController" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "PeriIsoCompressor" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.PeriIsoCompressor"];
        "PeriIsoCompressor" -> "BoundaryController" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "KinemCTDEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.KinemCTDEngine"];
        "KinemCTDEngine" -> "KinemSimpleShearBox" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "KinemCNSEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.KinemCNSEngine"];
        "KinemCNSEngine" -> "KinemSimpleShearBox" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "TriaxialCompressionEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.TriaxialCompressionEngine"];
        "TriaxialCompressionEngine" -> "TriaxialStressController" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "KinemCNLEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.KinemCNLEngine"];
        "KinemCNLEngine" -> "KinemSimpleShearBox" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "UniaxialStrainer" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.UniaxialStrainer"];
        "UniaxialStrainer" -> "BoundaryController" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "ThreeDTriaxialEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.ThreeDTriaxialEngine"];
        "ThreeDTriaxialEngine" -> "TriaxialStressController" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "PeriTriaxController" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.PeriTriaxController"];
        "PeriTriaxController" -> "BoundaryController" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "TriaxialStressController" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.TriaxialStressController"];
        "TriaxialStressController" -> "BoundaryController" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "KinemCNDEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.KinemCNDEngine"];
        "KinemCNDEngine" -> "KinemSimpleShearBox" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "KinemSimpleShearBox" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.KinemSimpleShearBox"];
        "KinemSimpleShearBox" -> "BoundaryController" [arrowsize=0.5,style="setlinewidth(0.5)"];
}

class yade.wrapper.BoundaryController(inherits GlobalEngine → Engine → Serializable)

Base for engines controlling boundary conditions of simulations. Not to be used directly.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Disp2DPropLoadEngine(inherits BoundaryController → GlobalEngine → Engine → Serializable)

Disturbs a simple shear sample in a given displacement direction

This engine allows one to apply, on a simple shear sample, a loading controlled by du/dgamma = cste, which is equivalent to du + cste’ * dgamma = 0 (proportionnal path loadings). To do so, the upper plate of the simple shear box is moved in a given direction (corresponding to a given du/dgamma), whereas lateral plates are moved so that the box remains closed. This engine can easily be used to perform directionnal probes, with a python script launching successivly the same .xml which contains this engine, after having modified the direction of loading (see theta attribute). That’s why this Engine contains a saveData procedure which can save data on the state of the sample at the end of the loading (in case of successive loadings - for successive directions - through a python script, each line would correspond to one direction of loading).

Key(="")

string to add at the names of the saved files, and of the output file filled by saveData

LOG(=false)

boolean controling the output of messages on the screen

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

id_boxback(=4)

the id of the wall at the back of the sample

id_boxbas(=1)

the id of the lower wall

id_boxfront(=5)

the id of the wall in front of the sample

id_boxleft(=0)

the id of the left wall

id_boxright(=2)

the id of the right wall

id_topbox(=3)

the id of the upper wall

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

nbre_iter(=0)

the number of iterations of loading to perform

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

theta(=0.0)

the angle, in a (gamma,h=-u) plane from the gamma - axis to the perturbation vector (trigo wise) [degrees]

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

v(=0.0)

the speed at which the perturbation is imposed. In case of samples which are more sensitive to normal loadings than tangential ones, one possibility is to take v = V_shear - | (V_shear-V_comp)*sin(theta) | => v=V_shear in shear; V_comp in compression [m/s]

class yade.wrapper.KinemCNDEngine(inherits KinemSimpleShearBox → BoundaryController → GlobalEngine → Engine → Serializable)

To apply a Constant Normal Displacement (CND) shear for a parallelogram box

This engine, designed for simulations implying a simple shear box (SimpleShear Preprocessor or scripts/simpleShear.py), allows one to perform a constant normal displacement shear, by translating horizontally the upper plate, while the lateral ones rotate so that they always keep contact with the lower and upper walls.

Key(="")

string to add at the names of the saved files

LOG(=false)

boolean controling the output of messages on the screen

alpha(=Mathr::PI/2.0)

the angle from the lower box to the left box (trigo wise). Measured by this Engine. Has to be saved, but not to be changed by the user.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

f0(=0.0)

the (vertical) force acting on the upper plate on the very first time step (determined by the Engine). Controls of the loadings in case of KinemCNSEngine or KinemCNLEngine will be done according to this initial value [N]. Has to be saved, but not to be changed by the user.

firstRun(=true)

boolean set to false as soon as the engine has done its job one time : useful to know if initial height of, and normal force sustained by, the upper box are known or not (and thus if they have to be initialized). Has to be saved, but not to be changed by the user.

gamma(=0.0)

the current value of the tangential displacement

gamma_save(=uninitalized)

vector with the values of gamma at which a save of the simulation is performed [m]

gammalim(=0.0)

the value of the tangential displacement at wich the displacement is stopped [m]

id_boxback(=4)

the id of the wall at the back of the sample

id_boxbas(=1)

the id of the lower wall

id_boxfront(=5)

the id of the wall in front of the sample

id_boxleft(=0)

the id of the left wall

id_boxright(=2)

the id of the right wall

id_topbox(=3)

the id of the upper wall

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

max_vel(=1.0)

to limit the speed of the vertical displacements done to control \sigma (CNL or CNS cases) [m/s]

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

shearSpeed(=0.0)

the speed at which the shear is performed : speed of the upper plate [m/s]

temoin_save(=uninitalized)

vector (same length as ‘gamma_save’ for ex), with 0 or 1 depending whether the save for the corresponding value of gamma has been done (1) or not (0). Has to be saved, but not to be changed by the user.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wallDamping(=0.2)

the vertical displacements done to to control \sigma (CNL or CNS cases) are in fact damped, through this wallDamping

y0(=0.0)

the height of the upper plate at the very first time step : the engine finds its value [m]. Has to be saved, but not to be changed by the user.

class yade.wrapper.KinemCNLEngine(inherits KinemSimpleShearBox → BoundaryController → GlobalEngine → Engine → Serializable)

To apply a constant normal stress shear (i.e. Constant Normal Load : CNL) for a parallelogram box (simple shear box : SimpleShear Preprocessor or scripts/simpleShear.py)

This engine allows one to translate horizontally the upper plate while the lateral ones rotate so that they always keep contact with the lower and upper walls.

In fact the upper plate can move not only horizontally but also vertically, so that the normal stress acting on it remains constant (this constant value is not chosen by the user but is the one that exists at the beginning of the simulation)

The right vertical displacements which will be allowed are computed from the rigidity Kn of the sample over the wall (so to cancel a deltaSigma, a normal dplt deltaSigma*S/(Kn) is set)

The movement is moreover controlled by the user via a shearSpeed which will be the speed of the upper wall, and by a maximum value of horizontal displacement gammalim, after which the shear stops.

Note

Not only the positions of walls are updated but also their speeds, which is all but useless considering the fact that in the contact laws these velocities of bodies are used to compute values of tangential relative displacements.

Warning

Because of this last point, if you want to use later saves of simulations executed with this Engine, but without that stopMovement was executed, your boxes will keep their speeds => you will have to cancel them ‘by hand’ in the .xml.

Key(="")

string to add at the names of the saved files

LOG(=false)

boolean controling the output of messages on the screen

alpha(=Mathr::PI/2.0)

the angle from the lower box to the left box (trigo wise). Measured by this Engine. Has to be saved, but not to be changed by the user.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

f0(=0.0)

the (vertical) force acting on the upper plate on the very first time step (determined by the Engine). Controls of the loadings in case of KinemCNSEngine or KinemCNLEngine will be done according to this initial value [N]. Has to be saved, but not to be changed by the user.

firstRun(=true)

boolean set to false as soon as the engine has done its job one time : useful to know if initial height of, and normal force sustained by, the upper box are known or not (and thus if they have to be initialized). Has to be saved, but not to be changed by the user.

gamma(=0.0)

current value of tangential displacement [m]

gamma_save(=uninitalized)

vector with the values of gamma at which a save of the simulation is performed [m]

gammalim(=0.0)

the value of tangential displacement (of upper plate) at wich the shearing is stopped [m]

id_boxback(=4)

the id of the wall at the back of the sample

id_boxbas(=1)

the id of the lower wall

id_boxfront(=5)

the id of the wall in front of the sample

id_boxleft(=0)

the id of the left wall

id_boxright(=2)

the id of the right wall

id_topbox(=3)

the id of the upper wall

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

max_vel(=1.0)

to limit the speed of the vertical displacements done to control \sigma (CNL or CNS cases) [m/s]

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

shearSpeed(=0.0)

the speed at wich the shearing is performed : speed of the upper plate [m/s]

temoin_save(=uninitalized)

vector (same length as ‘gamma_save’ for ex), with 0 or 1 depending whether the save for the corresponding value of gamma has been done (1) or not (0). Has to be saved, but not to be changed by the user.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wallDamping(=0.2)

the vertical displacements done to to control \sigma (CNL or CNS cases) are in fact damped, through this wallDamping

y0(=0.0)

the height of the upper plate at the very first time step : the engine finds its value [m]. Has to be saved, but not to be changed by the user.

class yade.wrapper.KinemCNSEngine(inherits KinemSimpleShearBox → BoundaryController → GlobalEngine → Engine → Serializable)

To apply a Constant Normal Stifness (CNS) shear for a parallelogram box (simple shear)

This engine, useable in simulations implying one deformable parallelepipedic box, allows one to translate horizontally the upper plate while the lateral ones rotate so that they always keep contact with the lower and upper walls. The upper plate can move not only horizontally but also vertically, so that the normal rigidity defined by DeltaF(upper plate)/DeltaU(upper plate) = constant (= KnC defined by the user).

The movement is moreover controlled by the user via a shearSpeed which is the horizontal speed of the upper wall, and by a maximum value of horizontal displacement gammalim (of the upper plate), after which the shear stops.

Note

not only the positions of walls are updated but also their speeds, which is all but useless considering the fact that in the contact laws these velocities of bodies are used to compute values of tangential relative displacements.

Warning

But, because of this last point, if you want to use later saves of simulations executed with this Engine, but without that stopMovement was executed, your boxes will keep their speeds => you will have to cancel them by hand in the .xml

Key(="")

string to add at the names of the saved files

KnC(=10.0e6)

the normal rigidity chosen by the user [MPa/mm] - the conversion in Pa/m will be made

LOG(=false)

boolean controling the output of messages on the screen

alpha(=Mathr::PI/2.0)

the angle from the lower box to the left box (trigo wise). Measured by this Engine. Has to be saved, but not to be changed by the user.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

f0(=0.0)

the (vertical) force acting on the upper plate on the very first time step (determined by the Engine). Controls of the loadings in case of KinemCNSEngine or KinemCNLEngine will be done according to this initial value [N]. Has to be saved, but not to be changed by the user.

firstRun(=true)

boolean set to false as soon as the engine has done its job one time : useful to know if initial height of, and normal force sustained by, the upper box are known or not (and thus if they have to be initialized). Has to be saved, but not to be changed by the user.

gamma(=0.0)

current value of tangential displacement [m]

gammalim(=0.0)

the value of tangential displacement (of upper plate) at wich the shearing is stopped [m]

id_boxback(=4)

the id of the wall at the back of the sample

id_boxbas(=1)

the id of the lower wall

id_boxfront(=5)

the id of the wall in front of the sample

id_boxleft(=0)

the id of the left wall

id_boxright(=2)

the id of the right wall

id_topbox(=3)

the id of the upper wall

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

max_vel(=1.0)

to limit the speed of the vertical displacements done to control \sigma (CNL or CNS cases) [m/s]

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

shearSpeed(=0.0)

the speed at wich the shearing is performed : speed of the upper plate [m/s]

temoin_save(=uninitalized)

vector (same length as ‘gamma_save’ for ex), with 0 or 1 depending whether the save for the corresponding value of gamma has been done (1) or not (0). Has to be saved, but not to be changed by the user.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wallDamping(=0.2)

the vertical displacements done to to control \sigma (CNL or CNS cases) are in fact damped, through this wallDamping

y0(=0.0)

the height of the upper plate at the very first time step : the engine finds its value [m]. Has to be saved, but not to be changed by the user.

class yade.wrapper.KinemCTDEngine(inherits KinemSimpleShearBox → BoundaryController → GlobalEngine → Engine → Serializable)

To compress a simple shear sample by moving the upper box in a vertical way only, so that the tangential displacement (defined by the horizontal gap between the upper and lower boxes) remains constant (thus, the CTD = Constant Tangential Displacement). The lateral boxes move also to keep always contact. All that until this box is submitted to a given stress (targetSigma). Moreover saves are executed at each value of stresses stored in the vector sigma_save, and at targetSigma

Key(="")

string to add at the names of the saved files

LOG(=false)

boolean controling the output of messages on the screen

alpha(=Mathr::PI/2.0)

the angle from the lower box to the left box (trigo wise). Measured by this Engine. Has to be saved, but not to be changed by the user.

compSpeed(=0.0)

(vertical) speed of the upper box : >0 for real compression, <0 for unloading [m/s]

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

f0(=0.0)

the (vertical) force acting on the upper plate on the very first time step (determined by the Engine). Controls of the loadings in case of KinemCNSEngine or KinemCNLEngine will be done according to this initial value [N]. Has to be saved, but not to be changed by the user.

firstRun(=true)

boolean set to false as soon as the engine has done its job one time : useful to know if initial height of, and normal force sustained by, the upper box are known or not (and thus if they have to be initialized). Has to be saved, but not to be changed by the user.

id_boxback(=4)

the id of the wall at the back of the sample

id_boxbas(=1)

the id of the lower wall

id_boxfront(=5)

the id of the wall in front of the sample

id_boxleft(=0)

the id of the left wall

id_boxright(=2)

the id of the right wall

id_topbox(=3)

the id of the upper wall

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

max_vel(=1.0)

to limit the speed of the vertical displacements done to control \sigma (CNL or CNS cases) [m/s]

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

sigma_save(=uninitalized)

vector with the values of sigma at which a save of the simulation should be performed [kPa]

targetSigma(=0.0)

the value of sigma at which the compression should stop [kPa]

temoin_save(=uninitalized)

vector (same length as ‘gamma_save’ for ex), with 0 or 1 depending whether the save for the corresponding value of gamma has been done (1) or not (0). Has to be saved, but not to be changed by the user.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wallDamping(=0.2)

the vertical displacements done to to control \sigma (CNL or CNS cases) are in fact damped, through this wallDamping

y0(=0.0)

the height of the upper plate at the very first time step : the engine finds its value [m]. Has to be saved, but not to be changed by the user.

class yade.wrapper.KinemSimpleShearBox(inherits BoundaryController → GlobalEngine → Engine → Serializable)

This class is supposed to be a mother class for all Engines performing loadings on the simple shear box of SimpleShear. It is not intended to be used by itself, but its declaration and implentation will thus contain all what is useful for all these Engines. The script simpleShear.py illustrates the use of the various corresponding Engines.

Key(="")

string to add at the names of the saved files

LOG(=false)

boolean controling the output of messages on the screen

alpha(=Mathr::PI/2.0)

the angle from the lower box to the left box (trigo wise). Measured by this Engine. Has to be saved, but not to be changed by the user.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

f0(=0.0)

the (vertical) force acting on the upper plate on the very first time step (determined by the Engine). Controls of the loadings in case of KinemCNSEngine or KinemCNLEngine will be done according to this initial value [N]. Has to be saved, but not to be changed by the user.

firstRun(=true)

boolean set to false as soon as the engine has done its job one time : useful to know if initial height of, and normal force sustained by, the upper box are known or not (and thus if they have to be initialized). Has to be saved, but not to be changed by the user.

id_boxback(=4)

the id of the wall at the back of the sample

id_boxbas(=1)

the id of the lower wall

id_boxfront(=5)

the id of the wall in front of the sample

id_boxleft(=0)

the id of the left wall

id_boxright(=2)

the id of the right wall

id_topbox(=3)

the id of the upper wall

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

max_vel(=1.0)

to limit the speed of the vertical displacements done to control \sigma (CNL or CNS cases) [m/s]

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

temoin_save(=uninitalized)

vector (same length as ‘gamma_save’ for ex), with 0 or 1 depending whether the save for the corresponding value of gamma has been done (1) or not (0). Has to be saved, but not to be changed by the user.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wallDamping(=0.2)

the vertical displacements done to to control \sigma (CNL or CNS cases) are in fact damped, through this wallDamping

y0(=0.0)

the height of the upper plate at the very first time step : the engine finds its value [m]. Has to be saved, but not to be changed by the user.

class yade.wrapper.Peri3dController(inherits BoundaryController → GlobalEngine → Engine → Serializable)

Class for controlling independently all 6 components of “engineering” stress and strain of periodic Cell. goal are the goal values, while stressMask determines which components prescribe stress and which prescribe strain.

If the strain is prescribed, appropriate strain rate is directly applied. If the stress is prescribed, the strain predictor is used: from stress values in two previous steps the value of strain rate is prescribed so as the value of stress in the next step is as close as possible to the ideal one. Current algorithm is extremly simple and probably will be changed in future, but is roboust enough and mostly works fine.

Stress error (difference between actual and ideal stress) is evaluated in current and previous steps (\mathrm{d}\sigma_i,\mathrm{d}\sigma_{i-1}). Linear extrapolation is used to estimate error in the next step

\mathrm{d}\sigma_{i+1}=2\mathrm{d}\sigma_i - \mathrm{d}\sigma_{i-1}

According to this error, the strain rate is modified by mod parameter

\mathrm{d}\sigma_{i+1}\left\{\begin{array}{c} >0 \rightarrow \dot{\varepsilon}_{i+1} = \dot{\varepsilon}_i - \max(\mathrm{abs}(\dot{\boldsymbol{\varepsilon}}_i))\cdot\mathrm{mod} \\ <0 \rightarrow \dot{\varepsilon}_{i+1} = \dot{\varepsilon}_i + \max(\mathrm{abs}(\dot{\boldsymbol{\varepsilon}}_i))\cdot\mathrm{mod} \end{array}\right.

According to this fact, the prescribed stress will (almost) never have exact prescribed value, but the difference would be very small (and decreasing for increasing nSteps. This approach works good if one of the dominant strain rates is prescribed. If all stresses are prescribed or if all goal strains is prescribed as zero, a good estimation is needed for the first step, therefore the compliance matrix is estimated (from user defined estimations of macroscopic material parameters youngEstimation and poissonEstimation) and respective strain rates is computed form prescribed stress rates and compliance matrix (the estimation of compliance matrix could be computed autamatically avoiding user inputs of this kind).

The simulation on rotated periodic cell is also supported. Firstly, the polar decomposition is performed on cell’s transformation matrix trsf \mathcal{T}=\mat{U}\mat{P}, where \mat{U} is orthogonal (unitary) matrix representing rotation and \mat{P} is a positive semi-definite Hermitian matrix representing strain. A logarithm of \mat{P} should be used to obtain realistic values at higher strain values (not implemented yet). A prescribed strain increment in global coordinates \mathrm{d}t\cdot\dot{\boldsymbol{\varepsilon}} is properly rotated to cell’s local coordinates and added to \mat{P}

\mat{P}_{i+1}=\mat{P}+\mat{U}^{\mathsf{T}}\mathrm{d}t\cdot\dot{\boldsymbol{\varepsilon}}\mat{U}

The new value of trsf is computed at \mat{T}_{i+1}=\mat{UP}_{i+1}. From current and next trsf the cell’s velocity gradient velGrad is computed (according to its definition) as

\mat{V} = (\mat{T}_{i+1}\mat{T}^{-1}-\mat{I})/\mathrm{d}t

Current implementation allow user to define independent loading “path” for each prescribed component. i.e. define the prescribed value as a function of time (or progress or steps). See Paths.

Examples examples/test/peri3dController_example1.py and examples/test/peri3dController_triaxialCompression.py explain usage and inputs of Peri3dController, examples/test/peri3dController_shear.py is an example of using shear components and also simulation on rotated cell.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

doneHook(=uninitalized)

Python command (as string) to run when nSteps is achieved. If empty, the engine will be set dead.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

goal(=Vector6r::Zero())

Goal state; only the upper triangular matrix is considered; each component is either prescribed stress or strain, depending on stressMask.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

lenPe(=0)

Peri3dController internal variable

lenPs(=0)

Peri3dController internal variable

maxStrain(=1e6)

Maximal asolute value of strain allowed in the simulation. If reached, the simulation is considered as finished

maxStrainRate(=1e3)

Maximal absolute value of strain rate (both normal and shear components of strain)

mod(=.1)

Predictor modificator, by trail-and-error analysis the value 0.1 was found as the best.

nSteps(=1000)

Number of steps of the simulation.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

pathSizes(=Vector6i::Zero())

Peri3dController internal variable

pathsCounter(=Vector6i::Zero())

Peri3dController internal variable

pe(=Vector6i::Zero())

Peri3dController internal variable

poissonEstimation(=.25)

Estimation of macroscopic Poisson’s ratio, used used for the first simulation step

progress(=0.)

Actual progress of the simulation with Controller.

ps(=Vector6i::Zero())

Peri3dController internal variable

strain(=Vector6r::Zero())

Current strain (deformation) vector (\varepsilon_x,\varepsilon_y,\varepsilon_z,\gamma_{yz},\gamma_{zx},\gamma_{xy}) (auto-updated).

strainGoal(=Vector6r::Zero())

Peri3dController internal variable

strainRate(=Vector6r::Zero())

Current strain rate vector.

stress(=Vector6r::Zero())

Current stress vector (\sigma_x,\sigma_y,\sigma_z,\tau_{yz},\tau_{zx},\tau_{xy})|yupdate|.

stressGoal(=Vector6r::Zero())

Peri3dController internal variable

stressIdeal(=Vector6r::Zero())

Ideal stress vector at current time step.

stressMask(=0, all strains)

mask determining whether components of goal are strain (0) or stress (1). The order is 00,11,22,12,02,01 from the least significant bit. (e.g. 0b000011 is stress 00 and stress 11).

stressRate(=Vector6r::Zero())

Current stress rate vector (that is prescribed, the actual one slightly differ).

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

xxPath

“Time function” (piecewise linear) for xx direction. Sequence of couples of numbers. First number is time, second number desired value of respective quantity (stress or strain). The last couple is considered as final state (equal to (nSteps, goal)), other values are relative to this state.

Example: nSteps=1000, goal[0]=300, xxPath=((2,3),(4,1),(5,2))

at step 400 (=5*1000/2) the value is 450 (=3*300/2),

at step 800 (=4*1000/5) the value is 150 (=1*300/2),

at step 1000 (=5*1000/5=nSteps) the value is 300 (=2*300/2=goal[0]).

See example scripts/test/peri3dController_example1 for illusration.

xyPath(=vector<Vector2r>(1, Vector2r::Ones()))

Time function for xy direction, see xxPath

youngEstimation(=1e20)

Estimation of macroscopic Young’s modulus, used for the first simulation step

yyPath(=vector<Vector2r>(1, Vector2r::Ones()))

Time function for yy direction, see xxPath

yzPath(=vector<Vector2r>(1, Vector2r::Ones()))

Time function for yz direction, see xxPath

zxPath(=vector<Vector2r>(1, Vector2r::Ones()))

Time function for zx direction, see xxPath

zzPath(=vector<Vector2r>(1, Vector2r::Ones()))

Time function for zz direction, see xxPath

class yade.wrapper.PeriIsoCompressor(inherits BoundaryController → GlobalEngine → Engine → Serializable)

Compress/decompress cloud of spheres by controlling periodic cell size until it reaches prescribed average stress, then moving to next stress value in given stress series.

charLen(=-1.)

Characteristic length, should be something like mean particle diameter (default -1=invalid value))

currUnbalanced

Current value of unbalanced force

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

doneHook(="")

Python command to be run when reaching the last specified stress

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

globalUpdateInt(=20)

how often to recompute average stress, stiffness and unbalanced force

keepProportions(=true)

Exactly keep proportions of the cell (stress is controlled based on average, not its components

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

maxSpan(=-1.)

Maximum body span in terms of bbox, to prevent periodic cell getting too small. (auto-computed)

maxUnbalanced(=1e-4)

if actual unbalanced force is smaller than this number, the packing is considered stable,

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

sigma

Current stress value

state(=0)

Where are we at in the stress series

stresses(=uninitalized)

Stresses that should be reached, one after another

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.PeriTriaxController(inherits BoundaryController → GlobalEngine → Engine → Serializable)

Engine for independently controlling stress or strain in periodic simulations.

strainStress contains absolute values for the controlled quantity, and stressMask determines meaning of those values (0 for strain, 1 for stress): e.g. ( 1<<0 | 1<<2 ) = 1 | 4 = 5 means that strainStress[0] and strainStress[2] are stress values, and strainStress[1] is strain.

See scripts/test/periodic-triax.py for a simple example.

absStressTol(=1e3)

Absolute stress tolerance

currUnbalanced(=NaN)

current unbalanced force (updated every globUpdate) (auto-updated)

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

doneHook(=uninitalized)

python command to be run when the desired state is reached

dynCell(=false)

Imposed stress can be controlled using the packing stiffness or by applying the laws of dynamic (dynCell=true). Don’t forget to assign a mass to the cell.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

externalWork(=0)

Work input from boundary controller.

globUpdate(=5)

How often to recompute average stress, stiffness and unbalaced force.

goal

Desired stress or strain values (depending on stressMask), strains defined as strain(i)=log(Fii).

Warning

Strains are relative to the O.cell.refSize (reference cell size), not the current one (e.g. at the moment when the new strain value is set).

growDamping(=.25)

Damping of cell resizing (0=perfect control, 1=no control at all); see also wallDamping in TriaxialStressController.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

mass(=NaN)

mass of the cell (user set); if not set and dynCell is used, it will be computed as sum of masses of all particles.

maxBodySpan(=Vector3r::Zero())

maximum body dimension (auto-computed)

maxStrainRate(=Vector3r(1, 1, 1))

Maximum strain rate of the periodic cell.

maxUnbalanced(=1e-4)

maximum unbalanced force.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

prevGrow(=Vector3r::Zero())

previous cell grow

relStressTol(=3e-5)

Relative stress tolerance

stiff(=Vector3r::Zero())

average stiffness (only every globUpdate steps recomputed from interactions) (auto-updated)

strain(=Vector3r::Zero())

cell strain (auto-updated)

strainRate(=Vector3r::Zero())

cell strain rate (auto-updated)

stress(=Vector3r::Zero())

diagonal terms of the stress tensor

stressMask(=0, all strains)

mask determining strain/stress (0/1) meaning for goal components

stressTensor(=Matrix3r::Zero())

average stresses, updated at every step (only every globUpdate steps recomputed from interactions if !dynCell)

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.ThreeDTriaxialEngine(inherits TriaxialStressController → BoundaryController → GlobalEngine → Engine → Serializable)

The engine perform a triaxial compression with a control in direction ‘i’ in stress (if stressControl_i) else in strain.

For a stress control the imposed stress is specified by ‘sigma_i’ with a ‘max_veli’ depending on ‘strainRatei’. To obtain the same strain rate in stress control than in strain control you need to set ‘wallDamping = 0.8’. For a strain control the imposed strain is specified by ‘strainRatei’. With this engine you can also perform internal compaction by growing the size of particles by using TriaxialStressController::controlInternalStress. For that, just switch on ‘internalCompaction=1’ and fix sigma_iso=value of mean pressure that you want at the end of the internal compaction.

Warning

This engine is deprecated, please switch to TriaxialStressController if you expect long term support.

Key(="")

A string appended at the end of all files, use it to name simulations.

UnbalancedForce(=1)

mean resultant forces divided by mean contact force

boxVolume

Total packing volume.

computeStressStrainInterval(=10)

currentStrainRate1(=0)

current strain rate in direction 1 - converging to ThreeDTriaxialEngine::strainRate1 (./s)

currentStrainRate2(=0)

current strain rate in direction 2 - converging to ThreeDTriaxialEngine::strainRate2 (./s)

currentStrainRate3(=0)

current strain rate in direction 3 - converging to ThreeDTriaxialEngine::strainRate3 (./s)

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

depth(=0)

size of the box (2-axis) (auto-updated)

depth0(=0)

Reference size for strain definition. See TriaxialStressController::depth

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

externalWork(=0)

Energy provided by boundaries.|yupdate|

finalMaxMultiplier(=1.00001)

max multiplier of diameters during internal compaction (secondary precise adjustment - TriaxialStressController::maxMultiplier is used in the initial stage)

frictionAngleDegree(=-1)

Value of friction used in the simulation if (updateFrictionAngle)

goal1(=0)

prescribed stress/strain rate on axis 1, as defined by TriaxialStressController::stressMask

goal2(=0)

prescribed stress/strain rate on axis 2, as defined by TriaxialStressController::stressMask

goal3(=0)

prescribed stress/strain rate on axis 3, as defined by TriaxialStressController::stressMask

height(=0)

size of the box (1-axis) (auto-updated)

height0(=0)

Reference size for strain definition. See TriaxialStressController::height

internalCompaction(=true)

Switch between ‘external’ (walls) and ‘internal’ (growth of particles) compaction.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

maxMultiplier(=1.001)

max multiplier of diameters during internal compaction (initial fast increase - TriaxialStressController::finalMaxMultiplier is used in a second stage)

max_vel(=1)

Maximum allowed walls velocity [m/s]. This value superseeds the one assigned by the stress controller if the later is higher. max_vel can be set to infinity in many cases, but sometimes helps stabilizing packings. Based on this value, different maxima are computed for each axis based on the dimensions of the sample, so that if each boundary moves at its maximum velocity, the strain rate will be isotropic (see e.g. TriaxialStressController::max_vel1).

max_vel1

see TriaxialStressController::max_vel (auto-computed)

max_vel2

see TriaxialStressController::max_vel (auto-computed)

max_vel3

see TriaxialStressController::max_vel (auto-computed)

meanStress(=0)

Mean stress in the packing. (auto-updated)

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

particlesVolume

Total volume of particles (clumps and spheres).

porosity

Porosity of the packing.

previousMultiplier(=1)

(auto-updated)

previousStress(=0)

(auto-updated)

radiusControlInterval(=10)

setContactProperties((float)arg2) → None

Assign a new friction angle (degrees) to dynamic bodies and relative interactions

spheresVolume

Shorthand for TriaxialStressController::particlesVolume

stiffnessUpdateInterval(=10)

target strain rate (./s)

strain

Current strain in a vector (exx,eyy,ezz). The values reflect true (logarithmic) strain.

strainDamping(=0.9997)

factor used for smoothing changes in effective strain rate. If target rate is TR, then (1-damping)*(TR-currentRate) will be added at each iteration. With damping=0, rate=target all the time. With damping=1, it doesn’t change.

strainRate

Current strain rate in a vector d/dt(exx,eyy,ezz).

strainRate1(=0)

target strain rate in direction 1 (./s, >0 for compression)

strainRate2(=0)

target strain rate in direction 2 (./s, >0 for compression)

strainRate3(=0)

target strain rate in direction 3 (./s, >0 for compression)

stress((int)id) → Vector3

Returns the average stress on boundary ‘id’. Here, ‘id’ refers to the internal numbering of boundaries, between 0 and 5.

stressControl_1(=true)

Switch to choose a stress or a strain control in directions 1

stressControl_2(=true)

Switch to choose a stress or a strain control in directions 2

stressControl_3(=true)

Switch to choose a stress or a strain control in directions 3

stressDamping(=0.25)

wall damping coefficient for the stress control - wallDamping=0 implies a (theoretical) perfect control, wallDamping=1 means no movement

stressMask(=7)

Bitmask determining wether the imposed TriaxialStressController::goal`s are stresses (0 for none, 7 for all, 1 for direction 1, 5 for directions 1 and 3, etc. :ydefault:`7

thickness(=-1)

thickness of boxes (needed by some functions)

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

updateFrictionAngle(=false)

Switch to activate the update of the intergranular frictionto the value ThreeDTriaxialEngine::frictionAngleDegree.

updatePorosity(=false)

If true porosity calculation will be updated once (will automatically reset to false after one calculation step). Can be used, when volume of particles changes during the simulation (e.g. when particles are erased or when clumps are created).

volumetricStrain(=0)

Volumetric strain (see TriaxialStressController::strain).|yupdate|

wall_back_activated(=true)

if true, this wall moves according to the target value (stress or strain rate).

wall_back_id(=4)

id of boundary ; coordinate 2- (default value is ok if aabbWalls are appended BEFORE spheres.)

wall_bottom_activated(=true)

if true, this wall moves according to the target value (stress or strain rate).

wall_bottom_id(=2)

id of boundary ; coordinate 1- (default value is ok if aabbWalls are appended BEFORE spheres.)

wall_front_activated(=true)

if true, this wall moves according to the target value (stress or strain rate).

wall_front_id(=5)

id of boundary ; coordinate 2+ (default value is ok if aabbWalls are appended BEFORE spheres.)

wall_left_activated(=true)

if true, this wall moves according to the target value (stress or strain rate).

wall_left_id(=0)

id of boundary ; coordinate 0- (default value is ok if aabbWalls are appended BEFORE spheres.)

wall_right_activated(=true)

if true, this wall moves according to the target value (stress or strain rate).

wall_right_id(=1)

id of boundary ; coordinate 0+ (default value is ok if aabbWalls are appended BEFORE spheres.)

wall_top_activated(=true)

if true, this wall moves according to the target value (stress or strain rate).

wall_top_id(=3)

id of boundary ; coordinate 1+ (default value is ok if aabbWalls are appended BEFORE spheres.)

width(=0)

size of the box (0-axis) (auto-updated)

width0(=0)

Reference size for strain definition. See TriaxialStressController::width

class yade.wrapper.TriaxialCompressionEngine(inherits TriaxialStressController → BoundaryController → GlobalEngine → Engine → Serializable)

The engine is a state machine with the following states; transitions my be automatic, see below.

  1. STATE_ISO_COMPACTION: isotropic compaction (compression) until the prescribed mean pressue sigmaIsoCompaction is reached and the packing is stable. The compaction happens either by straining the walls (!internalCompaction) or by growing size of grains (internalCompaction).

  2. STATE_ISO_UNLOADING: isotropic unloading from the previously reached state, until the mean pressure sigmaLateralConfinement is reached (and stabilizes).

    Note

    this state will be skipped if sigmaLateralConfinement == sigmaIsoCompaction.

  3. STATE_TRIAX_LOADING: confined uniaxial compression: constant sigmaLateralConfinement is kept at lateral walls (left, right, front, back), while top and bottom walls load the packing in their axis (by straining), until the value of epsilonMax (deformation along the loading axis) is reached. At this point, the simulation is stopped.

  4. STATE_FIXED_POROSITY_COMPACTION: isotropic compaction (compression) until a chosen porosity value (parameter:fixedPorosity). The six walls move with a chosen translation speed (parameter StrainRate).

  5. STATE_TRIAX_LIMBO: currently unused, since simulation is hard-stopped in the previous state.

Transition from COMPACTION to UNLOADING is done automatically if autoUnload==true;

Transition from (UNLOADING to LOADING) or from (COMPACTION to LOADING: if UNLOADING is skipped) is done automatically if autoCompressionActivation=true; Both autoUnload and autoCompressionActivation are true by default.

Note

Most of the algorithms used have been developed initialy for simulations reported in [Chareyre2002a] and [Chareyre2005]. They have been ported to Yade in a second step and used in e.g. [Kozicki2008],[Scholtes2009b]_,[Jerier2010b].

Warning

This engine is deprecated, please switch to TriaxialStressController if you expect long term support.

Key(="")

A string appended at the end of all files, use it to name simulations.

StabilityCriterion(=0.001)

tolerance in terms of TriaxialCompressionEngine::UnbalancedForce to consider the packing is stable

UnbalancedForce(=1)

mean resultant forces divided by mean contact force

autoCompressionActivation(=true)

Auto-switch from isotropic compaction (or unloading state if sigmaLateralConfinement<sigmaIsoCompaction) to deviatoric loading

autoStopSimulation(=false)

Stop the simulation when the sample reach STATE_LIMBO, or keep running

autoUnload(=true)

Auto-switch from isotropic compaction to unloading

boxVolume

Total packing volume.

computeStressStrainInterval(=10)

currentState(=1)

There are 5 possible states in which TriaxialCompressionEngine can be. See above wrapper.TriaxialCompressionEngine

currentStrainRate(=0)

current strain rate - converging to TriaxialCompressionEngine::strainRate (./s)

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

depth(=0)

size of the box (2-axis) (auto-updated)

depth0(=0)

Reference size for strain definition. See TriaxialStressController::depth

dict() → dict

Return dictionary of attributes.

epsilonMax(=0.5)

Value of axial deformation for which the loading must stop

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

externalWork(=0)

Energy provided by boundaries.|yupdate|

finalMaxMultiplier(=1.00001)

max multiplier of diameters during internal compaction (secondary precise adjustment - TriaxialStressController::maxMultiplier is used in the initial stage)

fixedPoroCompaction(=false)

A special type of compaction with imposed final porosity TriaxialCompressionEngine::fixedPorosity (WARNING : can give unrealistic results!)

fixedPorosity(=0)

Value of porosity chosen by the user

frictionAngleDegree(=-1)

Value of friction assigned just before the deviatoric loading

goal1(=0)

prescribed stress/strain rate on axis 1, as defined by TriaxialStressController::stressMask

goal2(=0)

prescribed stress/strain rate on axis 2, as defined by TriaxialStressController::stressMask

goal3(=0)

prescribed stress/strain rate on axis 3, as defined by TriaxialStressController::stressMask

height(=0)

size of the box (1-axis) (auto-updated)

height0(=0)

Reference size for strain definition. See TriaxialStressController::height

internalCompaction(=true)

Switch between ‘external’ (walls) and ‘internal’ (growth of particles) compaction.

isAxisymetric(=false)

if true, sigma_iso is assigned to sigma1, 2 and 3 (applies at each iteration and overrides user-set values of s1,2,3)

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

maxMultiplier(=1.001)

max multiplier of diameters during internal compaction (initial fast increase - TriaxialStressController::finalMaxMultiplier is used in a second stage)

maxStress(=0)

Max absolute value of axial stress during the simulation (for post-processing)

max_vel(=1)

Maximum allowed walls velocity [m/s]. This value superseeds the one assigned by the stress controller if the later is higher. max_vel can be set to infinity in many cases, but sometimes helps stabilizing packings. Based on this value, different maxima are computed for each axis based on the dimensions of the sample, so that if each boundary moves at its maximum velocity, the strain rate will be isotropic (see e.g. TriaxialStressController::max_vel1).

max_vel1

see TriaxialStressController::max_vel (auto-computed)

max_vel2

see TriaxialStressController::max_vel (auto-computed)

max_vel3

see TriaxialStressController::max_vel (auto-computed)

meanStress(=0)

Mean stress in the packing. (auto-updated)

noFiles(=false)

If true, no files will be generated (*.xml, *.spheres,...)

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

particlesVolume

Total volume of particles (clumps and spheres).

porosity

Porosity of the packing.

previousMultiplier(=1)

(auto-updated)

previousSigmaIso(=1)

Previous value of inherited sigma_iso (used to detect manual changes of the confining pressure)

previousState(=1)

Previous state (used to detect manual changes of the state in .xml)

previousStress(=0)

(auto-updated)

radiusControlInterval(=10)

setContactProperties((float)arg2) → None

Assign a new friction angle (degrees) to dynamic bodies and relative interactions

sigmaIsoCompaction(=1)

Prescribed isotropic pressure during the compaction phase (< 0 for real - compressive - compaction)

sigmaLateralConfinement(=1)

Prescribed confining pressure in the deviatoric loading (< 0 for classical compressive cases); might be different from TriaxialCompressionEngine::sigmaIsoCompaction

sigma_iso(=0)

prescribed confining stress (see :yref:TriaxialCompressionEngine::isAxisymetric`)

spheresVolume

Shorthand for TriaxialStressController::particlesVolume

stiffnessUpdateInterval(=10)

target strain rate (./s)

strain

Current strain in a vector (exx,eyy,ezz). The values reflect true (logarithmic) strain.

strainDamping(=0.99)

coefficient used for smoother transitions in the strain rate. The rate reaches the target value like d^n reaches 0, where d is the damping coefficient and n is the number of steps

strainRate(=0)

target strain rate (./s, >0 for compression)

stress((int)id) → Vector3

Returns the average stress on boundary ‘id’. Here, ‘id’ refers to the internal numbering of boundaries, between 0 and 5.

stressDamping(=0.25)

wall damping coefficient for the stress control - wallDamping=0 implies a (theoretical) perfect control, wallDamping=1 means no movement

stressMask(=7)

Bitmask determining wether the imposed TriaxialStressController::goal`s are stresses (0 for none, 7 for all, 1 for direction 1, 5 for directions 1 and 3, etc. :ydefault:`7

testEquilibriumInterval(=20)

interval of checks for transition between phases, higher than 1 saves computation time.

thickness(=-1)

thickness of boxes (needed by some functions)

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

translationAxis(=TriaxialStressController::normal[wall_bottom])

compression axis

uniaxialEpsilonCurr(=1)

Current value of axial deformation during confined loading (is reference to strain[1])

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

updatePorosity(=false)

If true porosity calculation will be updated once (will automatically reset to false after one calculation step). Can be used, when volume of particles changes during the simulation (e.g. when particles are erased or when clumps are created).

volumetricStrain(=0)

Volumetric strain (see TriaxialStressController::strain).|yupdate|

wall_back_activated(=true)

if true, this wall moves according to the target value (stress or strain rate).

wall_back_id(=4)

id of boundary ; coordinate 2- (default value is ok if aabbWalls are appended BEFORE spheres.)

wall_bottom_activated(=true)

if true, this wall moves according to the target value (stress or strain rate).

wall_bottom_id(=2)

id of boundary ; coordinate 1- (default value is ok if aabbWalls are appended BEFORE spheres.)

wall_front_activated(=true)

if true, this wall moves according to the target value (stress or strain rate).

wall_front_id(=5)

id of boundary ; coordinate 2+ (default value is ok if aabbWalls are appended BEFORE spheres.)

wall_left_activated(=true)

if true, this wall moves according to the target value (stress or strain rate).

wall_left_id(=0)

id of boundary ; coordinate 0- (default value is ok if aabbWalls are appended BEFORE spheres.)

wall_right_activated(=true)

if true, this wall moves according to the target value (stress or strain rate).

wall_right_id(=1)

id of boundary ; coordinate 0+ (default value is ok if aabbWalls are appended BEFORE spheres.)

wall_top_activated(=true)

if true, this wall moves according to the target value (stress or strain rate).

wall_top_id(=3)

id of boundary ; coordinate 1+ (default value is ok if aabbWalls are appended BEFORE spheres.)

warn(=0)

counter used for sending a deprecation warning once

width(=0)

size of the box (0-axis) (auto-updated)

width0(=0)

Reference size for strain definition. See TriaxialStressController::width

class yade.wrapper.TriaxialStressController(inherits BoundaryController → GlobalEngine → Engine → Serializable)

An engine maintaining constant stresses or constant strain rates on some boundaries of a parallepipedic packing. The stress/strain control is defined for each axis using TriaxialStressController::stressMask (a bitMask) and target values are defined by goal1,goal2, and goal3. The sign conventions of continuum mechanics are used for strains and stresses (positive traction).

Note

The algorithms used have been developed initialy for simulations reported in [Chareyre2002a] and [Chareyre2005]. They have been ported to Yade in a second step and used in e.g. [Kozicki2008],[Scholtes2009b]_,[Jerier2010b].

boxVolume

Total packing volume.

computeStressStrainInterval(=10)

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

depth(=0)

size of the box (2-axis) (auto-updated)

depth0(=0)

Reference size for strain definition. See TriaxialStressController::depth

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

externalWork(=0)

Energy provided by boundaries.|yupdate|

finalMaxMultiplier(=1.00001)

max multiplier of diameters during internal compaction (secondary precise adjustment - TriaxialStressController::maxMultiplier is used in the initial stage)

goal1(=0)

prescribed stress/strain rate on axis 1, as defined by TriaxialStressController::stressMask

goal2(=0)

prescribed stress/strain rate on axis 2, as defined by TriaxialStressController::stressMask

goal3(=0)

prescribed stress/strain rate on axis 3, as defined by TriaxialStressController::stressMask

height(=0)

size of the box (1-axis) (auto-updated)

height0(=0)

Reference size for strain definition. See TriaxialStressController::height

internalCompaction(=true)

Switch between ‘external’ (walls) and ‘internal’ (growth of particles) compaction.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

maxMultiplier(=1.001)

max multiplier of diameters during internal compaction (initial fast increase - TriaxialStressController::finalMaxMultiplier is used in a second stage)

max_vel(=1)

Maximum allowed walls velocity [m/s]. This value superseeds the one assigned by the stress controller if the later is higher. max_vel can be set to infinity in many cases, but sometimes helps stabilizing packings. Based on this value, different maxima are computed for each axis based on the dimensions of the sample, so that if each boundary moves at its maximum velocity, the strain rate will be isotropic (see e.g. TriaxialStressController::max_vel1).

max_vel1

see TriaxialStressController::max_vel (auto-computed)

max_vel2

see TriaxialStressController::max_vel (auto-computed)

max_vel3

see TriaxialStressController::max_vel (auto-computed)

meanStress(=0)

Mean stress in the packing. (auto-updated)

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

particlesVolume

Total volume of particles (clumps and spheres).

porosity

Porosity of the packing.

previousMultiplier(=1)

(auto-updated)

previousStress(=0)

(auto-updated)

radiusControlInterval(=10)

spheresVolume

Shorthand for TriaxialStressController::particlesVolume

stiffnessUpdateInterval(=10)

target strain rate (./s)

strain

Current strain in a vector (exx,eyy,ezz). The values reflect true (logarithmic) strain.

strainDamping(=0.99)

coefficient used for smoother transitions in the strain rate. The rate reaches the target value like d^n reaches 0, where d is the damping coefficient and n is the number of steps

strainRate

Current strain rate in a vector d/dt(exx,eyy,ezz).

stress((int)id) → Vector3

Returns the average stress on boundary ‘id’. Here, ‘id’ refers to the internal numbering of boundaries, between 0 and 5.

stressDamping(=0.25)

wall damping coefficient for the stress control - wallDamping=0 implies a (theoretical) perfect control, wallDamping=1 means no movement

stressMask(=7)

Bitmask determining wether the imposed TriaxialStressController::goal`s are stresses (0 for none, 7 for all, 1 for direction 1, 5 for directions 1 and 3, etc. :ydefault:`7

thickness(=-1)

thickness of boxes (needed by some functions)

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

updatePorosity(=false)

If true porosity calculation will be updated once (will automatically reset to false after one calculation step). Can be used, when volume of particles changes during the simulation (e.g. when particles are erased or when clumps are created).

volumetricStrain(=0)

Volumetric strain (see TriaxialStressController::strain).|yupdate|

wall_back_activated(=true)

if true, this wall moves according to the target value (stress or strain rate).

wall_back_id(=4)

id of boundary ; coordinate 2- (default value is ok if aabbWalls are appended BEFORE spheres.)

wall_bottom_activated(=true)

if true, this wall moves according to the target value (stress or strain rate).

wall_bottom_id(=2)

id of boundary ; coordinate 1- (default value is ok if aabbWalls are appended BEFORE spheres.)

wall_front_activated(=true)

if true, this wall moves according to the target value (stress or strain rate).

wall_front_id(=5)

id of boundary ; coordinate 2+ (default value is ok if aabbWalls are appended BEFORE spheres.)

wall_left_activated(=true)

if true, this wall moves according to the target value (stress or strain rate).

wall_left_id(=0)

id of boundary ; coordinate 0- (default value is ok if aabbWalls are appended BEFORE spheres.)

wall_right_activated(=true)

if true, this wall moves according to the target value (stress or strain rate).

wall_right_id(=1)

id of boundary ; coordinate 0+ (default value is ok if aabbWalls are appended BEFORE spheres.)

wall_top_activated(=true)

if true, this wall moves according to the target value (stress or strain rate).

wall_top_id(=3)

id of boundary ; coordinate 1+ (default value is ok if aabbWalls are appended BEFORE spheres.)

width(=0)

size of the box (0-axis) (auto-updated)

width0(=0)

Reference size for strain definition. See TriaxialStressController::width

class yade.wrapper.UniaxialStrainer(inherits BoundaryController → GlobalEngine → Engine → Serializable)

Axial displacing two groups of bodies in the opposite direction with given strain rate.

absSpeed(=NaN)

alternatively, absolute speed of boundary motion can be specified; this is effective only at the beginning and if strainRate is not set; changing absSpeed directly during simulation wil have no effect. [ms⁻¹]

active(=true)

Whether this engine is activated

asymmetry(=0, symmetric)

If 0, straining is symmetric for negIds and posIds; for 1 (or -1), only posIds are strained and negIds don’t move (or vice versa)

avgStress(=0)

Current average stress (auto-updated) [Pa]

axis(=2)

The axis which is strained (0,1,2 for x,y,z)

blockDisplacements(=false)

Whether displacement of boundary bodies perpendicular to the strained axis are blocked or are free

blockRotations(=false)

Whether rotations of boundary bodies are blocked.

crossSectionArea(=NaN)

crossSection perpendicular to he strained axis; must be given explicitly [m²]

currentStrainRate(=NaN)

Current strain rate (update automatically). (auto-updated)

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

idleIterations(=0)

Number of iterations that will pass without straining activity after stopStrain has been reached

initAccelTime(=-200)

Time for strain reaching the requested value (linear interpolation). If negative, the time is dt*(-initAccelTime), where dt is the timestep at the first iteration. [s]

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

limitStrain(=0, disabled)

Invert the sense of straining (sharply, without transition) one this value of strain is reached. Not effective if 0.

negIds(=uninitalized)

Bodies on which strain will be applied (on the negative end along the axis)

notYetReversed(=true)

Flag whether the sense of straining has already been reversed (only used internally).

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

originalLength(=NaN)

Distance of reference bodies in the direction of axis before straining started (computed automatically) [m]

posIds(=uninitalized)

Bodies on which strain will be applied (on the positive end along the axis)

setSpeeds(=false)

should we set speeds at the beginning directly, instead of increasing strain rate progressively?

stopStrain(=NaN)

Strain at which we will pause simulation; inactive (nan) by default; must be reached from below (in absolute value)

strain(=0)

Current strain value, elongation/originalLength (auto-updated) [-]

strainRate(=NaN)

Rate of strain, starting at 0, linearly raising to strainRate. [-]

stressUpdateInterval(=10)

How often to recompute stress on supports.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

Collider

digraph Collider {
        rankdir=RL;
        margin=.2;
        "Collider" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Collider"];
        "GeneralIntegratorInsertionSortCollider" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.GeneralIntegratorInsertionSortCollider"];
        "GeneralIntegratorInsertionSortCollider" -> "InsertionSortCollider" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "ZECollider" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.ZECollider"];
        "ZECollider" -> "Collider" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "FlatGridCollider" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.FlatGridCollider"];
        "FlatGridCollider" -> "Collider" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "InsertionSortCollider" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.InsertionSortCollider"];
        "InsertionSortCollider" -> "Collider" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "SpatialQuickSortCollider" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.SpatialQuickSortCollider"];
        "SpatialQuickSortCollider" -> "Collider" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "PersistentTriangulationCollider" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.PersistentTriangulationCollider"];
        "PersistentTriangulationCollider" -> "Collider" [arrowsize=0.5,style="setlinewidth(0.5)"];
}

class yade.wrapper.Collider(inherits GlobalEngine → Engine → Serializable)

Abstract class for finding spatial collisions between bodies.

Special constructor

Derived colliders (unless they override pyHandleCustomCtorArgs) can be given list of BoundFunctors which is used to initialize the internal boundDispatcher instance.

avoidSelfInteractionMask

This mask is used to avoid the interactions inside a group of particles. To do so, the particles must have the same mask and this mask have to be compatible with this one.

boundDispatcher(=new BoundDispatcher)

BoundDispatcher object that is used for creating bounds on collider’s request as necessary.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.FlatGridCollider(inherits Collider → GlobalEngine → Engine → Serializable)

Non-optimized grid collider, storing grid as dense flat array. Each body is assigned to (possibly multiple) cells, which are arranged in regular grid between aabbMin and aabbMax, with cell size step (same in all directions). Bodies outsize (aabbMin, aabbMax) are handled gracefully, assigned to closest cells (this will create spurious potential interactions). verletDist determines how much is each body enlarged to avoid collision detection at every step.

Note

This collider keeps all cells in linear memory array, therefore will be memory-inefficient for sparse simulations.

Warning

objects Body::bound are not used, BoundFunctors are not used either: assigning cells to bodies is hard-coded internally. Currently handles Shapes are: Sphere.

Note

Periodic boundary is not handled (yet).

aabbMax(=Vector3r::Zero())

Upper corner of grid (approximate, might be rouded up to minStep.

aabbMin(=Vector3r::Zero())

Lower corner of grid.

avoidSelfInteractionMask

This mask is used to avoid the interactions inside a group of particles. To do so, the particles must have the same mask and this mask have to be compatible with this one.

boundDispatcher(=new BoundDispatcher)

BoundDispatcher object that is used for creating bounds on collider’s request as necessary.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

step(=0)

Step in the grid (cell size)

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

verletDist(=0)

Length by which enlarge space occupied by each particle; avoids running collision detection at every step.

class yade.wrapper.GeneralIntegratorInsertionSortCollider(inherits InsertionSortCollider → Collider → GlobalEngine → Engine → Serializable)

This class is the adaptive version of the InsertionSortCollider and changes the NewtonIntegrator dependency of the collider algorithms to the Integrator interface which is more general.

allowBiggerThanPeriod

If true, tests on bodies sizes will be disabled, and the simulation will run normaly even if bodies larger than period are found. It can be useful when the periodic problem include e.g. a floor modelized with wall/box/facet. Be sure you know what you are doing if you touch this flag. The result is undefined if one large body moves out of the (0,0,0) period.

avoidSelfInteractionMask

This mask is used to avoid the interactions inside a group of particles. To do so, the particles must have the same mask and this mask have to be compatible with this one.

boundDispatcher(=new BoundDispatcher)

BoundDispatcher object that is used for creating bounds on collider’s request as necessary.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

doSort(=false)

Do forced resorting of interactions.

dumpBounds() → tuple

Return representation of the internal sort data. The format is ([...],[...],[...]) for 3 axes, where each ... is a list of entries (bounds). The entry is a tuple with the fllowing items:

  • coordinate (float)
  • body id (int), but negated for negative bounds
  • period numer (int), if the collider is in the periodic regime.
execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

fastestBodyMaxDist(=-1)

Normalized maximum displacement of the fastest body since last run; if >= 1, we could get out of bboxes and will trigger full run. (auto-updated)

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

minSweepDistFactor(=0.1)

Minimal distance by which enlarge all bounding boxes; superseeds computed value of verletDist when lower that (minSweepDistFactor x verletDist).

numReinit(=0)

Cummulative number of bound array re-initialization.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

periodic

Whether the collider is in periodic mode (read-only; for debugging) (auto-updated)

sortAxis(=0)

Axis for the initial contact detection.

sortThenCollide(=false)

Separate sorting and colliding phase; it is MUCH slower, but all interactions are processed at every step; this effectively makes the collider non-persistent, not remembering last state. (The default behavior relies on the fact that inversions during insertion sort are overlaps of bounding boxes that just started/ceased to exist, and only processes those; this makes the collider much more efficient.)

strideActive

Whether striding is active (read-only; for debugging). (auto-updated)

targetInterv(=50)

(experimental) Target number of iterations between bound update, used to define a smaller sweep distance for slower grains if >0, else always use 1*verletDist. Useful in simulations with strong velocity contrasts between slow bodies and fast bodies.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

updatingDispFactor(=-1)

(experimental) Displacement factor used to trigger bound update: the bound is updated only if updatingDispFactor*disp>sweepDist when >0, else all bounds are updated.

useless(=uninitalized)

for compatibility of scripts defining the old collider’s attributes - see deprecated attributes

verletDist(=-.5, Automatically initialized)

Length by which to enlarge particle bounds, to avoid running collider at every step. Stride disabled if zero. Negative value will trigger automatic computation, so that the real value will be verletDist × minimum spherical particle radius; if there are no spherical particles, it will be disabled. The actual length added to one bound can be only a fraction of verletDist when InsertionSortCollider::targetInterv is > 0.

class yade.wrapper.InsertionSortCollider(inherits Collider → GlobalEngine → Engine → Serializable)

Collider with O(n log(n)) complexity, using Aabb for bounds.

At the initial step, Bodies’ bounds (along sortAxis) are first std::sort’ed along this (sortAxis) axis, then collided. The initial sort has O(n^2) complexity, see Colliders’ performance for some information (There are scripts in examples/collider-perf for measurements).

Insertion sort is used for sorting the bound list that is already pre-sorted from last iteration, where each inversion calls checkOverlap which then handles either overlap (by creating interaction if necessary) or its absence (by deleting interaction if it is only potential).

Bodies without bounding volume (such as clumps) are handled gracefully and never collide. Deleted bodies are handled gracefully as well.

This collider handles periodic boundary conditions. There are some limitations, notably:

  1. No body can have Aabb larger than cell’s half size in that respective dimension. You get exception if it does and gets in interaction. One way to explicitly by-pass this restriction is offered by allowBiggerThanPeriod, which can be turned on to insert a floor in the form of a very large box for instance (see examples/periodicSandPile.py).
  2. No body can travel more than cell’s distance in one step; this would mean that the simulation is numerically exploding, and it is only detected in some cases.

Stride can be used to avoid running collider at every step by enlarging the particle’s bounds, tracking their displacements and only re-run if they might have gone out of that bounds (see Verlet list for brief description and background) . This requires cooperation from NewtonIntegrator as well as BoundDispatcher, which will be found among engines automatically (exception is thrown if they are not found).

If you wish to use strides, set verletDist (length by which bounds will be enlarged in all directions) to some value, e.g. 0.05 × typical particle radius. This parameter expresses the tradeoff between many potential interactions (running collider rarely, but with longer exact interaction resolution phase) and few potential interactions (running collider more frequently, but with less exact resolutions of interactions); it depends mainly on packing density and particle radius distribution.

If targetInterv is >1, not all particles will have their bound enlarged by verletDist; instead, they will have bounds increased by a length in order to trigger a new colliding after targetInterv iteration, assuming they move at almost constant velocity. Ideally in this method, all particles would reach their bounds at the sime iteration. This is of course not the case as soon as velocities fluctuate in time. Bound::sweepLength is tuned on the basis of the displacement recorded between the last two runs of the collider. In this situation, verletDist defines the maximum sweep length.

allowBiggerThanPeriod

If true, tests on bodies sizes will be disabled, and the simulation will run normaly even if bodies larger than period are found. It can be useful when the periodic problem include e.g. a floor modelized with wall/box/facet. Be sure you know what you are doing if you touch this flag. The result is undefined if one large body moves out of the (0,0,0) period.

avoidSelfInteractionMask

This mask is used to avoid the interactions inside a group of particles. To do so, the particles must have the same mask and this mask have to be compatible with this one.

boundDispatcher(=new BoundDispatcher)

BoundDispatcher object that is used for creating bounds on collider’s request as necessary.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

doSort(=false)

Do forced resorting of interactions.

dumpBounds() → tuple

Return representation of the internal sort data. The format is ([...],[...],[...]) for 3 axes, where each ... is a list of entries (bounds). The entry is a tuple with the fllowing items:

  • coordinate (float)
  • body id (int), but negated for negative bounds
  • period numer (int), if the collider is in the periodic regime.
execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

fastestBodyMaxDist(=-1)

Normalized maximum displacement of the fastest body since last run; if >= 1, we could get out of bboxes and will trigger full run. (auto-updated)

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

minSweepDistFactor(=0.1)

Minimal distance by which enlarge all bounding boxes; superseeds computed value of verletDist when lower that (minSweepDistFactor x verletDist).

numReinit(=0)

Cummulative number of bound array re-initialization.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

periodic

Whether the collider is in periodic mode (read-only; for debugging) (auto-updated)

sortAxis(=0)

Axis for the initial contact detection.

sortThenCollide(=false)

Separate sorting and colliding phase; it is MUCH slower, but all interactions are processed at every step; this effectively makes the collider non-persistent, not remembering last state. (The default behavior relies on the fact that inversions during insertion sort are overlaps of bounding boxes that just started/ceased to exist, and only processes those; this makes the collider much more efficient.)

strideActive

Whether striding is active (read-only; for debugging). (auto-updated)

targetInterv(=50)

(experimental) Target number of iterations between bound update, used to define a smaller sweep distance for slower grains if >0, else always use 1*verletDist. Useful in simulations with strong velocity contrasts between slow bodies and fast bodies.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

updatingDispFactor(=-1)

(experimental) Displacement factor used to trigger bound update: the bound is updated only if updatingDispFactor*disp>sweepDist when >0, else all bounds are updated.

useless(=uninitalized)

for compatibility of scripts defining the old collider’s attributes - see deprecated attributes

verletDist(=-.5, Automatically initialized)

Length by which to enlarge particle bounds, to avoid running collider at every step. Stride disabled if zero. Negative value will trigger automatic computation, so that the real value will be verletDist × minimum spherical particle radius; if there are no spherical particles, it will be disabled. The actual length added to one bound can be only a fraction of verletDist when InsertionSortCollider::targetInterv is > 0.

class yade.wrapper.PersistentTriangulationCollider(inherits Collider → GlobalEngine → Engine → Serializable)

Collision detection engine based on regular triangulation. Handles spheres and flat boundaries (considered as infinite-sized bounding spheres).

avoidSelfInteractionMask

This mask is used to avoid the interactions inside a group of particles. To do so, the particles must have the same mask and this mask have to be compatible with this one.

boundDispatcher(=new BoundDispatcher)

BoundDispatcher object that is used for creating bounds on collider’s request as necessary.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

haveDistantTransient(=false)

Keep distant interactions? If True, don’t delete interactions once bodies don’t overlap anymore; constitutive laws will be responsible for requesting deletion. If False, delete as soon as there is no object penetration.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.SpatialQuickSortCollider(inherits Collider → GlobalEngine → Engine → Serializable)

Collider using quicksort along axes at each step, using Aabb bounds.

Its performance is lower than that of InsertionSortCollider (see Colliders’ performance), but the algorithm is simple enought to make it good for checking other collider’s correctness.

avoidSelfInteractionMask

This mask is used to avoid the interactions inside a group of particles. To do so, the particles must have the same mask and this mask have to be compatible with this one.

boundDispatcher(=new BoundDispatcher)

BoundDispatcher object that is used for creating bounds on collider’s request as necessary.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.ZECollider(inherits Collider → GlobalEngine → Engine → Serializable)

Collider with O(n log(n)) complexity, using a CGAL algorithm from Zomorodian and Edelsbrunner [Kettner2011] (http://www.cgal.org/Manual/beta/doc_html/cgal_manual/Box_intersection_d/Chapter_main.html)

avoidSelfInteractionMask

This mask is used to avoid the interactions inside a group of particles. To do so, the particles must have the same mask and this mask have to be compatible with this one.

boundDispatcher(=new BoundDispatcher)

BoundDispatcher object that is used for creating bounds on collider’s request as necessary.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

fastestBodyMaxDist(=-1)

Maximum displacement of the fastest body since last run; if >= verletDist, we could get out of bboxes and will trigger full run. DEPRECATED, was only used without bins. (auto-updated)

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

numReinit(=0)

Cummulative number of bound array re-initialization.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

periodic

Whether the collider is in periodic mode (read-only; for debugging) (auto-updated)

sortAxis(=0)

Axis for the initial contact detection.

sortThenCollide(=false)

Separate sorting and colliding phase; it is MUCH slower, but all interactions are processed at every step; this effectively makes the collider non-persistent, not remembering last state. (The default behavior relies on the fact that inversions during insertion sort are overlaps of bounding boxes that just started/ceased to exist, and only processes those; this makes the collider much more efficient.)

strideActive

Whether striding is active (read-only; for debugging). (auto-updated)

targetInterv(=30)

(experimental) Target number of iterations between bound update, used to define a smaller sweep distance for slower grains if >0, else always use 1*verletDist. Useful in simulations with strong velocity contrasts between slow bodies and fast bodies.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

updatingDispFactor(=-1)

(experimental) Displacement factor used to trigger bound update: the bound is updated only if updatingDispFactor*disp>sweepDist when >0, else all bounds are updated.

verletDist(=-.15, Automatically initialized)

Length by which to enlarge particle bounds, to avoid running collider at every step. Stride disabled if zero. Negative value will trigger automatic computation, so that the real value will be verletDist × minimum spherical particle radius; if there are no spherical particles, it will be disabled.

FieldApplier

digraph FieldApplier {
        rankdir=RL;
        margin=.2;
        "FieldApplier" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.FieldApplier"];
        "CentralGravityEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.CentralGravityEngine"];
        "CentralGravityEngine" -> "FieldApplier" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "AxialGravityEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.AxialGravityEngine"];
        "AxialGravityEngine" -> "FieldApplier" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "HdapsGravityEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.HdapsGravityEngine"];
        "HdapsGravityEngine" -> "GravityEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "GravityEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.GravityEngine"];
        "GravityEngine" -> "FieldApplier" [arrowsize=0.5,style="setlinewidth(0.5)"];
}

class yade.wrapper.FieldApplier(inherits GlobalEngine → Engine → Serializable)

Base for engines applying force files on particles. Not to be used directly.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.AxialGravityEngine(inherits FieldApplier → GlobalEngine → Engine → Serializable)

Apply acceleration (independent of distance) directed towards an axis.

acceleration(=0)

Acceleration magnitude [kgms⁻²]

axisDirection(=Vector3r::UnitX())

direction of the gravity axis (will be normalized automatically)

axisPoint(=Vector3r::Zero())

Point through which the axis is passing.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

mask(=0)

If mask defined, only bodies with corresponding groupMask will be affected by this engine. If 0, all bodies will be affected.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.CentralGravityEngine(inherits FieldApplier → GlobalEngine → Engine → Serializable)

Engine applying acceleration to all bodies, towards a central body.

accel(=0)

Acceleration magnitude [kgms⁻²]

centralBody(=Body::ID_NONE)

The body towards which all other bodies are attracted.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

mask(=0)

If mask defined, only bodies with corresponding groupMask will be affected by this engine. If 0, all bodies will be affected.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

reciprocal(=false)

If true, acceleration will be applied on the central body as well.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.GravityEngine(inherits FieldApplier → GlobalEngine → Engine → Serializable)

Engine applying constant acceleration to all bodies. DEPRECATED, use Newton::gravity unless you need energy tracking or selective gravity application using groupMask).

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

gravity(=Vector3r::Zero())

Acceleration [kgms⁻²]

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

mask(=0)

If mask defined, only bodies with corresponding groupMask will be affected by this engine. If 0, all bodies will be affected.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

warnOnce(=true)

For deprecation warning once.

class yade.wrapper.HdapsGravityEngine(inherits GravityEngine → FieldApplier → GlobalEngine → Engine → Serializable)

Read accelerometer in Thinkpad laptops (HDAPS and accordingly set gravity within the simulation. This code draws from hdaps-gl . See scripts/test/hdaps.py for an example.

accel(=Vector2i::Zero())

reading from the sysfs file

calibrate(=Vector2i::Zero())

Zero position; if NaN, will be read from the hdapsDir / calibrate.

calibrated(=false)

Whether calibrate was already updated. Do not set to True by hand unless you also give a meaningful value for calibrate.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

gravity(=Vector3r::Zero())

Acceleration [kgms⁻²]

hdapsDir(="/sys/devices/platform/hdaps")

Hdaps directory; contains position (with accelerometer readings) and calibration (zero acceleration).

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

mask(=0)

If mask defined, only bodies with corresponding groupMask will be affected by this engine. If 0, all bodies will be affected.

msecUpdate(=50)

How often to update the reading.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

updateThreshold(=4)

Minimum difference of reading from the file before updating gravity, to avoid jitter.

warnOnce(=true)

For deprecation warning once.

zeroGravity(=Vector3r(0, 0, -1))

Gravity if the accelerometer is in flat (zero) position.

Partial engines

digraph PartialEngine {
        rankdir=RL;
        margin=.2;
        "PartialEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.PartialEngine"];
        "CombinedKinematicEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.CombinedKinematicEngine"];
        "CombinedKinematicEngine" -> "PartialEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "DragEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.DragEngine"];
        "DragEngine" -> "PartialEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "SPHEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.SPHEngine"];
        "SPHEngine" -> "PartialEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "RadialForceEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.RadialForceEngine"];
        "RadialForceEngine" -> "PartialEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "BicyclePedalEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.BicyclePedalEngine"];
        "BicyclePedalEngine" -> "KinematicEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "HarmonicMotionEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.HarmonicMotionEngine"];
        "HarmonicMotionEngine" -> "KinematicEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "InterpolatingDirectedForceEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.InterpolatingDirectedForceEngine"];
        "InterpolatingDirectedForceEngine" -> "ForceEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "LawTester" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.LawTester"];
        "LawTester" -> "PartialEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "ForceEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.ForceEngine"];
        "ForceEngine" -> "PartialEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "InterpolatingHelixEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.InterpolatingHelixEngine"];
        "InterpolatingHelixEngine" -> "HelixEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "TorqueEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.TorqueEngine"];
        "TorqueEngine" -> "PartialEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "HydroForceEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.HydroForceEngine"];
        "HydroForceEngine" -> "PartialEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "KinematicEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.KinematicEngine"];
        "KinematicEngine" -> "PartialEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "ServoPIDController" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.ServoPIDController"];
        "ServoPIDController" -> "TranslationEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "RotationEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.RotationEngine"];
        "RotationEngine" -> "KinematicEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "HarmonicRotationEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.HarmonicRotationEngine"];
        "HarmonicRotationEngine" -> "RotationEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "FlowEngineT" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.FlowEngineT"];
        "FlowEngineT" -> "PartialEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "PeriodicFlowEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.PeriodicFlowEngine"];
        "PeriodicFlowEngine" -> "FlowEngine_PeriodicInfo" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "FlowEngine_PeriodicInfo" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.FlowEngine_PeriodicInfo"];
        "FlowEngine_PeriodicInfo" -> "PartialEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "LinearDragEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.LinearDragEngine"];
        "LinearDragEngine" -> "PartialEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "FlowEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.FlowEngine"];
        "FlowEngine" -> "FlowEngineT" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "StepDisplacer" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.StepDisplacer"];
        "StepDisplacer" -> "PartialEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "HelixEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.HelixEngine"];
        "HelixEngine" -> "RotationEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "TranslationEngine" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.TranslationEngine"];
        "TranslationEngine" -> "KinematicEngine" [arrowsize=0.5,style="setlinewidth(0.5)"];
}

class yade.wrapper.PartialEngine(inherits Engine → Serializable)

Engine affecting only particular bodies in the simulation, defined by ids.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.BicyclePedalEngine(inherits KinematicEngine → PartialEngine → Engine → Serializable)

Engine applying the linear motion of bicycle pedal e.g. moving points around the axis without rotation

angularVelocity(=0)

Angular velocity. [rad/s]

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

fi(=Mathr::PI/2.0)

Initial phase [radians]

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

radius(=-1.0)

Rotation radius. [m]

rotationAxis(=Vector3r::UnitX())

Axis of rotation (direction); will be normalized automatically.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.CombinedKinematicEngine(inherits PartialEngine → Engine → Serializable)

Engine for applying combined displacements on pre-defined bodies. Constructed using + operator on regular KinematicEngines. The ids operated on are those of the first engine in the combination (assigned automatically).

comb(=uninitalized)

Kinematic engines that will be combined by this one, run in the order given.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.DragEngine(inherits PartialEngine → Engine → Serializable)

Apply drag force on some particles at each step, decelerating them proportionally to their linear velocities. The applied force reads

F_{d}=-\frac{\vec{v}}{|\vec{v}|}\frac{1}{2}\rho|\vec{v}|^2 C_d A

where \rho is the medium density (density), v is particle’s velocity, A is particle projected area (disc), C_d is the drag coefficient (0.47 for Sphere),

Note

Drag force is only applied to spherical particles, listed in ids.

Cd(=0.47)

Drag coefficient <http://en.wikipedia.org/wiki/Drag_coefficient>`_.

Rho(=1.225)

Density of the medium (fluid or air), by default - the density of the air.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.FlowEngine(inherits FlowEngineT → PartialEngine → Engine → Serializable)

An engine to solve flow problem in saturated granular media. Model description can be found in [Chareyre2012a] and [Catalano2014a]. See the example script FluidCouplingPFV/oedometer.py. More documentation to come.

OSI() → float

Return the number of interactions only between spheres.

avFlVelOnSph((int)idSph) → object

compute a sphere-centered average fluid velocity

averagePressure() → float

Measure averaged pore pressure in the entire volume

averageSlicePressure((float)posY) → float

Measure slice-averaged pore pressure at height posY

averageVelocity() → Vector3

measure the mean velocity in the period

blockCell((int)id, (bool)blockPressure) → None

block cell ‘id’. The cell will be excluded from the fluid flow problem and the conductivity of all incident facets will be null. If blockPressure=False, deformation is reflected in the pressure, else it is constantly 0.

blockHook(="")

Python command to be run when remeshing. Anticipated usage: define blocked cells (see also TemplateFlowEngine_FlowEngineT.blockCell), or apply exotic types of boundary conditions which need to visit the newly built mesh

bndCondIsPressure(=vector<bool>(6, false))

defines the type of boundary condition for each side. True if pressure is imposed, False for no-flux. Indexes can be retrieved with FlowEngine::xmin and friends.

bndCondValue(=vector<double>(6, 0))

Imposed value of a boundary condition. Only applies if the boundary condition is imposed pressure, else the imposed flux is always zero presently (may be generalized to non-zero imposed fluxes in the future).

bodyNormalLubStress((int)idSph) → Matrix3

Return the normal lubrication stress on sphere idSph.

bodyShearLubStress((int)idSph) → Matrix3

Return the shear lubrication stress on sphere idSph.

boundaryPressure(=vector<Real>())

values defining pressure along x-axis for the top surface. See also FlowEngineT::boundaryXPos

boundaryUseMaxMin(=vector<bool>(6, true))

If true (default value) bounding sphere is added as function of max/min sphere coord, if false as function of yade wall position

boundaryVelocity(=vector<Vector3r>(6, Vector3r::Zero()))

velocity on top boundary, only change it using FlowEngine::setBoundaryVel

boundaryXPos(=vector<Real>())

values of the x-coordinate for which pressure is defined. See also FlowEngineT::boundaryPressure

cholmodStats() → None

get statistics of cholmod solver activity

clampKValues(=true)

If true, clamp local permeabilities in [minKdivKmean,maxKdivKmean]*globalK. This clamping can avoid singular values in the permeability matrix and may reduce numerical errors in the solve phase. It will also hide junk values if they exist, or bias all values in very heterogeneous problems. So, use this with care.

clearImposedFlux() → None

Clear the list of points with flux imposed.

clearImposedPressure() → None

Clear the list of points with pressure imposed.

compTessVolumes() → None

Like TesselationWrapper::computeVolumes()

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

debug(=false)

Activate debug messages

defTolerance(=0.05)

Cumulated deformation threshold for which retriangulation of pore space is performed. If negative, the triangulation update will occure with a fixed frequency on the basis of FlowEngine::meshUpdateInterval

dict() → dict

Return dictionary of attributes.

doInterpolate(=false)

Force the interpolation of cell’s info while remeshing. By default, interpolation would be done only for compressible fluids. It can be forced with this flag.

dt(=0)

timestep [s]

edgeSize() → float

Return the number of interactions.

emulateAction() → None

get scene and run action (may be used to manipulate an engine outside the timestepping loop).

eps(=0.00001)

roughness defined as a fraction of particles size, giving the minimum distance between particles in the lubrication model.

epsVolMax(=0)

Maximal absolute volumetric strain computed at each iteration. (auto-updated)

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

exportMatrix([(str)filename='matrix']) → None

Export system matrix to a file with all entries (even zeros will displayed).

exportTriplets([(str)filename='triplets']) → None

Export system matrix to a file with only non-zero entries.

first(=true)

Controls the initialization/update phases

fluidBulkModulus(=0.)

Bulk modulus of fluid (inverse of compressibility) K=-dP*V/dV [Pa]. Flow is compressible if fluidBulkModulus > 0, else incompressible.

fluidForce((int)idSph) → Vector3

Return the fluid force on sphere idSph.

forceMetis

If true, METIS is used for matrix preconditioning, else Cholmod is free to choose the best method (which may be METIS to, depending on the matrix). See nmethods in Cholmod documentation

getBoundaryFlux((int)boundary) → float

Get total flux through boundary defined by its body id.

Note

The flux may be not zero even for no-flow condition. This artifact comes from cells which are incident to two or more boundaries (along the edges of the sample, typically). Such flux evaluation on impermeable boundary is just irrelevant, it does not imply that the boundary condition is not applied properly.

getCell((float)arg2, (float)arg3, (float)pos) → int

get id of the cell containing (X,Y,Z).

getCellBarycenter((int)id) → Vector3

get barycenter of cell ‘id’.

getCellCenter((int)id) → Vector3

get voronoi center of cell ‘id’.

getCellFlux((int)cond) → float

Get influx in cell associated to an imposed P (indexed using ‘cond’).

getCellPImposed((int)id) → bool

get the status of cell ‘id’ wrt imposed pressure.

getCellPressure((int)id) → float

get pressure in cell ‘id’.

getConstrictions([(bool)all=True]) → list

Get the list of constriction radii (inscribed circle) for all finite facets (if all==True) or all facets not incident to a virtual bounding sphere (if all==False). When all facets are returned, negative radii denote facet incident to one or more fictious spheres.

getConstrictionsFull([(bool)all=True]) → list

Get the list of constrictions (inscribed circle) for all finite facets (if all==True), or all facets not incident to a fictious bounding sphere (if all==False). When all facets are returned, negative radii denote facet incident to one or more fictious spheres. The constrictions are returned in the format {{cell1,cell2}{rad,nx,ny,nz}}

getPorePressure((Vector3)pos) → float

Measure pore pressure in position pos[0],pos[1],pos[2]

getVertices((int)id) → list

get the vertices of a cell

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

ignoredBody(=-1)

Id of a sphere to exclude from the triangulation.)

imposeFlux((Vector3)pos, (float)p) → None

Impose a flux in cell located at ‘pos’ (i.e. add a source term in the flow problem). Outflux positive, influx negative.

imposePressure((Vector3)pos, (float)p) → int

Impose pressure in cell of location ‘pos’. The index of the condition is returned (for multiple imposed pressures at different points).

imposePressureFromId((int)id, (float)p) → int

Impose pressure in cell of index ‘id’ (after remeshing the same condition will apply for the same location, regardless of what the new cell index is at this location). The index of the condition itself is returned (for multiple imposed pressures at different points).

isActivated(=true)

Activates Flow Engine

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

maxKdivKmean(=100)

define the max K value (see FlowEngine::clampKValues)

meanKStat(=false)

report the local permeabilities’ correction

meshUpdateInterval(=1000)

Maximum number of timesteps between re-triangulation events. See also FlowEngine::defTolerance.

metisUsed() → bool

check wether metis lib is effectively used

minKdivKmean(=0.0001)

define the min K value (see FlowEngine::clampKValues)

multithread(=false)

Build triangulation and factorize in the background (multi-thread mode)

nCells() → int

get the total number of finite cells in the triangulation.

normalLubForce((int)idSph) → Vector3

Return the normal lubrication force on sphere idSph.

normalLubrication(=false)

compute normal lubrication force as developped by Brule

normalVect((int)idSph) → Vector3

Return the normal vector between particles.

normalVelocity((int)idSph) → Vector3

Return the normal velocity of the interaction.

numFactorizeThreads(=1)

number of openblas threads in the factorization phase

numSolveThreads(=1)

number of openblas threads in the solve phase.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

onlySpheresInteractions((int)interaction) → int

Return the id of the interaction only between spheres.

pZero(=0)

The value used for initializing pore pressure. It is useless for incompressible fluid, but important for compressible model.

permeabilityFactor(=1.0)

permability multiplier

permeabilityMap(=false)

Enable/disable stocking of average permeability scalar in cell infos.

porosity(=0)

Porosity computed at each retriangulation (auto-updated)

pressureForce(=true)

compute the pressure field and associated fluid forces. WARNING: turning off means fluid flow is not computed at all.

pressureProfile((float)wallUpY, (float)wallDownY) → None

Measure pore pressure in 6 equally-spaced points along the height of the sample

pumpTorque(=false)

Compute pump torque applied on particles

relax(=1.9)

Gauss-Seidel relaxation

saveVtk([(str)folder='./VTK']) → None

Save pressure field in vtk format. Specify a folder name for output.

setCellPImposed((int)id, (bool)pImposed) → None

make cell ‘id’ assignable with imposed pressure.

setCellPressure((int)id, (float)pressure) → None

set pressure in cell ‘id’.

setImposedPressure((int)cond, (float)p) → None

Set pressure value at the point indexed ‘cond’.

shearLubForce((int)idSph) → Vector3

Return the shear lubrication force on sphere idSph.

shearLubTorque((int)idSph) → Vector3

Return the shear lubrication torque on sphere idSph.

shearLubrication(=false)

compute shear lubrication force as developped by Brule (FIXME: ref.)

shearVelocity((int)idSph) → Vector3

Return the shear velocity of the interaction.

sineAverage(=0)

Pressure value (average) when sinusoidal pressure is applied

sineMagnitude(=0)

Pressure value (amplitude) when sinusoidal pressure is applied (p )

slipBoundary(=true)

Controls friction condition on lateral walls

stiffness(=10000)

equivalent contact stiffness used in the lubrication model

surfaceDistanceParticle((int)interaction) → float

Return the distance between particles.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

tolerance(=1e-06)

Gauss-Seidel tolerance

twistTorque(=false)

Compute twist torque applied on particles

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

updateBCs() → None

tells the engine to update it’s boundary conditions before running (especially useful when changing boundary pressure - should not be needed for point-wise imposed pressure)

updateTriangulation(=0)

If true the medium is retriangulated. Can be switched on to force retriangulation after some events (else it will be true periodicaly based on FlowEngine::defTolerance and FlowEngine::meshUpdateInterval. Of course, it costs CPU time.

useSolver(=0)

Solver to use 0=G-Seidel, 1=Taucs, 2-Pardiso, 3-CHOLMOD

viscosity(=1.0)

viscosity of the fluid

viscousNormalBodyStress(=false)

compute normal viscous stress applied on each body

viscousShear(=false)

compute viscous shear terms as developped by Donia Marzougui (FIXME: ref.)

viscousShearBodyStress(=false)

compute shear viscous stress applied on each body

volume([(int)id=0]) → float

Returns the volume of Voronoi’s cell of a sphere.

wallIds(=vector<int>(6))

body ids of the boundaries (default values are ok only if aabbWalls are appended before spheres, i.e. numbered 0,...,5)

wallThickness(=0)

Walls thickness

waveAction(=false)

Allow sinusoidal pressure condition to simulate ocean waves

xmax(=1)

See FlowEngine::xmin.

xmin(=0)

Index of the boundary x_{min}. This index is not equal the the id of the corresponding body in general, it may be used to access the corresponding attributes (e.g. flow.bndCondValue[flow.xmin], flow.wallId[flow.xmin],...).

ymax(=3)

See FlowEngine::xmin.

ymin(=2)

See FlowEngine::xmin.

zmax(=5)

See FlowEngine::xmin.

zmin(=4)

See FlowEngine::xmin.

class yade.wrapper.FlowEngineT(inherits PartialEngine → Engine → Serializable)

A generic engine from wich more specialized engines can inherit. It is defined for the sole purpose of inserting the right data classes CellInfo and VertexInfo in the triangulation, and it should not be used directly. Instead, look for specialized engines, e.g. FlowEngine, PeriodicFlowEngine, or DFNFlowEngine.

OSI() → float

Return the number of interactions only between spheres.

avFlVelOnSph((int)idSph) → object

compute a sphere-centered average fluid velocity

averagePressure() → float

Measure averaged pore pressure in the entire volume

averageSlicePressure((float)posY) → float

Measure slice-averaged pore pressure at height posY

averageVelocity() → Vector3

measure the mean velocity in the period

blockCell((int)id, (bool)blockPressure) → None

block cell ‘id’. The cell will be excluded from the fluid flow problem and the conductivity of all incident facets will be null. If blockPressure=False, deformation is reflected in the pressure, else it is constantly 0.

blockHook(="")

Python command to be run when remeshing. Anticipated usage: define blocked cells (see also TemplateFlowEngine_FlowEngineT.blockCell), or apply exotic types of boundary conditions which need to visit the newly built mesh

bndCondIsPressure(=vector<bool>(6, false))

defines the type of boundary condition for each side. True if pressure is imposed, False for no-flux. Indexes can be retrieved with FlowEngine::xmin and friends.

bndCondValue(=vector<double>(6, 0))

Imposed value of a boundary condition. Only applies if the boundary condition is imposed pressure, else the imposed flux is always zero presently (may be generalized to non-zero imposed fluxes in the future).

bodyNormalLubStress((int)idSph) → Matrix3

Return the normal lubrication stress on sphere idSph.

bodyShearLubStress((int)idSph) → Matrix3

Return the shear lubrication stress on sphere idSph.

boundaryPressure(=vector<Real>())

values defining pressure along x-axis for the top surface. See also FlowEngineT::boundaryXPos

boundaryUseMaxMin(=vector<bool>(6, true))

If true (default value) bounding sphere is added as function of max/min sphere coord, if false as function of yade wall position

boundaryVelocity(=vector<Vector3r>(6, Vector3r::Zero()))

velocity on top boundary, only change it using FlowEngine::setBoundaryVel

boundaryXPos(=vector<Real>())

values of the x-coordinate for which pressure is defined. See also FlowEngineT::boundaryPressure

cholmodStats() → None

get statistics of cholmod solver activity

clampKValues(=true)

If true, clamp local permeabilities in [minKdivKmean,maxKdivKmean]*globalK. This clamping can avoid singular values in the permeability matrix and may reduce numerical errors in the solve phase. It will also hide junk values if they exist, or bias all values in very heterogeneous problems. So, use this with care.

clearImposedFlux() → None

Clear the list of points with flux imposed.

clearImposedPressure() → None

Clear the list of points with pressure imposed.

compTessVolumes() → None

Like TesselationWrapper::computeVolumes()

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

debug(=false)

Activate debug messages

defTolerance(=0.05)

Cumulated deformation threshold for which retriangulation of pore space is performed. If negative, the triangulation update will occure with a fixed frequency on the basis of FlowEngine::meshUpdateInterval

dict() → dict

Return dictionary of attributes.

doInterpolate(=false)

Force the interpolation of cell’s info while remeshing. By default, interpolation would be done only for compressible fluids. It can be forced with this flag.

dt(=0)

timestep [s]

edgeSize() → float

Return the number of interactions.

emulateAction() → None

get scene and run action (may be used to manipulate an engine outside the timestepping loop).

eps(=0.00001)

roughness defined as a fraction of particles size, giving the minimum distance between particles in the lubrication model.

epsVolMax(=0)

Maximal absolute volumetric strain computed at each iteration. (auto-updated)

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

exportMatrix([(str)filename='matrix']) → None

Export system matrix to a file with all entries (even zeros will displayed).

exportTriplets([(str)filename='triplets']) → None

Export system matrix to a file with only non-zero entries.

first(=true)

Controls the initialization/update phases

fluidBulkModulus(=0.)

Bulk modulus of fluid (inverse of compressibility) K=-dP*V/dV [Pa]. Flow is compressible if fluidBulkModulus > 0, else incompressible.

fluidForce((int)idSph) → Vector3

Return the fluid force on sphere idSph.

forceMetis

If true, METIS is used for matrix preconditioning, else Cholmod is free to choose the best method (which may be METIS to, depending on the matrix). See nmethods in Cholmod documentation

getBoundaryFlux((int)boundary) → float

Get total flux through boundary defined by its body id.

Note

The flux may be not zero even for no-flow condition. This artifact comes from cells which are incident to two or more boundaries (along the edges of the sample, typically). Such flux evaluation on impermeable boundary is just irrelevant, it does not imply that the boundary condition is not applied properly.

getCell((float)arg2, (float)arg3, (float)pos) → int

get id of the cell containing (X,Y,Z).

getCellBarycenter((int)id) → Vector3

get barycenter of cell ‘id’.

getCellCenter((int)id) → Vector3

get voronoi center of cell ‘id’.

getCellFlux((int)cond) → float

Get influx in cell associated to an imposed P (indexed using ‘cond’).

getCellPImposed((int)id) → bool

get the status of cell ‘id’ wrt imposed pressure.

getCellPressure((int)id) → float

get pressure in cell ‘id’.

getConstrictions([(bool)all=True]) → list

Get the list of constriction radii (inscribed circle) for all finite facets (if all==True) or all facets not incident to a virtual bounding sphere (if all==False). When all facets are returned, negative radii denote facet incident to one or more fictious spheres.

getConstrictionsFull([(bool)all=True]) → list

Get the list of constrictions (inscribed circle) for all finite facets (if all==True), or all facets not incident to a fictious bounding sphere (if all==False). When all facets are returned, negative radii denote facet incident to one or more fictious spheres. The constrictions are returned in the format {{cell1,cell2}{rad,nx,ny,nz}}

getPorePressure((Vector3)pos) → float

Measure pore pressure in position pos[0],pos[1],pos[2]

getVertices((int)id) → list

get the vertices of a cell

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

ignoredBody(=-1)

Id of a sphere to exclude from the triangulation.)

imposeFlux((Vector3)pos, (float)p) → None

Impose a flux in cell located at ‘pos’ (i.e. add a source term in the flow problem). Outflux positive, influx negative.

imposePressure((Vector3)pos, (float)p) → int

Impose pressure in cell of location ‘pos’. The index of the condition is returned (for multiple imposed pressures at different points).

imposePressureFromId((int)id, (float)p) → int

Impose pressure in cell of index ‘id’ (after remeshing the same condition will apply for the same location, regardless of what the new cell index is at this location). The index of the condition itself is returned (for multiple imposed pressures at different points).

isActivated(=true)

Activates Flow Engine

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

maxKdivKmean(=100)

define the max K value (see FlowEngine::clampKValues)

meanKStat(=false)

report the local permeabilities’ correction

meshUpdateInterval(=1000)

Maximum number of timesteps between re-triangulation events. See also FlowEngine::defTolerance.

metisUsed() → bool

check wether metis lib is effectively used

minKdivKmean(=0.0001)

define the min K value (see FlowEngine::clampKValues)

multithread(=false)

Build triangulation and factorize in the background (multi-thread mode)

nCells() → int

get the total number of finite cells in the triangulation.

normalLubForce((int)idSph) → Vector3

Return the normal lubrication force on sphere idSph.

normalLubrication(=false)

compute normal lubrication force as developped by Brule

normalVect((int)idSph) → Vector3

Return the normal vector between particles.

normalVelocity((int)idSph) → Vector3

Return the normal velocity of the interaction.

numFactorizeThreads(=1)

number of openblas threads in the factorization phase

numSolveThreads(=1)

number of openblas threads in the solve phase.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

onlySpheresInteractions((int)interaction) → int

Return the id of the interaction only between spheres.

pZero(=0)

The value used for initializing pore pressure. It is useless for incompressible fluid, but important for compressible model.

permeabilityFactor(=1.0)

permability multiplier

permeabilityMap(=false)

Enable/disable stocking of average permeability scalar in cell infos.

porosity(=0)

Porosity computed at each retriangulation (auto-updated)

pressureForce(=true)

compute the pressure field and associated fluid forces. WARNING: turning off means fluid flow is not computed at all.

pressureProfile((float)wallUpY, (float)wallDownY) → None

Measure pore pressure in 6 equally-spaced points along the height of the sample

pumpTorque(=false)

Compute pump torque applied on particles

relax(=1.9)

Gauss-Seidel relaxation

saveVtk([(str)folder='./VTK']) → None

Save pressure field in vtk format. Specify a folder name for output.

setCellPImposed((int)id, (bool)pImposed) → None

make cell ‘id’ assignable with imposed pressure.

setCellPressure((int)id, (float)pressure) → None

set pressure in cell ‘id’.

setImposedPressure((int)cond, (float)p) → None

Set pressure value at the point indexed ‘cond’.

shearLubForce((int)idSph) → Vector3

Return the shear lubrication force on sphere idSph.

shearLubTorque((int)idSph) → Vector3

Return the shear lubrication torque on sphere idSph.

shearLubrication(=false)

compute shear lubrication force as developped by Brule (FIXME: ref.)

shearVelocity((int)idSph) → Vector3

Return the shear velocity of the interaction.

sineAverage(=0)

Pressure value (average) when sinusoidal pressure is applied

sineMagnitude(=0)

Pressure value (amplitude) when sinusoidal pressure is applied (p )

slipBoundary(=true)

Controls friction condition on lateral walls

stiffness(=10000)

equivalent contact stiffness used in the lubrication model

surfaceDistanceParticle((int)interaction) → float

Return the distance between particles.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

tolerance(=1e-06)

Gauss-Seidel tolerance

twistTorque(=false)

Compute twist torque applied on particles

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

updateBCs() → None

tells the engine to update it’s boundary conditions before running (especially useful when changing boundary pressure - should not be needed for point-wise imposed pressure)

updateTriangulation(=0)

If true the medium is retriangulated. Can be switched on to force retriangulation after some events (else it will be true periodicaly based on FlowEngine::defTolerance and FlowEngine::meshUpdateInterval. Of course, it costs CPU time.

useSolver(=0)

Solver to use 0=G-Seidel, 1=Taucs, 2-Pardiso, 3-CHOLMOD

viscosity(=1.0)

viscosity of the fluid

viscousNormalBodyStress(=false)

compute normal viscous stress applied on each body

viscousShear(=false)

compute viscous shear terms as developped by Donia Marzougui (FIXME: ref.)

viscousShearBodyStress(=false)

compute shear viscous stress applied on each body

volume([(int)id=0]) → float

Returns the volume of Voronoi’s cell of a sphere.

wallIds(=vector<int>(6))

body ids of the boundaries (default values are ok only if aabbWalls are appended before spheres, i.e. numbered 0,...,5)

wallThickness(=0)

Walls thickness

waveAction(=false)

Allow sinusoidal pressure condition to simulate ocean waves

xmax(=1)

See FlowEngine::xmin.

xmin(=0)

Index of the boundary x_{min}. This index is not equal the the id of the corresponding body in general, it may be used to access the corresponding attributes (e.g. flow.bndCondValue[flow.xmin], flow.wallId[flow.xmin],...).

ymax(=3)

See FlowEngine::xmin.

ymin(=2)

See FlowEngine::xmin.

zmax(=5)

See FlowEngine::xmin.

zmin(=4)

See FlowEngine::xmin.

class yade.wrapper.FlowEngine_PeriodicInfo(inherits PartialEngine → Engine → Serializable)

A generic engine from wich more specialized engines can inherit. It is defined for the sole purpose of inserting the right data classes CellInfo and VertexInfo in the triangulation, and it should not be used directly. Instead, look for specialized engines, e.g. FlowEngine, PeriodicFlowEngine, or DFNFlowEngine.

OSI() → float

Return the number of interactions only between spheres.

avFlVelOnSph((int)idSph) → object

compute a sphere-centered average fluid velocity

averagePressure() → float

Measure averaged pore pressure in the entire volume

averageSlicePressure((float)posY) → float

Measure slice-averaged pore pressure at height posY

averageVelocity() → Vector3

measure the mean velocity in the period

blockCell((int)id, (bool)blockPressure) → None

block cell ‘id’. The cell will be excluded from the fluid flow problem and the conductivity of all incident facets will be null. If blockPressure=False, deformation is reflected in the pressure, else it is constantly 0.

blockHook(="")

Python command to be run when remeshing. Anticipated usage: define blocked cells (see also TemplateFlowEngine_FlowEngine_PeriodicInfo.blockCell), or apply exotic types of boundary conditions which need to visit the newly built mesh

bndCondIsPressure(=vector<bool>(6, false))

defines the type of boundary condition for each side. True if pressure is imposed, False for no-flux. Indexes can be retrieved with FlowEngine::xmin and friends.

bndCondValue(=vector<double>(6, 0))

Imposed value of a boundary condition. Only applies if the boundary condition is imposed pressure, else the imposed flux is always zero presently (may be generalized to non-zero imposed fluxes in the future).

bodyNormalLubStress((int)idSph) → Matrix3

Return the normal lubrication stress on sphere idSph.

bodyShearLubStress((int)idSph) → Matrix3

Return the shear lubrication stress on sphere idSph.

boundaryPressure(=vector<Real>())

values defining pressure along x-axis for the top surface. See also FlowEngine_PeriodicInfo::boundaryXPos

boundaryUseMaxMin(=vector<bool>(6, true))

If true (default value) bounding sphere is added as function of max/min sphere coord, if false as function of yade wall position

boundaryVelocity(=vector<Vector3r>(6, Vector3r::Zero()))

velocity on top boundary, only change it using FlowEngine::setBoundaryVel

boundaryXPos(=vector<Real>())

values of the x-coordinate for which pressure is defined. See also FlowEngine_PeriodicInfo::boundaryPressure

cholmodStats() → None

get statistics of cholmod solver activity

clampKValues(=true)

If true, clamp local permeabilities in [minKdivKmean,maxKdivKmean]*globalK. This clamping can avoid singular values in the permeability matrix and may reduce numerical errors in the solve phase. It will also hide junk values if they exist, or bias all values in very heterogeneous problems. So, use this with care.

clearImposedFlux() → None

Clear the list of points with flux imposed.

clearImposedPressure() → None

Clear the list of points with pressure imposed.

compTessVolumes() → None

Like TesselationWrapper::computeVolumes()

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

debug(=false)

Activate debug messages

defTolerance(=0.05)

Cumulated deformation threshold for which retriangulation of pore space is performed. If negative, the triangulation update will occure with a fixed frequency on the basis of FlowEngine::meshUpdateInterval

dict() → dict

Return dictionary of attributes.

doInterpolate(=false)

Force the interpolation of cell’s info while remeshing. By default, interpolation would be done only for compressible fluids. It can be forced with this flag.

dt(=0)

timestep [s]

edgeSize() → float

Return the number of interactions.

emulateAction() → None

get scene and run action (may be used to manipulate an engine outside the timestepping loop).

eps(=0.00001)

roughness defined as a fraction of particles size, giving the minimum distance between particles in the lubrication model.

epsVolMax(=0)

Maximal absolute volumetric strain computed at each iteration. (auto-updated)

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

exportMatrix([(str)filename='matrix']) → None

Export system matrix to a file with all entries (even zeros will displayed).

exportTriplets([(str)filename='triplets']) → None

Export system matrix to a file with only non-zero entries.

first(=true)

Controls the initialization/update phases

fluidBulkModulus(=0.)

Bulk modulus of fluid (inverse of compressibility) K=-dP*V/dV [Pa]. Flow is compressible if fluidBulkModulus > 0, else incompressible.

fluidForce((int)idSph) → Vector3

Return the fluid force on sphere idSph.

forceMetis

If true, METIS is used for matrix preconditioning, else Cholmod is free to choose the best method (which may be METIS to, depending on the matrix). See nmethods in Cholmod documentation

getBoundaryFlux((int)boundary) → float

Get total flux through boundary defined by its body id.

Note

The flux may be not zero even for no-flow condition. This artifact comes from cells which are incident to two or more boundaries (along the edges of the sample, typically). Such flux evaluation on impermeable boundary is just irrelevant, it does not imply that the boundary condition is not applied properly.

getCell((float)arg2, (float)arg3, (float)pos) → int

get id of the cell containing (X,Y,Z).

getCellBarycenter((int)id) → Vector3

get barycenter of cell ‘id’.

getCellCenter((int)id) → Vector3

get voronoi center of cell ‘id’.

getCellFlux((int)cond) → float

Get influx in cell associated to an imposed P (indexed using ‘cond’).

getCellPImposed((int)id) → bool

get the status of cell ‘id’ wrt imposed pressure.

getCellPressure((int)id) → float

get pressure in cell ‘id’.

getConstrictions([(bool)all=True]) → list

Get the list of constriction radii (inscribed circle) for all finite facets (if all==True) or all facets not incident to a virtual bounding sphere (if all==False). When all facets are returned, negative radii denote facet incident to one or more fictious spheres.

getConstrictionsFull([(bool)all=True]) → list

Get the list of constrictions (inscribed circle) for all finite facets (if all==True), or all facets not incident to a fictious bounding sphere (if all==False). When all facets are returned, negative radii denote facet incident to one or more fictious spheres. The constrictions are returned in the format {{cell1,cell2}{rad,nx,ny,nz}}

getPorePressure((Vector3)pos) → float

Measure pore pressure in position pos[0],pos[1],pos[2]

getVertices((int)id) → list

get the vertices of a cell

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

ignoredBody(=-1)

Id of a sphere to exclude from the triangulation.)

imposeFlux((Vector3)pos, (float)p) → None

Impose a flux in cell located at ‘pos’ (i.e. add a source term in the flow problem). Outflux positive, influx negative.

imposePressure((Vector3)pos, (float)p) → int

Impose pressure in cell of location ‘pos’. The index of the condition is returned (for multiple imposed pressures at different points).

imposePressureFromId((int)id, (float)p) → int

Impose pressure in cell of index ‘id’ (after remeshing the same condition will apply for the same location, regardless of what the new cell index is at this location). The index of the condition itself is returned (for multiple imposed pressures at different points).

isActivated(=true)

Activates Flow Engine

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

maxKdivKmean(=100)

define the max K value (see FlowEngine::clampKValues)

meanKStat(=false)

report the local permeabilities’ correction

meshUpdateInterval(=1000)

Maximum number of timesteps between re-triangulation events. See also FlowEngine::defTolerance.

metisUsed() → bool

check wether metis lib is effectively used

minKdivKmean(=0.0001)

define the min K value (see FlowEngine::clampKValues)

multithread(=false)

Build triangulation and factorize in the background (multi-thread mode)

nCells() → int

get the total number of finite cells in the triangulation.

normalLubForce((int)idSph) → Vector3

Return the normal lubrication force on sphere idSph.

normalLubrication(=false)

compute normal lubrication force as developped by Brule

normalVect((int)idSph) → Vector3

Return the normal vector between particles.

normalVelocity((int)idSph) → Vector3

Return the normal velocity of the interaction.

numFactorizeThreads(=1)

number of openblas threads in the factorization phase

numSolveThreads(=1)

number of openblas threads in the solve phase.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

onlySpheresInteractions((int)interaction) → int

Return the id of the interaction only between spheres.

pZero(=0)

The value used for initializing pore pressure. It is useless for incompressible fluid, but important for compressible model.

permeabilityFactor(=1.0)

permability multiplier

permeabilityMap(=false)

Enable/disable stocking of average permeability scalar in cell infos.

porosity(=0)

Porosity computed at each retriangulation (auto-updated)

pressureForce(=true)

compute the pressure field and associated fluid forces. WARNING: turning off means fluid flow is not computed at all.

pressureProfile((float)wallUpY, (float)wallDownY) → None

Measure pore pressure in 6 equally-spaced points along the height of the sample

pumpTorque(=false)

Compute pump torque applied on particles

relax(=1.9)

Gauss-Seidel relaxation

saveVtk([(str)folder='./VTK']) → None

Save pressure field in vtk format. Specify a folder name for output.

setCellPImposed((int)id, (bool)pImposed) → None

make cell ‘id’ assignable with imposed pressure.

setCellPressure((int)id, (float)pressure) → None

set pressure in cell ‘id’.

setImposedPressure((int)cond, (float)p) → None

Set pressure value at the point indexed ‘cond’.

shearLubForce((int)idSph) → Vector3

Return the shear lubrication force on sphere idSph.

shearLubTorque((int)idSph) → Vector3

Return the shear lubrication torque on sphere idSph.

shearLubrication(=false)

compute shear lubrication force as developped by Brule (FIXME: ref.)

shearVelocity((int)idSph) → Vector3

Return the shear velocity of the interaction.

sineAverage(=0)

Pressure value (average) when sinusoidal pressure is applied

sineMagnitude(=0)

Pressure value (amplitude) when sinusoidal pressure is applied (p )

slipBoundary(=true)

Controls friction condition on lateral walls

stiffness(=10000)

equivalent contact stiffness used in the lubrication model

surfaceDistanceParticle((int)interaction) → float

Return the distance between particles.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

tolerance(=1e-06)

Gauss-Seidel tolerance

twistTorque(=false)

Compute twist torque applied on particles

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

updateBCs() → None

tells the engine to update it’s boundary conditions before running (especially useful when changing boundary pressure - should not be needed for point-wise imposed pressure)

updateTriangulation(=0)

If true the medium is retriangulated. Can be switched on to force retriangulation after some events (else it will be true periodicaly based on FlowEngine::defTolerance and FlowEngine::meshUpdateInterval. Of course, it costs CPU time.

useSolver(=0)

Solver to use 0=G-Seidel, 1=Taucs, 2-Pardiso, 3-CHOLMOD

viscosity(=1.0)

viscosity of the fluid

viscousNormalBodyStress(=false)

compute normal viscous stress applied on each body

viscousShear(=false)

compute viscous shear terms as developped by Donia Marzougui (FIXME: ref.)

viscousShearBodyStress(=false)

compute shear viscous stress applied on each body

volume([(int)id=0]) → float

Returns the volume of Voronoi’s cell of a sphere.

wallIds(=vector<int>(6))

body ids of the boundaries (default values are ok only if aabbWalls are appended before spheres, i.e. numbered 0,...,5)

wallThickness(=0)

Walls thickness

waveAction(=false)

Allow sinusoidal pressure condition to simulate ocean waves

xmax(=1)

See FlowEngine::xmin.

xmin(=0)

Index of the boundary x_{min}. This index is not equal the the id of the corresponding body in general, it may be used to access the corresponding attributes (e.g. flow.bndCondValue[flow.xmin], flow.wallId[flow.xmin],...).

ymax(=3)

See FlowEngine::xmin.

ymin(=2)

See FlowEngine::xmin.

zmax(=5)

See FlowEngine::xmin.

zmin(=4)

See FlowEngine::xmin.

class yade.wrapper.ForceEngine(inherits PartialEngine → Engine → Serializable)

Apply contact force on some particles at each step.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

force(=Vector3r::Zero())

Force to apply.

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.HarmonicMotionEngine(inherits KinematicEngine → PartialEngine → Engine → Serializable)

This engine implements the harmonic oscillation of bodies. http://en.wikipedia.org/wiki/Simple_harmonic_motion#Dynamics_of_simple_harmonic_motion

A(=Vector3r::Zero())

Amplitude [m]

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

f(=Vector3r::Zero())

Frequency [hertz]

fi(=Vector3r(Mathr::PI/2.0, Mathr::PI/2.0, Mathr::PI/2.0))

Initial phase [radians]. By default, the body oscillates around initial position.

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.HarmonicRotationEngine(inherits RotationEngine → KinematicEngine → PartialEngine → Engine → Serializable)

This engine implements the harmonic-rotation oscillation of bodies. http://en.wikipedia.org/wiki/Simple_harmonic_motion#Dynamics_of_simple_harmonic_motion ; please, set dynamic=False for bodies, droven by this engine, otherwise amplitude will be 2x more, than awaited.

A(=0)

Amplitude [rad]

angularVelocity(=0)

Angular velocity. [rad/s]

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

f(=0)

Frequency [hertz]

fi(=Mathr::PI/2.0)

Initial phase [radians]. By default, the body oscillates around initial position.

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

rotateAroundZero(=false)

If True, bodies will not rotate around their centroids, but rather around zeroPoint.

rotationAxis(=Vector3r::UnitX())

Axis of rotation (direction); will be normalized automatically.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

zeroPoint(=Vector3r::Zero())

Point around which bodies will rotate if rotateAroundZero is True

class yade.wrapper.HelixEngine(inherits RotationEngine → KinematicEngine → PartialEngine → Engine → Serializable)

Engine applying both rotation and translation, along the same axis, whence the name HelixEngine

angleTurned(=0)

How much have we turned so far. (auto-updated) [rad]

angularVelocity(=0)

Angular velocity. [rad/s]

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

linearVelocity(=0)

Linear velocity [m/s]

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

rotateAroundZero(=false)

If True, bodies will not rotate around their centroids, but rather around zeroPoint.

rotationAxis(=Vector3r::UnitX())

Axis of rotation (direction); will be normalized automatically.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

zeroPoint(=Vector3r::Zero())

Point around which bodies will rotate if rotateAroundZero is True

class yade.wrapper.HydroForceEngine(inherits PartialEngine → Engine → Serializable)
Apply drag and lift due to a fluid flow vector (1D) to each sphere + the buoyant weight.

The applied drag force reads

F_{d}=\frac{1}{2} C_d A\rho^f|\vec{v_f - v}| \vec{v_f - v}

where \rho is the medium density (densFluid), v is particle’s velocity, v_f is the velocity of the fluid at the particle center(vxFluid), A is particle projected area (disc), C_d is the drag coefficient. The formulation of the drag coefficient depends on the local particle reynolds number and the solid volume fraction. The formulation of the drag is [Dallavalle1948] [RevilBaudard2013] with a correction of Richardson-Zaki [Richardson1954] to take into account the hindrance effect. This law is classical in sediment transport. It is possible to activate a fluctuation of the drag force for each particle which account for the turbulent fluctuation of the fluid velocity (velFluct). The model implemented for the turbulent velocity fluctuation is a simple discrete random walk which takes as input the Reynolds stress tensor R^f_{xz} as a function of the depth, and allows to recover the main property of the fluctuations by imposing <u_x'u_z'> (z) = <R^f_{xz}>(z)/\rho^f. It requires as input <R^f_{xz}>(z)/\rho^f called simplifiedReynoldStresses in the code. The formulation of the lift is taken from [Wiberg1985] and is such that :

F_{L}=\frac{1}{2} C_L A\rho^f((v_f - v)^2_{top} - (v_f - v)^2_{bottom})

Where the subscript top and bottom means evaluated at the top (respectively the bottom) of the sphere considered. This formulation of the lift account for the difference of pressure at the top and the bottom of the particle inside a turbulent shear flow. As this formulation is controversial when approaching the threshold of motion [Schmeeckle2007] it is possible to desactivate it with the variable lift. The buoyancy is taken into account through the buoyant weight :

F_{buoyancy}= - \rho^f V^p g

, where g is the gravity vector along the vertical, and V^p is the volume of the particle. This engine also evaluate the average particle velocity, solid volume fraction and drag force depth profiles, through the function averageProfile. This is done as the solid volume fraction depth profile is required for the drag calculation, and as the three are required for the independent fluid resolution.

Cl(=0.2)

Value of the lift coefficient taken from [Wiberg1985]

activateAverage(=false)

If true, activate the calculation of the average depth profiles of drag, solid volume fraction, and solid velocity for the application of the force (phiPart in hindrance function) and to use in python for the coupling with the fluid.

averageDrag(=uninitalized)

Discretized average drag depth profile. No role in the engine, output parameter. For practical reason, it can be evaluated directly inside the engine, calling from python the averageProfile() method of the engine, or puting activateAverage to True.

averageDrag1(=uninitalized)

Discretized average drag depth profile of particles of type 1. Evaluated when twoSize is set to True.

averageDrag2(=uninitalized)

Discretized average drag depth profile of particles of type 2. Evaluated when twoSize is set to True.

averageProfile() → None

Compute and store the particle velocity (vxPart, vyPart, vzPart) and solid volume fraction (phiPart) depth profile. For each defined cell z, the k component of the average particle velocity reads:

<v_k>^z= \sum_p V^p v_k^p/\sum_p V^p,

where the sum is made over the particles contained in the cell, v_k^p is the k component of the velocity associated to particle p, and V^p is the part of the volume of the particle p contained inside the cell. This definition allows to smooth the averaging, and is equivalent to taking into account the center of the particles only when there is a lot of particles in each cell. As for the solid volume fraction, it is evaluated in the same way: for each defined cell z, it reads:

<\phi>^z= \frac{1}{V_{cell}}\sum_p V^p, where V_{cell} is the volume of the cell considered, and V^p is the volume of particle p contained in cell z. This function gives depth profiles of average velocity and solid volume fraction, returning the average quantities in each cell of height dz, from the reference horizontal plane at elevation zRef (input parameter) until the plane of elevation zRef plus nCell times deltaZ (input parameters). When the option twoSize is set to True, evaluate in addition the average drag (averageDrag1 and averageDrag2) and solid volume fraction (phiPart1 and phiPart2) depth profiles considering only the particles of radius respectively radiusPart1 and radiusPart2 in the averaging.

bedElevation(=uninitalized)

Elevation of the bed above which the fluid flow is turbulent and the particles undergo turbulent velocity fluctuation.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

deltaZ(=uninitalized)

Height of the discretization cell.

densFluid(=1000)

Density of the fluid, by default - density of water

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

expoRZ(=3.1)

Value of the Richardson-Zaki exponent, for the drag correction due to hindrance

gravity(=Vector3r(0, 0, -9.81))

Gravity vector (may depend on the slope).

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

lift(=false)

Option to activate or not the evaluation of the lift

nCell(=uninitalized)

Number of cell in the depth

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

phiPart(=uninitalized)

Discretized solid volume fraction depth profile. Can be taken as input parameter, or evaluated directly inside the engine, calling from python the averageProfile() function, or puting activateAverage to True.

phiPart1(=uninitalized)

Discretized solid volume fraction depth profile of particles of type 1. Evaluated when twoSize is set to True.

phiPart2(=uninitalized)

Discretized solid volume fraction depth profile of particles of type 2. Evaluated when twoSize is set to True.

radiusPart1(=0.)

Radius of the particles of type 1. Useful only when twoSize is set to True.

radiusPart2(=0.)

Radius of the particles of type 2. Useful only when twoSize is set to True.

simplifiedReynoldStresses(=uninitalized)

Vector of size equal to nCell containing the Reynolds stresses divided by the fluid density in function of the depth. simplifiedReynoldStresses(z) =  <u_x'u_z'>(z)^2

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

twoSize(=false)

Option to activate when considering two particle size in the simulation. When activated evaluate the average solid volume fraction and drag force for the two type of particles of diameter diameterPart1 and diameterPart2 independently.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

vCell(=uninitalized)

Volume of averaging cell

vFluctX(=uninitalized)

Vector associating a streamwise fluid velocity fluctuation to each particle. Fluctuation calculated in the C++ code from the discrete random walk model

vFluctZ(=uninitalized)

Vector associating a normal fluid velocity fluctuation to each particle. Fluctuation calculated in the C++ code from the discrete random walk model

velFluct(=false)

If true, activate the determination of turbulent fluid velocity fluctuation for the next time step only at the position of each particle, using a simple discrete random walk (DRW) model based on the Reynolds stresses profile (simplifiedReynoldStresses)

viscoDyn(=1e-3)

Dynamic viscosity of the fluid, by default - viscosity of water

vxFluid(=uninitalized)

Discretized streamwise fluid velocity depth profile

vxPart(=uninitalized)

Discretized streamwise solid velocity depth profile. Can be taken as input parameter, or evaluated directly inside the engine, calling from python the averageProfile() function, or puting activateAverage to True.

vyPart(=uninitalized)

Discretized spanwise solid velocity depth profile. No role in the engine, output parameter. For practical reason, it can be evaluated directly inside the engine, calling from python the averageProfile() method of the engine, or puting activateAverage to True.

vzPart(=uninitalized)

Discretized normal solid velocity depth profile. No role in the engine, output parameter. For practical reason, it can be evaluated directly inside the engine, calling from python the averageProfile() method of the engine, or puting activateAverage to True.

zRef(=uninitalized)

Position of the reference point which correspond to the first value of the fluid velocity, i.e. to the ground.

class yade.wrapper.InterpolatingDirectedForceEngine(inherits ForceEngine → PartialEngine → Engine → Serializable)

Engine for applying force of varying magnitude but constant direction on subscribed bodies. times and magnitudes must have the same length, direction (normalized automatically) gives the orientation.

As usual with interpolating engines: the first magnitude is used before the first time point, last magnitude is used after the last time point. Wrap specifies whether time wraps around the last time point to the first time point.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

direction(=Vector3r::UnitX())

Contact force direction (normalized automatically)

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

force(=Vector3r::Zero())

Force to apply.

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

magnitudes(=uninitalized)

Force magnitudes readings [N]

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

times(=uninitalized)

Time readings [s]

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wrap(=false)

wrap to the beginning of the sequence if beyond the last time point

class yade.wrapper.InterpolatingHelixEngine(inherits HelixEngine → RotationEngine → KinematicEngine → PartialEngine → Engine → Serializable)

Engine applying spiral motion, finding current angular velocity by linearly interpolating in times and velocities and translation by using slope parameter.

The interpolation assumes the margin value before the first time point and last value after the last time point. If wrap is specified, time will wrap around the last times value to the first one (note that no interpolation between last and first values is done).

angleTurned(=0)

How much have we turned so far. (auto-updated) [rad]

angularVelocities(=uninitalized)

List of angular velocities; manadatorily of same length as times. [rad/s]

angularVelocity(=0)

Angular velocity. [rad/s]

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

linearVelocity(=0)

Linear velocity [m/s]

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

rotateAroundZero(=false)

If True, bodies will not rotate around their centroids, but rather around zeroPoint.

rotationAxis(=Vector3r::UnitX())

Axis of rotation (direction); will be normalized automatically.

slope(=0)

Axial translation per radian turn (can be negative) [m/rad]

times(=uninitalized)

List of time points at which velocities are given; must be increasing [s]

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wrap(=false)

Wrap t if t>times_n, i.e. t_wrapped=t-N*(times_n-times_0)

zeroPoint(=Vector3r::Zero())

Point around which bodies will rotate if rotateAroundZero is True

class yade.wrapper.KinematicEngine(inherits PartialEngine → Engine → Serializable)

Abstract engine for applying prescribed displacement.

Note

Derived classes should override the apply with given list of ids (not action with PartialEngine.ids), so that they work when combined together; velocity and angular velocity of all subscribed bodies is reset before the apply method is called, it should therefore only increment those quantities.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.LawTester(inherits PartialEngine → Engine → Serializable)

Prescribe and apply deformations of an interaction in terms of local mutual displacements and rotations. The loading path is specified either using path (as sequence of 6-vectors containing generalized displacements u_x, u_y, u_z, \phi_x, \phi_y, \phi_z) or disPath (u_x, u_y, u_z) and rotPath (\phi_x, \phi_y, \phi_z). Time function with time values (step numbers) corresponding to points on loading path is given by pathSteps. Loading values are linearly interpolated between given loading path points, and starting zero-value (the initial configuration) is assumed for both path and pathSteps. hooks can specify python code to run when respective point on the path is reached; when the path is finished, doneHook will be run.

LawTester should be placed between InteractionLoop and NewtonIntegrator in the simulation loop, since it controls motion via setting linear/angular velocities on particles; those velocities are integrated by NewtonIntegrator to yield an actual position change, which in turn causes IGeom to be updated (and contact law applied) when InteractionLoop is executed. Constitutive law generating forces on particles will not affect prescribed particle motion, since both particles have all DoFs blocked when first used with LawTester.

LawTester uses, as much as possible, IGeom to provide useful data (such as local coordinate system), but is able to compute those independently if absent in the respective IGeom:

IGeom #DoFs LawTester support level
L3Geom 3 full
L6Geom 6 full
ScGeom 3 emulate local coordinate system
ScGeom6D 6 emulate local coordinate system

Depending on IGeom, 3 (u_x, u_y, u_z) or 6 (u_x, u_y, u_z, \phi_x, \phi_y, \phi_z) degrees of freedom (DoFs) are controlled with LawTester, by prescribing linear and angular velocities of both particles in contact. All DoFs controlled with LawTester are orthogonal (fully decoupled) and are controlled independently.

When 3 DoFs are controlled, rotWeight controls whether local shear is applied by moving particle on arc around the other one, or by rotating without changing position; although such rotation induces mutual rotation on the interaction, it is ignored with IGeom with only 3 DoFs. When 6 DoFs are controlled, only arc-displacement is applied for shear, since otherwise mutual rotation would occur.

idWeight distributes prescribed motion between both particles (resulting local deformation is the same if id1 is moved towards id2 or id2 towards id1). This is true only for u_x, u_y, u_z, \phi_x however ; bending rotations \phi_y, \phi_z are nevertheless always distributed regardless of idWeight to both spheres in inverse proportion to their radii, so that there is no shear induced.

LawTester knows current contact deformation from 2 sources: from its own internal data (which are used for prescribing the displacement at every step), which can be accessed in uTest, and from IGeom itself (depending on which data it provides), which is stored in uGeom. These two values should be identical (disregarding numerical percision), and it is a way to test whether IGeom and related functors compute what they are supposed to compute.

LawTester-operated interactions can be rendered with GlExtra_LawTester renderer.

See scripts/test/law-test.py for an example.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

disPath(=uninitalized)

Loading path, where each Vector3 contains desired normal displacement and two components of the shear displacement (in local coordinate system, which is being tracked automatically. If shorter than rotPath, the last value is repeated.

displIsRel(=true)

Whether displacement values in disPath are normalized by reference contact length (r1+r2 for 2 spheres).

doneHook(=uninitalized)

Python command (as string) to run when end of the path is achieved. If empty, the engine will be set dead.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

hooks(=uninitalized)

Python commands to be run when the corresponding point in path is reached, before doing other things in that particular step. See also doneHook.

idWeight(=1)

Float, usually ∈〈0,1〉, determining on how are displacements distributed between particles (0 for id1, 1 for id2); intermediate values will apply respective part to each of them. This parameter is ignored with 6-DoFs IGeom.

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

pathSteps(=vector<int>(1, 1), (constant step))

Step number for corresponding values in path; if shorter than path, distance between last 2 values is used for the rest.

refLength(=0)

Reference contact length, for rendering only.

renderLength(=0)

Characteristic length for the purposes of rendering, set equal to the smaller radius.

rotPath(=uninitalized)

Rotational components of the loading path, where each item contains torsion and two bending rotations in local coordinates. If shorter than path, the last value is repeated.

rotWeight(=1)

Float ∈〈0,1〉 determining whether shear displacement is applied as rotation or displacement on arc (0 is displacement-only, 1 is rotation-only). Not effective when mutual rotation is specified.

step(=1)

Step number in which this engine is active; determines position in path, using pathSteps.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

trsf(=uninitalized)

Transformation matrix for the local coordinate system. (auto-updated)

uGeom(=Vector6r::Zero())

Current generalized displacements (3 displacements, 3 rotations), as stored in the interation itself. They should corredpond to uTest, otherwise a bug is indicated.

uTest(=Vector6r::Zero())

Current generalized displacements (3 displacements, 3 rotations), as they should be according to this LawTester. Should correspond to uGeom.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

uuPrev(=Vector6r::Zero())

Generalized displacement values reached in the previous step, for knowing which increment to apply in the current step.

class yade.wrapper.LinearDragEngine(inherits PartialEngine → Engine → Serializable)

Apply viscous resistance or linear drag on some particles at each step, decelerating them proportionally to their linear velocities. The applied force reads

F_{d}=-b{\vec{v}}

where b is the linear drag, \vec{v} is particle’s velocity.

b=6\pi\nu r

where \nu is the medium viscosity, r is the Stokes radius of the particle (but in this case we accept it equal to sphere radius for simplification),

Note

linear drag is only applied to spherical particles, listed in ids.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

nu(=0.001)

Viscosity of the medium.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.PeriodicFlowEngine(inherits FlowEngine_PeriodicInfo → PartialEngine → Engine → Serializable)

A variant of FlowEngine implementing periodic boundary conditions. The API is very similar.

OSI() → float

Return the number of interactions only between spheres.

avFlVelOnSph((int)idSph) → object

compute a sphere-centered average fluid velocity

averagePressure() → float

Measure averaged pore pressure in the entire volume

averageSlicePressure((float)posY) → float

Measure slice-averaged pore pressure at height posY

averageVelocity() → Vector3

measure the mean velocity in the period

blockCell((int)id, (bool)blockPressure) → None

block cell ‘id’. The cell will be excluded from the fluid flow problem and the conductivity of all incident facets will be null. If blockPressure=False, deformation is reflected in the pressure, else it is constantly 0.

blockHook(="")

Python command to be run when remeshing. Anticipated usage: define blocked cells (see also TemplateFlowEngine_FlowEngine_PeriodicInfo.blockCell), or apply exotic types of boundary conditions which need to visit the newly built mesh

bndCondIsPressure(=vector<bool>(6, false))

defines the type of boundary condition for each side. True if pressure is imposed, False for no-flux. Indexes can be retrieved with FlowEngine::xmin and friends.

bndCondValue(=vector<double>(6, 0))

Imposed value of a boundary condition. Only applies if the boundary condition is imposed pressure, else the imposed flux is always zero presently (may be generalized to non-zero imposed fluxes in the future).

bodyNormalLubStress((int)idSph) → Matrix3

Return the normal lubrication stress on sphere idSph.

bodyShearLubStress((int)idSph) → Matrix3

Return the shear lubrication stress on sphere idSph.

boundaryPressure(=vector<Real>())

values defining pressure along x-axis for the top surface. See also FlowEngine_PeriodicInfo::boundaryXPos

boundaryUseMaxMin(=vector<bool>(6, true))

If true (default value) bounding sphere is added as function of max/min sphere coord, if false as function of yade wall position

boundaryVelocity(=vector<Vector3r>(6, Vector3r::Zero()))

velocity on top boundary, only change it using FlowEngine::setBoundaryVel

boundaryXPos(=vector<Real>())

values of the x-coordinate for which pressure is defined. See also FlowEngine_PeriodicInfo::boundaryPressure

cholmodStats() → None

get statistics of cholmod solver activity

clampKValues(=true)

If true, clamp local permeabilities in [minKdivKmean,maxKdivKmean]*globalK. This clamping can avoid singular values in the permeability matrix and may reduce numerical errors in the solve phase. It will also hide junk values if they exist, or bias all values in very heterogeneous problems. So, use this with care.

clearImposedFlux() → None

Clear the list of points with flux imposed.

clearImposedPressure() → None

Clear the list of points with pressure imposed.

compTessVolumes() → None

Like TesselationWrapper::computeVolumes()

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

debug(=false)

Activate debug messages

defTolerance(=0.05)

Cumulated deformation threshold for which retriangulation of pore space is performed. If negative, the triangulation update will occure with a fixed frequency on the basis of FlowEngine::meshUpdateInterval

dict() → dict

Return dictionary of attributes.

doInterpolate(=false)

Force the interpolation of cell’s info while remeshing. By default, interpolation would be done only for compressible fluids. It can be forced with this flag.

dt(=0)

timestep [s]

duplicateThreshold(=0.06)

distance from cell borders that will triger periodic duplication in the triangulation (auto-updated)

edgeSize() → float

Return the number of interactions.

emulateAction() → None

get scene and run action (may be used to manipulate an engine outside the timestepping loop).

eps(=0.00001)

roughness defined as a fraction of particles size, giving the minimum distance between particles in the lubrication model.

epsVolMax(=0)

Maximal absolute volumetric strain computed at each iteration. (auto-updated)

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

exportMatrix([(str)filename='matrix']) → None

Export system matrix to a file with all entries (even zeros will displayed).

exportTriplets([(str)filename='triplets']) → None

Export system matrix to a file with only non-zero entries.

first(=true)

Controls the initialization/update phases

fluidBulkModulus(=0.)

Bulk modulus of fluid (inverse of compressibility) K=-dP*V/dV [Pa]. Flow is compressible if fluidBulkModulus > 0, else incompressible.

fluidForce((int)idSph) → Vector3

Return the fluid force on sphere idSph.

forceMetis

If true, METIS is used for matrix preconditioning, else Cholmod is free to choose the best method (which may be METIS to, depending on the matrix). See nmethods in Cholmod documentation

getBoundaryFlux((int)boundary) → float

Get total flux through boundary defined by its body id.

Note

The flux may be not zero even for no-flow condition. This artifact comes from cells which are incident to two or more boundaries (along the edges of the sample, typically). Such flux evaluation on impermeable boundary is just irrelevant, it does not imply that the boundary condition is not applied properly.

getCell((float)arg2, (float)arg3, (float)pos) → int

get id of the cell containing (X,Y,Z).

getCellBarycenter((int)id) → Vector3

get barycenter of cell ‘id’.

getCellCenter((int)id) → Vector3

get voronoi center of cell ‘id’.

getCellFlux((int)cond) → float

Get influx in cell associated to an imposed P (indexed using ‘cond’).

getCellPImposed((int)id) → bool

get the status of cell ‘id’ wrt imposed pressure.

getCellPressure((int)id) → float

get pressure in cell ‘id’.

getConstrictions([(bool)all=True]) → list

Get the list of constriction radii (inscribed circle) for all finite facets (if all==True) or all facets not incident to a virtual bounding sphere (if all==False). When all facets are returned, negative radii denote facet incident to one or more fictious spheres.

getConstrictionsFull([(bool)all=True]) → list

Get the list of constrictions (inscribed circle) for all finite facets (if all==True), or all facets not incident to a fictious bounding sphere (if all==False). When all facets are returned, negative radii denote facet incident to one or more fictious spheres. The constrictions are returned in the format {{cell1,cell2}{rad,nx,ny,nz}}

getPorePressure((Vector3)pos) → float

Measure pore pressure in position pos[0],pos[1],pos[2]

getVertices((int)id) → list

get the vertices of a cell

gradP(=Vector3r::Zero())

Macroscopic pressure gradient

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

ignoredBody(=-1)

Id of a sphere to exclude from the triangulation.)

imposeFlux((Vector3)pos, (float)p) → None

Impose a flux in cell located at ‘pos’ (i.e. add a source term in the flow problem). Outflux positive, influx negative.

imposePressure((Vector3)pos, (float)p) → int

Impose pressure in cell of location ‘pos’. The index of the condition is returned (for multiple imposed pressures at different points).

imposePressureFromId((int)id, (float)p) → int

Impose pressure in cell of index ‘id’ (after remeshing the same condition will apply for the same location, regardless of what the new cell index is at this location). The index of the condition itself is returned (for multiple imposed pressures at different points).

isActivated(=true)

Activates Flow Engine

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

maxKdivKmean(=100)

define the max K value (see FlowEngine::clampKValues)

meanKStat(=false)

report the local permeabilities’ correction

meshUpdateInterval(=1000)

Maximum number of timesteps between re-triangulation events. See also FlowEngine::defTolerance.

metisUsed() → bool

check wether metis lib is effectively used

minKdivKmean(=0.0001)

define the min K value (see FlowEngine::clampKValues)

multithread(=false)

Build triangulation and factorize in the background (multi-thread mode)

nCells() → int

get the total number of finite cells in the triangulation.

normalLubForce((int)idSph) → Vector3

Return the normal lubrication force on sphere idSph.

normalLubrication(=false)

compute normal lubrication force as developped by Brule

normalVect((int)idSph) → Vector3

Return the normal vector between particles.

normalVelocity((int)idSph) → Vector3

Return the normal velocity of the interaction.

numFactorizeThreads(=1)

number of openblas threads in the factorization phase

numSolveThreads(=1)

number of openblas threads in the solve phase.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

onlySpheresInteractions((int)interaction) → int

Return the id of the interaction only between spheres.

pZero(=0)

The value used for initializing pore pressure. It is useless for incompressible fluid, but important for compressible model.

permeabilityFactor(=1.0)

permability multiplier

permeabilityMap(=false)

Enable/disable stocking of average permeability scalar in cell infos.

porosity(=0)

Porosity computed at each retriangulation (auto-updated)

pressureForce(=true)

compute the pressure field and associated fluid forces. WARNING: turning off means fluid flow is not computed at all.

pressureProfile((float)wallUpY, (float)wallDownY) → None

Measure pore pressure in 6 equally-spaced points along the height of the sample

pumpTorque(=false)

Compute pump torque applied on particles

relax(=1.9)

Gauss-Seidel relaxation

saveVtk([(str)folder='./VTK']) → None

Save pressure field in vtk format. Specify a folder name for output.

setCellPImposed((int)id, (bool)pImposed) → None

make cell ‘id’ assignable with imposed pressure.

setCellPressure((int)id, (float)pressure) → None

set pressure in cell ‘id’.

setImposedPressure((int)cond, (float)p) → None

Set pressure value at the point indexed ‘cond’.

shearLubForce((int)idSph) → Vector3

Return the shear lubrication force on sphere idSph.

shearLubTorque((int)idSph) → Vector3

Return the shear lubrication torque on sphere idSph.

shearLubrication(=false)

compute shear lubrication force as developped by Brule (FIXME: ref.)

shearVelocity((int)idSph) → Vector3

Return the shear velocity of the interaction.

sineAverage(=0)

Pressure value (average) when sinusoidal pressure is applied

sineMagnitude(=0)

Pressure value (amplitude) when sinusoidal pressure is applied (p )

slipBoundary(=true)

Controls friction condition on lateral walls

stiffness(=10000)

equivalent contact stiffness used in the lubrication model

surfaceDistanceParticle((int)interaction) → float

Return the distance between particles.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

tolerance(=1e-06)

Gauss-Seidel tolerance

twistTorque(=false)

Compute twist torque applied on particles

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

updateBCs() → None

tells the engine to update it’s boundary conditions before running (especially useful when changing boundary pressure - should not be needed for point-wise imposed pressure)

updateTriangulation(=0)

If true the medium is retriangulated. Can be switched on to force retriangulation after some events (else it will be true periodicaly based on FlowEngine::defTolerance and FlowEngine::meshUpdateInterval. Of course, it costs CPU time.

useSolver(=0)

Solver to use 0=G-Seidel, 1=Taucs, 2-Pardiso, 3-CHOLMOD

viscosity(=1.0)

viscosity of the fluid

viscousNormalBodyStress(=false)

compute normal viscous stress applied on each body

viscousShear(=false)

compute viscous shear terms as developped by Donia Marzougui (FIXME: ref.)

viscousShearBodyStress(=false)

compute shear viscous stress applied on each body

volume([(int)id=0]) → float

Returns the volume of Voronoi’s cell of a sphere.

wallIds(=vector<int>(6))

body ids of the boundaries (default values are ok only if aabbWalls are appended before spheres, i.e. numbered 0,...,5)

wallThickness(=0)

Walls thickness

waveAction(=false)

Allow sinusoidal pressure condition to simulate ocean waves

xmax(=1)

See FlowEngine::xmin.

xmin(=0)

Index of the boundary x_{min}. This index is not equal the the id of the corresponding body in general, it may be used to access the corresponding attributes (e.g. flow.bndCondValue[flow.xmin], flow.wallId[flow.xmin],...).

ymax(=3)

See FlowEngine::xmin.

ymin(=2)

See FlowEngine::xmin.

zmax(=5)

See FlowEngine::xmin.

zmin(=4)

See FlowEngine::xmin.

class yade.wrapper.RadialForceEngine(inherits PartialEngine → Engine → Serializable)

Apply force of given magnitude directed away from spatial axis.

axisDir(=Vector3r::UnitX())

Axis direction (normalized automatically)

axisPt(=Vector3r::Zero())

Point on axis

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

fNorm(=0)

Applied force magnitude

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.RotationEngine(inherits KinematicEngine → PartialEngine → Engine → Serializable)

Engine applying rotation (by setting angular velocity) to subscribed bodies. If rotateAroundZero is set, then each body is also displaced around zeroPoint.

angularVelocity(=0)

Angular velocity. [rad/s]

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

rotateAroundZero(=false)

If True, bodies will not rotate around their centroids, but rather around zeroPoint.

rotationAxis(=Vector3r::UnitX())

Axis of rotation (direction); will be normalized automatically.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

zeroPoint(=Vector3r::Zero())

Point around which bodies will rotate if rotateAroundZero is True

class yade.wrapper.SPHEngine(inherits PartialEngine → Engine → Serializable)

Apply given torque (momentum) value at every subscribed particle, at every step.

KernFunctionDensity(=Lucy)

Kernel function for density calculation (by default - Lucy). The following kernel functions are available: Lucy=1 ([Lucy1977] (27)), BSpline1=2 ([Monaghan1985] (21)), BSpline2=3 ([Monaghan1985] (22)).

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

h(=-1)

Core radius. See Mueller [Mueller2003] .

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

k(=-1)

Gas constant for SPH-interactions (only for SPH-model). See Mueller [Mueller2003] .

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

mask(=-1)

Bitmask for SPH-particles.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

rho0(=-1)

Rest density. See Mueller [Mueller2003] .

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.ServoPIDController(inherits TranslationEngine → KinematicEngine → PartialEngine → Engine → Serializable)

PIDController servo-engine for applying prescribed force on bodies. http://en.wikipedia.org/wiki/PID_controller

axis(=Vector3r::Zero())

Unit vector along which apply the velocity [-]

curVel(=0.0)

Current applied velocity [m/s]

current(=Vector3r::Zero())

Current value for the controller [N]

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

errorCur(=0.0)

Current error [N]

errorPrev(=0.0)

Previous error [N]

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

iTerm(=0.0)

Integral term [N]

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

iterPeriod(=100.0)

Periodicity criterion of velocity correlation [-]

iterPrevStart(=-1.0)

Previous iteration of velocity correlation [-]

kD(=0.0)

Derivative gain/coefficient for the PID-controller [-]

kI(=0.0)

Integral gain/coefficient for the PID-controller [-]

kP(=0.0)

Proportional gain/coefficient for the PID-controller [-]

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

maxVelocity(=0.0)

Velocity [m/s]

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

target(=0.0)

Target value for the controller [N]

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

translationAxis(=uninitalized)

Direction [Vector3]

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

velocity(=uninitalized)

Velocity [m/s]

class yade.wrapper.StepDisplacer(inherits PartialEngine → Engine → Serializable)

Apply generalized displacement (displacement or rotation) stepwise on subscribed bodies. Could be used for purposes of contact law tests (by moving one sphere compared to another), but in this case, see rather LawTester

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

mov(=Vector3r::Zero())

Linear displacement step to be applied per iteration, by addition to State.pos.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

rot(=Quaternionr::Identity())

Rotation step to be applied per iteration (via rotation composition with State.ori).

setVelocities(=false)

If false, positions and orientations are directly updated, without changing the speeds of concerned bodies. If true, only velocity and angularVelocity are modified. In this second case integrator is supposed to be used, so that, thanks to this Engine, the bodies will have the prescribed jump over one iteration (dt).

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.TorqueEngine(inherits PartialEngine → Engine → Serializable)

Apply given torque (momentum) value at every subscribed particle, at every step.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

moment(=Vector3r::Zero())

Torque value to be applied.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.TranslationEngine(inherits KinematicEngine → PartialEngine → Engine → Serializable)

This engine is the base class for different engines, which require any kind of motion.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

ids(=uninitalized)

Ids of bodies affected by this PartialEngine.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

translationAxis(=uninitalized)

Direction [Vector3]

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

velocity(=uninitalized)

Velocity [m/s]

Bounding volume creation

BoundFunctor

digraph BoundFunctor {
        rankdir=RL;
        margin=.2;
        "BoundFunctor" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.BoundFunctor"];
        "Bo1_ChainedCylinder_Aabb" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Bo1_ChainedCylinder_Aabb"];
        "Bo1_ChainedCylinder_Aabb" -> "BoundFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Bo1_Sphere_Aabb" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Bo1_Sphere_Aabb"];
        "Bo1_Sphere_Aabb" -> "BoundFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Bo1_Box_Aabb" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Bo1_Box_Aabb"];
        "Bo1_Box_Aabb" -> "BoundFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Bo1_Facet_Aabb" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Bo1_Facet_Aabb"];
        "Bo1_Facet_Aabb" -> "BoundFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Bo1_Polyhedra_Aabb" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Bo1_Polyhedra_Aabb"];
        "Bo1_Polyhedra_Aabb" -> "BoundFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Bo1_GridConnection_Aabb" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Bo1_GridConnection_Aabb"];
        "Bo1_GridConnection_Aabb" -> "BoundFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Bo1_Tetra_Aabb" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Bo1_Tetra_Aabb"];
        "Bo1_Tetra_Aabb" -> "BoundFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Bo1_Wall_Aabb" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Bo1_Wall_Aabb"];
        "Bo1_Wall_Aabb" -> "BoundFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Bo1_Cylinder_Aabb" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Bo1_Cylinder_Aabb"];
        "Bo1_Cylinder_Aabb" -> "BoundFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
}

class yade.wrapper.BoundFunctor(inherits Functor → Serializable)

Functor for creating/updating Body::bound.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Bo1_Box_Aabb(inherits BoundFunctor → Functor → Serializable)

Create/update an Aabb of a Box.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Bo1_ChainedCylinder_Aabb(inherits BoundFunctor → Functor → Serializable)

Functor creating Aabb from ChainedCylinder.

aabbEnlargeFactor

Relative enlargement of the bounding box; deactivated if negative.

Note

This attribute is used to create distant interaction, but is only meaningful with an IGeomFunctor which will not simply discard such interactions: Ig2_Cylinder_Cylinder_ScGeom::interactionDetectionFactor should have the same value as aabbEnlargeFactor.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Bo1_Cylinder_Aabb(inherits BoundFunctor → Functor → Serializable)

Functor creating Aabb from Cylinder.

aabbEnlargeFactor

Relative enlargement of the bounding box; deactivated if negative.

Note

This attribute is used to create distant interaction, but is only meaningful with an IGeomFunctor which will not simply discard such interactions: Ig2_Cylinder_Cylinder_ScGeom::interactionDetectionFactor should have the same value as aabbEnlargeFactor.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Bo1_Facet_Aabb(inherits BoundFunctor → Functor → Serializable)

Creates/updates an Aabb of a Facet.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Bo1_GridConnection_Aabb(inherits BoundFunctor → Functor → Serializable)

Functor creating Aabb from a GridConnection.

aabbEnlargeFactor(=-1, deactivated)

Relative enlargement of the bounding box; deactivated if negative.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Bo1_Polyhedra_Aabb(inherits BoundFunctor → Functor → Serializable)

Create/update Aabb of a Polyhedra

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Bo1_Sphere_Aabb(inherits BoundFunctor → Functor → Serializable)

Functor creating Aabb from Sphere.

aabbEnlargeFactor

Relative enlargement of the bounding box; deactivated if negative.

Note

This attribute is used to create distant interaction, but is only meaningful with an IGeomFunctor which will not simply discard such interactions: Ig2_Sphere_Sphere_ScGeom::interactionDetectionFactor should have the same value as aabbEnlargeFactor.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Bo1_Tetra_Aabb(inherits BoundFunctor → Functor → Serializable)

Create/update Aabb of a Tetra

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Bo1_Wall_Aabb(inherits BoundFunctor → Functor → Serializable)

Creates/updates an Aabb of a Wall

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

BoundDispatcher

class yade.wrapper.BoundDispatcher(inherits Dispatcher → Engine → Serializable)

Dispatcher calling functors based on received argument type(s).

activated(=true)

Whether the engine is activated (only should be changed by the collider)

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

dispFunctor((Shape)arg2) → BoundFunctor

Return functor that would be dispatched for given argument(s); None if no dispatch; ambiguous dispatch throws.

dispMatrix([(bool)names=True]) → dict

Return dictionary with contents of the dispatch matrix.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

functors

Functors associated with this dispatcher.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

minSweepDistFactor(=0.2)

Minimal distance by which enlarge all bounding boxes; superseeds computed value of sweepDist when lower that (minSweepDistFactor x sweepDist). Updated by the collider. (auto-updated).

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

sweepDist(=0)

Distance by which enlarge all bounding boxes, to prevent collider from being run at every step (only should be changed by the collider).

targetInterv(=-1)

see InsertionSortCollider::targetInterv (auto-updated)

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

updatingDispFactor(=-1)

see InsertionSortCollider::updatingDispFactor (auto-updated)

Interaction Geometry creation

IGeomFunctor

digraph IGeomFunctor {
        rankdir=RL;
        margin=.2;
        "IGeomFunctor" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.IGeomFunctor"];
        "Ig2_Wall_Polyhedra_PolyhedraGeom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_Wall_Polyhedra_PolyhedraGeom"];
        "Ig2_Wall_Polyhedra_PolyhedraGeom" -> "IGeomFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ig2_Sphere_Sphere_L6Geom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_Sphere_Sphere_L6Geom"];
        "Ig2_Sphere_Sphere_L6Geom" -> "Ig2_Sphere_Sphere_L3Geom" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ig2_Box_Sphere_ScGeom6D" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_Box_Sphere_ScGeom6D"];
        "Ig2_Box_Sphere_ScGeom6D" -> "Ig2_Box_Sphere_ScGeom" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ig2_Facet_Sphere_ScGeom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_Facet_Sphere_ScGeom"];
        "Ig2_Facet_Sphere_ScGeom" -> "IGeomFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ig2_Facet_Polyhedra_PolyhedraGeom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_Facet_Polyhedra_PolyhedraGeom"];
        "Ig2_Facet_Polyhedra_PolyhedraGeom" -> "IGeomFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ig2_Sphere_ChainedCylinder_CylScGeom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_Sphere_ChainedCylinder_CylScGeom"];
        "Ig2_Sphere_ChainedCylinder_CylScGeom" -> "IGeomFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ig2_Box_Sphere_ScGeom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_Box_Sphere_ScGeom"];
        "Ig2_Box_Sphere_ScGeom" -> "IGeomFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ig2_Tetra_Tetra_TTetraGeom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_Tetra_Tetra_TTetraGeom"];
        "Ig2_Tetra_Tetra_TTetraGeom" -> "IGeomFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ig2_Sphere_Polyhedra_ScGeom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_Sphere_Polyhedra_ScGeom"];
        "Ig2_Sphere_Polyhedra_ScGeom" -> "IGeomFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ig2_Polyhedra_Polyhedra_PolyhedraGeom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_Polyhedra_Polyhedra_PolyhedraGeom"];
        "Ig2_Polyhedra_Polyhedra_PolyhedraGeom" -> "IGeomFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ig2_GridConnection_GridConnection_GridCoGridCoGeom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_GridConnection_GridConnection_GridCoGridCoGeom"];
        "Ig2_GridConnection_GridConnection_GridCoGridCoGeom" -> "IGeomFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ig2_Sphere_ChainedCylinder_CylScGeom6D" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_Sphere_ChainedCylinder_CylScGeom6D"];
        "Ig2_Sphere_ChainedCylinder_CylScGeom6D" -> "Ig2_Sphere_ChainedCylinder_CylScGeom" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ig2_Sphere_Sphere_ScGeom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_Sphere_Sphere_ScGeom"];
        "Ig2_Sphere_Sphere_ScGeom" -> "IGeomFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ig2_ChainedCylinder_ChainedCylinder_ScGeom6D" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_ChainedCylinder_ChainedCylinder_ScGeom6D"];
        "Ig2_ChainedCylinder_ChainedCylinder_ScGeom6D" -> "IGeomFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ig2_Wall_Sphere_ScGeom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_Wall_Sphere_ScGeom"];
        "Ig2_Wall_Sphere_ScGeom" -> "IGeomFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ig2_Tetra_Tetra_TTetraSimpleGeom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_Tetra_Tetra_TTetraSimpleGeom"];
        "Ig2_Tetra_Tetra_TTetraSimpleGeom" -> "IGeomFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ig2_Facet_Sphere_ScGeom6D" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_Facet_Sphere_ScGeom6D"];
        "Ig2_Facet_Sphere_ScGeom6D" -> "Ig2_Facet_Sphere_ScGeom" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ig2_Sphere_GridConnection_ScGridCoGeom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_Sphere_GridConnection_ScGridCoGeom"];
        "Ig2_Sphere_GridConnection_ScGridCoGeom" -> "IGeomFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ig2_GridNode_GridNode_GridNodeGeom6D" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_GridNode_GridNode_GridNodeGeom6D"];
        "Ig2_GridNode_GridNode_GridNodeGeom6D" -> "Ig2_Sphere_Sphere_ScGeom" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ig2_Wall_Sphere_L3Geom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_Wall_Sphere_L3Geom"];
        "Ig2_Wall_Sphere_L3Geom" -> "Ig2_Sphere_Sphere_L3Geom" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ig2_Facet_Sphere_L3Geom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_Facet_Sphere_L3Geom"];
        "Ig2_Facet_Sphere_L3Geom" -> "Ig2_Sphere_Sphere_L3Geom" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ig2_Sphere_Sphere_L3Geom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_Sphere_Sphere_L3Geom"];
        "Ig2_Sphere_Sphere_L3Geom" -> "IGeomFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ig2_Sphere_Sphere_ScGeom6D" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ig2_Sphere_Sphere_ScGeom6D"];
        "Ig2_Sphere_Sphere_ScGeom6D" -> "Ig2_Sphere_Sphere_ScGeom" [arrowsize=0.5,style="setlinewidth(0.5)"];
}

class yade.wrapper.IGeomFunctor(inherits Functor → Serializable)

Functor for creating/updating Interaction::geom objects.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ig2_Box_Sphere_ScGeom(inherits IGeomFunctor → Functor → Serializable)

Create an interaction geometry ScGeom from Box and Sphere, representing the box with a projected virtual sphere of same radius.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ig2_Box_Sphere_ScGeom6D(inherits Ig2_Box_Sphere_ScGeom → IGeomFunctor → Functor → Serializable)

Create an interaction geometry ScGeom6D from Box and Sphere, representing the box with a projected virtual sphere of same radius.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ig2_ChainedCylinder_ChainedCylinder_ScGeom6D(inherits IGeomFunctor → Functor → Serializable)

Create/update a ScGeom instance representing connexion between chained cylinders.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

halfLengthContacts(=true)

If True, Cylinders nodes interact like spheres of radius 0.5*length, else one node has size length while the other has size 0. The difference is mainly the locus of rotation definition.

interactionDetectionFactor(=1)

Enlarge both radii by this factor (if >1), to permit creation of distant interactions.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ig2_Facet_Polyhedra_PolyhedraGeom(inherits IGeomFunctor → Functor → Serializable)

Create/update geometry of collision between Facet and Polyhedra

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ig2_Facet_Sphere_L3Geom(inherits Ig2_Sphere_Sphere_L3Geom → IGeomFunctor → Functor → Serializable)

Incrementally compute L3Geom for contact between Facet and Sphere. Uses attributes of Ig2_Sphere_Sphere_L3Geom.

approxMask

Selectively enable geometrical approximations (bitmask); add the values for approximations to be enabled.

1 use previous transformation to transform velocities (which are known at mid-steps), instead of mid-step transformation computed as quaternion slerp at t=0.5.
2 do not take average (mid-step) normal when computing relative shear displacement, use previous value instead
4 do not re-normalize average (mid-step) normal, if used.…
By default, the mask is zero, wherefore none of these approximations is used.
bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

distFactor(=1)

Create interaction if spheres are not futher than distFactor *(r1+r2). If negative, zero normal deformation will be set to be the initial value (otherwise, the geometrical distance is the ‘’zero’’ one).

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

noRatch(=true)

See Ig2_Sphere_Sphere_ScGeom.avoidGranularRatcheting.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

trsfRenorm(=100)

How often to renormalize trsf; if non-positive, never renormalized (simulation might be unstable)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ig2_Facet_Sphere_ScGeom(inherits IGeomFunctor → Functor → Serializable)

Create/update a ScGeom instance representing intersection of Facet and Sphere.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

shrinkFactor(=0, no shrinking)

The radius of the inscribed circle of the facet is decreased by the value of the sphere’s radius multipled by shrinkFactor. From the definition of contact point on the surface made of facets, the given surface is not continuous and becomes in effect surface covered with triangular tiles, with gap between the separate tiles equal to the sphere’s radius multiplied by 2×*shrinkFactor*. If zero, no shrinking is done.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ig2_Facet_Sphere_ScGeom6D(inherits Ig2_Facet_Sphere_ScGeom → IGeomFunctor → Functor → Serializable)

Create an interaction geometry ScGeom6D from Facet and Sphere, representing the Facet with a projected virtual sphere of same radius.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

shrinkFactor(=0, no shrinking)

The radius of the inscribed circle of the facet is decreased by the value of the sphere’s radius multipled by shrinkFactor. From the definition of contact point on the surface made of facets, the given surface is not continuous and becomes in effect surface covered with triangular tiles, with gap between the separate tiles equal to the sphere’s radius multiplied by 2×*shrinkFactor*. If zero, no shrinking is done.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ig2_GridConnection_GridConnection_GridCoGridCoGeom(inherits IGeomFunctor → Functor → Serializable)

Create/update a GridCoGridCoGeom instance representing the geometry of a contact point between two GridConnection , including relative rotations.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ig2_GridNode_GridNode_GridNodeGeom6D(inherits Ig2_Sphere_Sphere_ScGeom → IGeomFunctor → Functor → Serializable)

Create/update a GridNodeGeom6D instance representing the geometry of a contact point between two GridNode, including relative rotations.

avoidGranularRatcheting

Define relative velocity so that ratcheting is avoided. It applies for sphere-sphere contacts. It eventualy also apply for sphere-emulating interactions (i.e. convertible into the ScGeom type), if the virtual sphere’s motion is defined correctly (see e.g. Ig2_Sphere_ChainedCylinder_CylScGeom.

Short explanation of what we want to avoid :

Numerical ratcheting is best understood considering a small elastic cycle at a contact between two grains : assuming b1 is fixed, impose this displacement to b2 :

  1. translation dx in the normal direction
  2. rotation a
  3. translation -dx (back to the initial position)
  4. rotation -a (back to the initial orientation)

If the branch vector used to define the relative shear in rotation×branch is not constant (typically if it is defined from the vector center→contactPoint), then the shear displacement at the end of this cycle is not zero: rotations a and -a are multiplied by branches of different lengths.

It results in a finite contact force at the end of the cycle even though the positions and orientations are unchanged, in total contradiction with the elastic nature of the problem. It could also be seen as an inconsistent energy creation or loss. Given that DEM simulations tend to generate oscillations around equilibrium (damped mass-spring), it can have a significant impact on the evolution of the packings, resulting for instance in slow creep in iterations under constant load.

The solution adopted here to avoid ratcheting is as proposed by McNamara and co-workers. They analyzed the ratcheting problem in detail - even though they comment on the basis of a cycle that differs from the one shown above. One will find interesting discussions in e.g. [McNamara2008], even though solution it suggests is not fully applied here (equations of motion are not incorporating alpha, in contradiction with what is suggested by McNamara et al.).

bases

Ordered list of types (as strings) this functor accepts.

creep(=false)

Substract rotational creep from relative rotation. The rotational creep ScGeom6D::twistCreep is a quaternion and has to be updated inside a constitutive law, see for instance Law2_ScGeom6D_CohFrictPhys_CohesionMoment.

dict() → dict

Return dictionary of attributes.

interactionDetectionFactor

Enlarge both radii by this factor (if >1), to permit creation of distant interactions.

InteractionGeometry will be computed when interactionDetectionFactor*(rad1+rad2) > distance.

Note

This parameter is functionally coupled with Bo1_Sphere_Aabb::aabbEnlargeFactor, which will create larger bounding boxes and should be of the same value.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

updateRotations(=true)

Precompute relative rotations. Turning this false can speed up simulations when rotations are not needed in constitutive laws (e.g. when spheres are compressed without cohesion and moment in early stage of a triaxial test), but is not foolproof. Change this value only if you know what you are doing.

class yade.wrapper.Ig2_Polyhedra_Polyhedra_PolyhedraGeom(inherits IGeomFunctor → Functor → Serializable)

Create/update geometry of collision between 2 Polyhedras

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ig2_Sphere_ChainedCylinder_CylScGeom(inherits IGeomFunctor → Functor → Serializable)

Create/update a ScGeom instance representing intersection of two Spheres.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

interactionDetectionFactor(=1)

Enlarge both radii by this factor (if >1), to permit creation of distant interactions.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ig2_Sphere_ChainedCylinder_CylScGeom6D(inherits Ig2_Sphere_ChainedCylinder_CylScGeom → IGeomFunctor → Functor → Serializable)

Create/update a ScGeom6D instance representing the geometry of a contact point between two Spheres, including relative rotations.

bases

Ordered list of types (as strings) this functor accepts.

creep(=false)

Substract rotational creep from relative rotation. The rotational creep ScGeom6D::twistCreep is a quaternion and has to be updated inside a constitutive law, see for instance Law2_ScGeom6D_CohFrictPhys_CohesionMoment.

dict() → dict

Return dictionary of attributes.

interactionDetectionFactor(=1)

Enlarge both radii by this factor (if >1), to permit creation of distant interactions.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

updateRotations(=false)

Precompute relative rotations. Turning this false can speed up simulations when rotations are not needed in constitutive laws (e.g. when spheres are compressed without cohesion and moment in early stage of a triaxial test), but is not foolproof. Change this value only if you know what you are doing.

class yade.wrapper.Ig2_Sphere_GridConnection_ScGridCoGeom(inherits IGeomFunctor → Functor → Serializable)

Create/update a ScGridCoGeom6D instance representing the geometry of a contact point between a GricConnection and a Sphere including relative rotations.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

interactionDetectionFactor(=1)

Enlarge both radii by this factor (if >1), to permit creation of distant interactions.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ig2_Sphere_Polyhedra_ScGeom(inherits IGeomFunctor → Functor → Serializable)

Create/update geometry of collision between Sphere and Polyhedra

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

edgeCoeff(=1.0)

multiplier of penetrationDepth when sphere contacts edge (simulating smaller volume of actual intersection or when several polyhedrons has common edge)

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

vertexCoeff(=1.0)

multiplier of penetrationDepth when sphere contacts vertex (simulating smaller volume of actual intersection or when several polyhedrons has common vertex)

class yade.wrapper.Ig2_Sphere_Sphere_L3Geom(inherits IGeomFunctor → Functor → Serializable)

Functor for computing incrementally configuration of 2 Spheres stored in L3Geom; the configuration is positioned in global space by local origin \vec{c} (contact point) and rotation matrix \mat{T} (orthonormal transformation matrix), and its degrees of freedom are local displacement \vec{u} (in one normal and two shear directions); with Ig2_Sphere_Sphere_L6Geom and L6Geom, there is additionally \vec{\phi}. The first row of \mat{T}, i.e. local x-axis, is the contact normal noted \vec{n} for brevity. Additionally, quasi-constant values of \vec{u}_0 (and \vec{\phi}_0) are stored as shifted origins of \vec{u} (and \vec{\phi}); therefore, current value of displacement is always \curr{\vec{u}}-\vec{u}_0.

Suppose two spheres with radii r_i, positions \vec{x}_i, velocities \vec{v}_i, angular velocities \vec{\omega}_i.

When there is not yet contact, it will be created if u_N=|\curr{\vec{x}}_2-\curr{\vec{x}}_1|-|f_d|(r_1+r2)<0, where f_d is distFactor (sometimes also called ``interaction radius’‘). If f_d>0, then \vec{u}_{0x} will be initalized to u_N, otherwise to 0. In another words, contact will be created if spheres enlarged by |f_d| touch, and the ``equilibrium distance’’ (where \vec{u}_x-\vec{u}-{0x} is zero) will be set to the current distance if f_d is positive, and to the geometrically-touching distance if negative.

Local axes (rows of \mat{T}) are initially defined as follows:

  • local x-axis is \vec{n}=\vec{x}_l=\normalized{\vec{x}_2-\vec{x}_1};
  • local y-axis positioned arbitrarily, but in a deterministic manner: aligned with the xz plane (if \vec{n}_y<\vec{n}_z) or xy plane (otherwise);
  • local z-axis \vec{z}_l=\vec{x}_l\times\vec{y}_l.

If there has already been contact between the two spheres, it is updated to keep track of rigid motion of the contact (one that does not change mutual configuration of spheres) and mutual configuration changes. Rigid motion transforms local coordinate system and can be decomposed in rigid translation (affecting \vec{c}), and rigid rotation (affecting \mat{T}), which can be split in rotation \vec{o}_r perpendicular to the normal and rotation \vec{o}_t (``twist’‘) parallel with the normal:

\pprev{\vec{o}_r}=\prev{\vec{n}}\times\curr{\vec{n}}.

Since velocities are known at previous midstep (t-\Dt/2), we consider mid-step normal

\pprev{\vec{n}}=\frac{\prev{\vec{n}}+\curr{\vec{n}}}{2}.

For the sake of numerical stability, \pprev{\vec{n}} is re-normalized after being computed, unless prohibited by approxMask. If approxMask has the appropriate bit set, the mid-normal is not compute, and we simply use \pprev{\vec{n}}\approx\prev{\vec{n}}.

Rigid rotation parallel with the normal is

\pprev{\vec{o}_t}=\pprev{\vec{n}}\left(\pprev{\vec{n}}\cdot\frac{\pprev{\vec{\omega}}_1+\pprev{\vec{\omega}}_2}{2}\right)\Dt.

Branch vectors \vec{b}_1, \vec{b}_2 (connecting \curr{\vec{x}}_1, \curr{\vec{x}}_2 with \curr{\vec{c}} are computed depending on noRatch (see here).

\begin{align*}
        \vec{b}_1&=\begin{cases} r_1 \curr{\vec{n}} & \mbox{with \texttt{noRatch}} \\ \curr{\vec{c}}-\curr{\vec{x}}_1 & \mbox{otherwise} \end{cases} \\
        \vec{b}_2&=\begin{cases} -r_2\curr{\vec{n}} & \mbox{with \texttt{noRatch}} \\ \curr{\vec{c}}-\curr{\vec{x}}_2 & \mbox{otherwise} \end{cases} \\
\end{align*}

Relative velocity at \curr{\vec{c}} can be computed as

\pprev{\vec{v}_r}=(\pprev{\vec{\tilde{v}}_2}+\vec{\omega}_2\times\vec{b}_2)-(\vec{v}_1+\vec{\omega}_1\times\vec{b}_1)

where \vec{\tilde{v}}_2 is \vec{v}_2 without mean-field velocity gradient in periodic boundary conditions (see Cell.homoDeform). In the numerial implementation, the normal part of incident velocity is removed (since it is computed directly) with \pprev{\vec{v}_{r2}}=\pprev{\vec{v}_r}-(\pprev{\vec{n}}\cdot\pprev{\vec{v}_r})\pprev{\vec{n}}.

Any vector \vec{a} expressed in global coordinates transforms during one timestep as

\curr{\vec{a}}=\prev{\vec{a}}+\pprev{\vec{v}_r}\Dt-\prev{\vec{a}}\times\pprev{\vec{o}_r}-\prev{\vec{a}}\times{\pprev{\vec{t}_r}}

where the increments have the meaning of relative shear, rigid rotation normal to \vec{n} and rigid rotation parallel with \vec{n}. Local coordinate system orientation, rotation matrix \mat{T}, is updated by rows, i.e.

\curr{\mat{T}}=\begin{pmatrix} \curr{\vec{n}_x} & \curr{\vec{n}_y} & \curr{\vec{n}_z} \\ \multicolumn{3}{c}{\prev{\mat{T}_{1,\bullet}}-\prev{\mat{T}_{1,\bullet}}\times\pprev{\vec{o}_r}-\prev{\mat{T}_{1,\bullet}}\times\pprev{\vec{o}_t}} \\ \multicolumn{3}{c}{\prev{\mat{T}_{2,\bullet}}-\prev{\mat{T}_{2,\bullet}}\times\pprev{\vec{o}_r}-\prev{\mat{T}_{,\bullet}}\times\pprev{\vec{o}_t}} \end{pmatrix}

This matrix is re-normalized (unless prevented by approxMask) and mid-step transformation is computed using quaternion spherical interpolation as

\pprev{\mat{T}}=\mathrm{Slerp}\,\left(\prev{\mat{T}};\curr{\mat{T}};t=1/2\right).

Depending on approxMask, this computation can be avoided by approximating \pprev{\mat{T}}=\prev{\mat{T}}.

Finally, current displacement is evaluated as

\curr{\vec{u}}=\prev{u}+\pprev{\mat{T}}\pprev{\vec{v}_r}\Dt.

For the normal component, non-incremental evaluation is preferred, giving

\curr{\vec{u}_x}=|\curr{\vec{x}_2}-\curr{\vec{x}_1}|-(r_1+r_2)

If this functor is called for L6Geom, local rotation is updated as

\curr{\vec{\phi}}=\prev{\vec{\phi}}+\pprev{\mat{T}}\Dt(\vec{\omega}_2-\vec{\omega}_1)

approxMask

Selectively enable geometrical approximations (bitmask); add the values for approximations to be enabled.

1 use previous transformation to transform velocities (which are known at mid-steps), instead of mid-step transformation computed as quaternion slerp at t=0.5.
2 do not take average (mid-step) normal when computing relative shear displacement, use previous value instead
4 do not re-normalize average (mid-step) normal, if used.…
By default, the mask is zero, wherefore none of these approximations is used.
bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

distFactor(=1)

Create interaction if spheres are not futher than distFactor *(r1+r2). If negative, zero normal deformation will be set to be the initial value (otherwise, the geometrical distance is the ‘’zero’’ one).

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

noRatch(=true)

See Ig2_Sphere_Sphere_ScGeom.avoidGranularRatcheting.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

trsfRenorm(=100)

How often to renormalize trsf; if non-positive, never renormalized (simulation might be unstable)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ig2_Sphere_Sphere_L6Geom(inherits Ig2_Sphere_Sphere_L3Geom → IGeomFunctor → Functor → Serializable)

Incrementally compute L6Geom for contact of 2 spheres.

approxMask

Selectively enable geometrical approximations (bitmask); add the values for approximations to be enabled.

1 use previous transformation to transform velocities (which are known at mid-steps), instead of mid-step transformation computed as quaternion slerp at t=0.5.
2 do not take average (mid-step) normal when computing relative shear displacement, use previous value instead
4 do not re-normalize average (mid-step) normal, if used.…
By default, the mask is zero, wherefore none of these approximations is used.
bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

distFactor(=1)

Create interaction if spheres are not futher than distFactor *(r1+r2). If negative, zero normal deformation will be set to be the initial value (otherwise, the geometrical distance is the ‘’zero’’ one).

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

noRatch(=true)

See Ig2_Sphere_Sphere_ScGeom.avoidGranularRatcheting.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

trsfRenorm(=100)

How often to renormalize trsf; if non-positive, never renormalized (simulation might be unstable)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ig2_Sphere_Sphere_ScGeom(inherits IGeomFunctor → Functor → Serializable)

Create/update a ScGeom instance representing the geometry of a contact point between two Spheres s.

avoidGranularRatcheting

Define relative velocity so that ratcheting is avoided. It applies for sphere-sphere contacts. It eventualy also apply for sphere-emulating interactions (i.e. convertible into the ScGeom type), if the virtual sphere’s motion is defined correctly (see e.g. Ig2_Sphere_ChainedCylinder_CylScGeom.

Short explanation of what we want to avoid :

Numerical ratcheting is best understood considering a small elastic cycle at a contact between two grains : assuming b1 is fixed, impose this displacement to b2 :

  1. translation dx in the normal direction
  2. rotation a
  3. translation -dx (back to the initial position)
  4. rotation -a (back to the initial orientation)

If the branch vector used to define the relative shear in rotation×branch is not constant (typically if it is defined from the vector center→contactPoint), then the shear displacement at the end of this cycle is not zero: rotations a and -a are multiplied by branches of different lengths.

It results in a finite contact force at the end of the cycle even though the positions and orientations are unchanged, in total contradiction with the elastic nature of the problem. It could also be seen as an inconsistent energy creation or loss. Given that DEM simulations tend to generate oscillations around equilibrium (damped mass-spring), it can have a significant impact on the evolution of the packings, resulting for instance in slow creep in iterations under constant load.

The solution adopted here to avoid ratcheting is as proposed by McNamara and co-workers. They analyzed the ratcheting problem in detail - even though they comment on the basis of a cycle that differs from the one shown above. One will find interesting discussions in e.g. [McNamara2008], even though solution it suggests is not fully applied here (equations of motion are not incorporating alpha, in contradiction with what is suggested by McNamara et al.).

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

interactionDetectionFactor

Enlarge both radii by this factor (if >1), to permit creation of distant interactions.

InteractionGeometry will be computed when interactionDetectionFactor*(rad1+rad2) > distance.

Note

This parameter is functionally coupled with Bo1_Sphere_Aabb::aabbEnlargeFactor, which will create larger bounding boxes and should be of the same value.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ig2_Sphere_Sphere_ScGeom6D(inherits Ig2_Sphere_Sphere_ScGeom → IGeomFunctor → Functor → Serializable)

Create/update a ScGeom6D instance representing the geometry of a contact point between two Spheres, including relative rotations.

avoidGranularRatcheting

Define relative velocity so that ratcheting is avoided. It applies for sphere-sphere contacts. It eventualy also apply for sphere-emulating interactions (i.e. convertible into the ScGeom type), if the virtual sphere’s motion is defined correctly (see e.g. Ig2_Sphere_ChainedCylinder_CylScGeom.

Short explanation of what we want to avoid :

Numerical ratcheting is best understood considering a small elastic cycle at a contact between two grains : assuming b1 is fixed, impose this displacement to b2 :

  1. translation dx in the normal direction
  2. rotation a
  3. translation -dx (back to the initial position)
  4. rotation -a (back to the initial orientation)

If the branch vector used to define the relative shear in rotation×branch is not constant (typically if it is defined from the vector center→contactPoint), then the shear displacement at the end of this cycle is not zero: rotations a and -a are multiplied by branches of different lengths.

It results in a finite contact force at the end of the cycle even though the positions and orientations are unchanged, in total contradiction with the elastic nature of the problem. It could also be seen as an inconsistent energy creation or loss. Given that DEM simulations tend to generate oscillations around equilibrium (damped mass-spring), it can have a significant impact on the evolution of the packings, resulting for instance in slow creep in iterations under constant load.

The solution adopted here to avoid ratcheting is as proposed by McNamara and co-workers. They analyzed the ratcheting problem in detail - even though they comment on the basis of a cycle that differs from the one shown above. One will find interesting discussions in e.g. [McNamara2008], even though solution it suggests is not fully applied here (equations of motion are not incorporating alpha, in contradiction with what is suggested by McNamara et al.).

bases

Ordered list of types (as strings) this functor accepts.

creep(=false)

Substract rotational creep from relative rotation. The rotational creep ScGeom6D::twistCreep is a quaternion and has to be updated inside a constitutive law, see for instance Law2_ScGeom6D_CohFrictPhys_CohesionMoment.

dict() → dict

Return dictionary of attributes.

interactionDetectionFactor

Enlarge both radii by this factor (if >1), to permit creation of distant interactions.

InteractionGeometry will be computed when interactionDetectionFactor*(rad1+rad2) > distance.

Note

This parameter is functionally coupled with Bo1_Sphere_Aabb::aabbEnlargeFactor, which will create larger bounding boxes and should be of the same value.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

updateRotations(=true)

Precompute relative rotations. Turning this false can speed up simulations when rotations are not needed in constitutive laws (e.g. when spheres are compressed without cohesion and moment in early stage of a triaxial test), but is not foolproof. Change this value only if you know what you are doing.

class yade.wrapper.Ig2_Tetra_Tetra_TTetraGeom(inherits IGeomFunctor → Functor → Serializable)

Create/update geometry of collision between 2 tetrahedra (TTetraGeom instance)

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ig2_Tetra_Tetra_TTetraSimpleGeom(inherits IGeomFunctor → Functor → Serializable)

EXPERIMANTAL. Create/update geometry of collision between 2 tetrahedra (TTetraSimpleGeom instance)

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ig2_Wall_Polyhedra_PolyhedraGeom(inherits IGeomFunctor → Functor → Serializable)

Create/update geometry of collision between Wall and Polyhedra

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ig2_Wall_Sphere_L3Geom(inherits Ig2_Sphere_Sphere_L3Geom → IGeomFunctor → Functor → Serializable)

Incrementally compute L3Geom for contact between Wall and Sphere. Uses attributes of Ig2_Sphere_Sphere_L3Geom.

approxMask

Selectively enable geometrical approximations (bitmask); add the values for approximations to be enabled.

1 use previous transformation to transform velocities (which are known at mid-steps), instead of mid-step transformation computed as quaternion slerp at t=0.5.
2 do not take average (mid-step) normal when computing relative shear displacement, use previous value instead
4 do not re-normalize average (mid-step) normal, if used.…
By default, the mask is zero, wherefore none of these approximations is used.
bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

distFactor(=1)

Create interaction if spheres are not futher than distFactor *(r1+r2). If negative, zero normal deformation will be set to be the initial value (otherwise, the geometrical distance is the ‘’zero’’ one).

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

noRatch(=true)

See Ig2_Sphere_Sphere_ScGeom.avoidGranularRatcheting.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

trsfRenorm(=100)

How often to renormalize trsf; if non-positive, never renormalized (simulation might be unstable)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ig2_Wall_Sphere_ScGeom(inherits IGeomFunctor → Functor → Serializable)

Create/update a ScGeom instance representing intersection of Wall and Sphere.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

noRatch(=true)

Avoid granular ratcheting

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

IGeomDispatcher

class yade.wrapper.IGeomDispatcher(inherits Dispatcher → Engine → Serializable)

Dispatcher calling functors based on received argument type(s).

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

dispFunctor((Shape)arg2, (Shape)arg3) → IGeomFunctor

Return functor that would be dispatched for given argument(s); None if no dispatch; ambiguous dispatch throws.

dispMatrix([(bool)names=True]) → dict

Return dictionary with contents of the dispatch matrix.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

functors

Functors associated with this dispatcher.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

Interaction Physics creation

IPhysFunctor

digraph IPhysFunctor {
        rankdir=RL;
        margin=.2;
        "IPhysFunctor" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.IPhysFunctor"];
        "Ip2_FrictMat_FrictMat_CapillaryPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ip2_FrictMat_FrictMat_CapillaryPhys"];
        "Ip2_FrictMat_FrictMat_CapillaryPhys" -> "IPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ip2_LudingMat_LudingMat_LudingPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ip2_LudingMat_LudingMat_LudingPhys"];
        "Ip2_LudingMat_LudingMat_LudingPhys" -> "IPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ip2_FrictMat_PolyhedraMat_FrictPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ip2_FrictMat_PolyhedraMat_FrictPhys"];
        "Ip2_FrictMat_PolyhedraMat_FrictPhys" -> "IPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ip2_FrictMat_CpmMat_FrictPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ip2_FrictMat_CpmMat_FrictPhys"];
        "Ip2_FrictMat_CpmMat_FrictPhys" -> "IPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ip2_ElastMat_ElastMat_NormShearPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ip2_ElastMat_ElastMat_NormShearPhys"];
        "Ip2_ElastMat_ElastMat_NormShearPhys" -> "IPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ip2_JCFpmMat_JCFpmMat_JCFpmPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ip2_JCFpmMat_JCFpmMat_JCFpmPhys"];
        "Ip2_JCFpmMat_JCFpmMat_JCFpmPhys" -> "IPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ip2_FrictMat_FrictMat_FrictPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ip2_FrictMat_FrictMat_FrictPhys"];
        "Ip2_FrictMat_FrictMat_FrictPhys" -> "IPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ip2_FrictViscoMat_FrictViscoMat_FrictViscoPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ip2_FrictViscoMat_FrictViscoMat_FrictViscoPhys"];
        "Ip2_FrictViscoMat_FrictViscoMat_FrictViscoPhys" -> "IPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ip2_PolyhedraMat_PolyhedraMat_PolyhedraPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ip2_PolyhedraMat_PolyhedraMat_PolyhedraPhys"];
        "Ip2_PolyhedraMat_PolyhedraMat_PolyhedraPhys" -> "IPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ip2_2xInelastCohFrictMat_InelastCohFrictPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ip2_2xInelastCohFrictMat_InelastCohFrictPhys"];
        "Ip2_2xInelastCohFrictMat_InelastCohFrictPhys" -> "IPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ip2_FrictMat_FrictMat_ViscoFrictPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ip2_FrictMat_FrictMat_ViscoFrictPhys"];
        "Ip2_FrictMat_FrictMat_ViscoFrictPhys" -> "Ip2_FrictMat_FrictMat_FrictPhys" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ip2_ViscElCapMat_ViscElCapMat_ViscElCapPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ip2_ViscElCapMat_ViscElCapMat_ViscElCapPhys"];
        "Ip2_ViscElCapMat_ViscElCapMat_ViscElCapPhys" -> "Ip2_ViscElMat_ViscElMat_ViscElPhys" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ip2_ElastMat_ElastMat_NormPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ip2_ElastMat_ElastMat_NormPhys"];
        "Ip2_ElastMat_ElastMat_NormPhys" -> "IPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ip2_FrictMat_FrictViscoMat_FrictViscoPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ip2_FrictMat_FrictViscoMat_FrictViscoPhys"];
        "Ip2_FrictMat_FrictViscoMat_FrictViscoPhys" -> "IPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ip2_FrictMat_FrictMat_MindlinCapillaryPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ip2_FrictMat_FrictMat_MindlinCapillaryPhys"];
        "Ip2_FrictMat_FrictMat_MindlinCapillaryPhys" -> "IPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ip2_WireMat_WireMat_WirePhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ip2_WireMat_WireMat_WirePhys"];
        "Ip2_WireMat_WireMat_WirePhys" -> "IPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ip2_CpmMat_CpmMat_CpmPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ip2_CpmMat_CpmMat_CpmPhys"];
        "Ip2_CpmMat_CpmMat_CpmPhys" -> "IPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ip2_2xNormalInelasticMat_NormalInelasticityPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ip2_2xNormalInelasticMat_NormalInelasticityPhys"];
        "Ip2_2xNormalInelasticMat_NormalInelasticityPhys" -> "IPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ip2_CohFrictMat_CohFrictMat_CohFrictPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ip2_CohFrictMat_CohFrictMat_CohFrictPhys"];
        "Ip2_CohFrictMat_CohFrictMat_CohFrictPhys" -> "IPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ip2_BubbleMat_BubbleMat_BubblePhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ip2_BubbleMat_BubbleMat_BubblePhys"];
        "Ip2_BubbleMat_BubbleMat_BubblePhys" -> "IPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ip2_FrictMat_FrictMat_MindlinPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ip2_FrictMat_FrictMat_MindlinPhys"];
        "Ip2_FrictMat_FrictMat_MindlinPhys" -> "IPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Ip2_ViscElMat_ViscElMat_ViscElPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Ip2_ViscElMat_ViscElMat_ViscElPhys"];
        "Ip2_ViscElMat_ViscElMat_ViscElPhys" -> "IPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
}

class yade.wrapper.IPhysFunctor(inherits Functor → Serializable)

Functor for creating/updating Interaction::phys objects.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ip2_2xInelastCohFrictMat_InelastCohFrictPhys(inherits IPhysFunctor → Functor → Serializable)

Generates cohesive-frictional interactions with moments. Used in the contact law Law2_ScGeom6D_InelastCohFrictPhys_CohesionMoment.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ip2_2xNormalInelasticMat_NormalInelasticityPhys(inherits IPhysFunctor → Functor → Serializable)

Computes interaction attributes (of NormalInelasticityPhys type) from NormalInelasticMat material parameters. For simulations using Law2_ScGeom6D_NormalInelasticityPhys_NormalInelasticity. Note that, as for others Ip2 functors, most of the attributes are computed only once, when the interaction is new.

bases

Ordered list of types (as strings) this functor accepts.

betaR(=0.12)

Parameter for computing the torque-stifness : T-stifness = betaR * Rmoy^2

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ip2_BubbleMat_BubbleMat_BubblePhys(inherits IPhysFunctor → Functor → Serializable)

Generates bubble interactions.Used in the contact law Law2_ScGeom_BubblePhys_Bubble.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(inherits IPhysFunctor → Functor → Serializable)

Generates cohesive-frictional interactions with moments, used in the contact law Law2_ScGeom6D_CohFrictPhys_CohesionMoment. The normal/shear stiffness and friction definitions are the same as in Ip2_FrictMat_FrictMat_FrictPhys, check the documentation there for details.

Adhesions related to the normal and the shear components are calculated form CohFrictMat::normalCohesion (C_n) and CohFrictMat::shearlCohesion (C_s). For particles of size R_1,R_2 the adhesion will be a_i=C_i min(R_1,R_2)^2, i=n\,s.

Twist and rolling stiffnesses are proportional to the shear stiffness through dimensionless factors alphaKtw and alphaKr, such that the rotational stiffnesses are defined by k_s \alpha_i R_1 R_2, i=tw\,r

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

setCohesionNow(=false)

If true, assign cohesion to all existing contacts in current time-step. The flag is turned false automatically, so that assignment is done in the current timestep only.

setCohesionOnNewContacts(=false)

If true, assign cohesion at all new contacts. If false, only existing contacts can be cohesive (also see Ip2_CohFrictMat_CohFrictMat_CohFrictPhys::setCohesionNow), and new contacts are only frictional.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ip2_CpmMat_CpmMat_CpmPhys(inherits IPhysFunctor → Functor → Serializable)

Convert 2 CpmMat instances to CpmPhys with corresponding parameters. Uses simple (arithmetic) averages if material are different. Simple copy of parameters is performed if the material is shared between both particles. See cpm-model for detals.

bases

Ordered list of types (as strings) this functor accepts.

cohesiveThresholdIter(=10)

Should new contacts be cohesive? They will before this iter#, they will not be afterwards. If 0, they will never be. If negative, they will always be created as cohesive (10 by default).

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ip2_ElastMat_ElastMat_NormPhys(inherits IPhysFunctor → Functor → Serializable)

Create a NormPhys from two ElastMats. TODO. EXPERIMENTAL

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ip2_ElastMat_ElastMat_NormShearPhys(inherits IPhysFunctor → Functor → Serializable)

Create a NormShearPhys from two ElastMats. TODO. EXPERIMENTAL

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ip2_FrictMat_CpmMat_FrictPhys(inherits IPhysFunctor → Functor → Serializable)

Convert CpmMat instance and FrictMat instance to FrictPhys with corresponding parameters (young, poisson, frictionAngle). Uses simple (arithmetic) averages if material parameters are different.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ip2_FrictMat_FrictMat_CapillaryPhys(inherits IPhysFunctor → Functor → Serializable)

RelationShips to use with Law2_ScGeom_CapillaryPhys_Capillarity.

In these RelationShips all the interaction attributes are computed.

Warning

as in the others Ip2 functors, most of the attributes are computed only once, when the interaction is new.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ip2_FrictMat_FrictMat_FrictPhys(inherits IPhysFunctor → Functor → Serializable)

Create a FrictPhys from two FrictMats. The compliance of one sphere under point load is defined here as 1/(E.D), with E the stiffness of the sphere and D its diameter. The compliance of the contact itself will be the sum of compliances from each sphere, i.e. 1/(E_1.D_1)+1/(E_2.D_2) in the general case, or 2/(E.D) in the special case of equal sizes and equal stiffness. Note that summing compliances corresponds to an harmonic average of stiffnesss (as in e.g. [Scholtes2009a]), which is how kn is actually computed in the Ip2_FrictMat_FrictMat_FrictPhys functor:

k_n = \frac{E_1D_1*E_2D_2}{E_1D_1+E_2D_2}=\frac{k_1*k_2}{k_1+k_2}, with k_i=E_iD_i.

The shear stiffness ks of one sphere is defined via the material parameter ElastMat::poisson, as ks=poisson*kn, and the resulting shear stiffness of the interaction will be also an harmonic average. In the case of a contact between a ViscElMat and a FrictMat, be sure to set FrictMat::young and FrictMat::poisson, otherwise the default value will be used.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

frictAngle(=uninitalized)

Instance of MatchMaker determining how to compute interaction’s friction angle. If None, minimum value is used.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ip2_FrictMat_FrictMat_MindlinCapillaryPhys(inherits IPhysFunctor → Functor → Serializable)

RelationShips to use with Law2_ScGeom_CapillaryPhys_Capillarity

In these RelationShips all the interaction attributes are computed.

Warning

as in the others Ip2 functors, most of the attributes are computed only once, when the interaction is new.

bases

Ordered list of types (as strings) this functor accepts.

betan(=uninitalized)

Normal viscous damping ratio \beta_n.

betas(=uninitalized)

Shear viscous damping ratio \beta_s.

dict() → dict

Return dictionary of attributes.

en(=uninitalized)

Normal coefficient of restitution e_n.

es(=uninitalized)

Shear coefficient of restitution e_s.

eta(=0.0)

Coefficient to determine the plastic bending moment

gamma(=0.0)

Surface energy parameter [J/m^2] per each unit contact surface, to derive DMT formulation from HM

krot(=0.0)

Rotational stiffness for moment contact law

ktwist(=0.0)

Torsional stiffness for moment contact law

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ip2_FrictMat_FrictMat_MindlinPhys(inherits IPhysFunctor → Functor → Serializable)

Calculate some physical parameters needed to obtain the normal and shear stiffnesses according to the Hertz-Mindlin formulation (as implemented in PFC).

Viscous parameters can be specified either using coefficients of restitution (e_n, e_s) or viscous damping ratio (\beta_n, \beta_s). The following rules apply: #. If the \beta_n (\beta_s) ratio is given, it is assigned to MindlinPhys.betan (MindlinPhys.betas) directly. #. If e_n is given, MindlinPhys.betan is computed using \beta_n=-(\log e_n)/\sqrt{\pi^2+(\log e_n)^2}. The same applies to e_s, MindlinPhys.betas. #. It is an error (exception) to specify both e_n and \beta_n (e_s and \beta_s). #. If neither e_n nor \beta_n is given, zero value for MindlinPhys.betan is used; there will be no viscous effects. #.If neither e_s nor \beta_s is given, the value of MindlinPhys.betan is used for MindlinPhys.betas as well.

The e_n, \beta_n, e_s, \beta_s are MatchMaker objects; they can be constructed from float values to always return constant value.

See scripts/test/shots.py for an example of specifying e_n based on combination of parameters.

bases

Ordered list of types (as strings) this functor accepts.

betan(=uninitalized)

Normal viscous damping ratio \beta_n.

betas(=uninitalized)

Shear viscous damping ratio \beta_s.

dict() → dict

Return dictionary of attributes.

en(=uninitalized)

Normal coefficient of restitution e_n.

es(=uninitalized)

Shear coefficient of restitution e_s.

eta(=0.0)

Coefficient to determine the plastic bending moment

frictAngle(=uninitalized)

Instance of MatchMaker determining how to compute the friction angle of an interaction. If None, minimum value is used.

gamma(=0.0)

Surface energy parameter [J/m^2] per each unit contact surface, to derive DMT formulation from HM

krot(=0.0)

Rotational stiffness for moment contact law

ktwist(=0.0)

Torsional stiffness for moment contact law

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ip2_FrictMat_FrictMat_ViscoFrictPhys(inherits Ip2_FrictMat_FrictMat_FrictPhys → IPhysFunctor → Functor → Serializable)

Create a FrictPhys from two FrictMats. The compliance of one sphere under symetric point loads is defined here as 1/(E.r), with E the stiffness of the sphere and r its radius, and corresponds to a compliance 1/(2.E.r)=1/(E.D) from each contact point. The compliance of the contact itself will be the sum of compliances from each sphere, i.e. 1/(E.D1)+1/(E.D2) in the general case, or 1/(E.r) in the special case of equal sizes. Note that summing compliances corresponds to an harmonic average of stiffnesss, which is how kn is actually computed in the Ip2_FrictMat_FrictMat_FrictPhys functor.

The shear stiffness ks of one sphere is defined via the material parameter ElastMat::poisson, as ks=poisson*kn, and the resulting shear stiffness of the interaction will be also an harmonic average.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

frictAngle(=uninitalized)

Instance of MatchMaker determining how to compute interaction’s friction angle. If None, minimum value is used.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ip2_FrictMat_FrictViscoMat_FrictViscoPhys(inherits IPhysFunctor → Functor → Serializable)

Converts a FrictMat and FrictViscoMat instance to FrictViscoPhys with corresponding parameters. Basically this functor corresponds to Ip2_FrictMat_FrictMat_FrictPhys with the only difference that damping in normal direction can be considered.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

frictAngle(=uninitalized)

Instance of MatchMaker determining how to compute interaction’s friction angle. If None, minimum value is used.

kRatio(=uninitalized)

Instance of MatchMaker determining how to compute interaction’s shear contact stiffnesses. If this value is not given the elastic properties (i.e. poisson) of the two colliding materials are used to calculate the stiffness.

kn(=uninitalized)

Instance of MatchMaker determining how to compute interaction’s normal contact stiffnesses. If this value is not given the elastic properties (i.e. young) of the two colliding materials are used to calculate the stiffness.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ip2_FrictMat_PolyhedraMat_FrictPhys(inherits IPhysFunctor → Functor → Serializable)
bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ip2_FrictViscoMat_FrictViscoMat_FrictViscoPhys(inherits IPhysFunctor → Functor → Serializable)

Converts 2 FrictViscoMat instances to FrictViscoPhys with corresponding parameters. Basically this functor corresponds to Ip2_FrictMat_FrictMat_FrictPhys with the only difference that damping in normal direction can be considered.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

frictAngle(=uninitalized)

Instance of MatchMaker determining how to compute interaction’s friction angle. If None, minimum value is used.

kRatio(=uninitalized)

Instance of MatchMaker determining how to compute interaction’s shear contact stiffnesses. If this value is not given the elastic properties (i.e. poisson) of the two colliding materials are used to calculate the stiffness.

kn(=uninitalized)

Instance of MatchMaker determining how to compute interaction’s normal contact stiffnesses. If this value is not given the elastic properties (i.e. young) of the two colliding materials are used to calculate the stiffness.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ip2_JCFpmMat_JCFpmMat_JCFpmPhys(inherits IPhysFunctor → Functor → Serializable)

Converts 2 JCFpmMat instances to one JCFpmPhys instance, with corresponding parameters.

bases

Ordered list of types (as strings) this functor accepts.

cohesiveTresholdIteration(=1)

should new contacts be cohesive? If strictly negativ, they will in any case. If positiv, they will before this iter, they won’t afterward.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ip2_LudingMat_LudingMat_LudingPhys(inherits IPhysFunctor → Functor → Serializable)

Convert 2 instances of LudingMat to LudingPhys using the rule of consecutive connection.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ip2_PolyhedraMat_PolyhedraMat_PolyhedraPhys(inherits IPhysFunctor → Functor → Serializable)
bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ip2_ViscElCapMat_ViscElCapMat_ViscElCapPhys(inherits Ip2_ViscElMat_ViscElMat_ViscElPhys → IPhysFunctor → Functor → Serializable)

Convert 2 instances of ViscElCapMat to ViscElCapPhys using the rule of consecutive connection.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

en(=uninitalized)

Instance of MatchMaker determining restitution coefficient in normal direction

et(=uninitalized)

Instance of MatchMaker determining restitution coefficient in tangential direction

frictAngle(=uninitalized)

Instance of MatchMaker determining how to compute interaction’s friction angle. If None, minimum value is used.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

tc(=uninitalized)

Instance of MatchMaker determining contact time

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ip2_ViscElMat_ViscElMat_ViscElPhys(inherits IPhysFunctor → Functor → Serializable)

Convert 2 instances of ViscElMat to ViscElPhys using the rule of consecutive connection.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

en(=uninitalized)

Instance of MatchMaker determining restitution coefficient in normal direction

et(=uninitalized)

Instance of MatchMaker determining restitution coefficient in tangential direction

frictAngle(=uninitalized)

Instance of MatchMaker determining how to compute interaction’s friction angle. If None, minimum value is used.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

tc(=uninitalized)

Instance of MatchMaker determining contact time

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Ip2_WireMat_WireMat_WirePhys(inherits IPhysFunctor → Functor → Serializable)

Converts 2 WireMat instances to WirePhys with corresponding parameters.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

linkThresholdIteration(=1)

Iteration to create the link.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

IPhysDispatcher

class yade.wrapper.IPhysDispatcher(inherits Dispatcher → Engine → Serializable)

Dispatcher calling functors based on received argument type(s).

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

dispFunctor((Material)arg2, (Material)arg3) → IPhysFunctor

Return functor that would be dispatched for given argument(s); None if no dispatch; ambiguous dispatch throws.

dispMatrix([(bool)names=True]) → dict

Return dictionary with contents of the dispatch matrix.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

functors

Functors associated with this dispatcher.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

Constitutive laws

LawFunctor

digraph LawFunctor {
        rankdir=RL;
        margin=.2;
        "LawFunctor" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.LawFunctor"];
        "Law2_ScGeom_BubblePhys_Bubble" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_ScGeom_BubblePhys_Bubble"];
        "Law2_ScGeom_BubblePhys_Bubble" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_ScGeom_CpmPhys_Cpm" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_ScGeom_CpmPhys_Cpm"];
        "Law2_ScGeom_CpmPhys_Cpm" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_ScGeom_FrictViscoPhys_CundallStrackVisco" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_ScGeom_FrictViscoPhys_CundallStrackVisco"];
        "Law2_ScGeom_FrictViscoPhys_CundallStrackVisco" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_ChCylGeom6D_CohFrictPhys_CohesionMoment" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_ChCylGeom6D_CohFrictPhys_CohesionMoment"];
        "Law2_ChCylGeom6D_CohFrictPhys_CohesionMoment" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_ScGeom_ViscoFrictPhys_CundallStrack" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_ScGeom_ViscoFrictPhys_CundallStrack"];
        "Law2_ScGeom_ViscoFrictPhys_CundallStrack" -> "Law2_ScGeom_FrictPhys_CundallStrack" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_PolyhedraGeom_PolyhedraPhys_Volumetric" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_PolyhedraGeom_PolyhedraPhys_Volumetric"];
        "Law2_PolyhedraGeom_PolyhedraPhys_Volumetric" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_CylScGeom_FrictPhys_CundallStrack" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_CylScGeom_FrictPhys_CundallStrack"];
        "Law2_CylScGeom_FrictPhys_CundallStrack" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_ScGeom_MindlinPhys_HertzWithLinearShear" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_ScGeom_MindlinPhys_HertzWithLinearShear"];
        "Law2_ScGeom_MindlinPhys_HertzWithLinearShear" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_ScGeom6D_NormalInelasticityPhys_NormalInelasticity" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_ScGeom6D_NormalInelasticityPhys_NormalInelasticity"];
        "Law2_ScGeom6D_NormalInelasticityPhys_NormalInelasticity" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_ScGeom_ViscElPhys_Basic" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_ScGeom_ViscElPhys_Basic"];
        "Law2_ScGeom_ViscElPhys_Basic" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_TTetraSimpleGeom_NormPhys_Simple" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_TTetraSimpleGeom_NormPhys_Simple"];
        "Law2_TTetraSimpleGeom_NormPhys_Simple" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_L6Geom_FrictPhys_Linear" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_L6Geom_FrictPhys_Linear"];
        "Law2_L6Geom_FrictPhys_Linear" -> "Law2_L3Geom_FrictPhys_ElPerfPl" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_ScGridCoGeom_FrictPhys_CundallStrack" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_ScGridCoGeom_FrictPhys_CundallStrack"];
        "Law2_ScGridCoGeom_FrictPhys_CundallStrack" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_ScGeom_WirePhys_WirePM" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_ScGeom_WirePhys_WirePM"];
        "Law2_ScGeom_WirePhys_WirePM" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_ScGeom6D_InelastCohFrictPhys_CohesionMoment" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_ScGeom6D_InelastCohFrictPhys_CohesionMoment"];
        "Law2_ScGeom6D_InelastCohFrictPhys_CohesionMoment" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_ScGeom6D_CohFrictPhys_CohesionMoment" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_ScGeom6D_CohFrictPhys_CohesionMoment"];
        "Law2_ScGeom6D_CohFrictPhys_CohesionMoment" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_L3Geom_FrictPhys_ElPerfPl" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_L3Geom_FrictPhys_ElPerfPl"];
        "Law2_L3Geom_FrictPhys_ElPerfPl" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_CylScGeom6D_CohFrictPhys_CohesionMoment" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_CylScGeom6D_CohFrictPhys_CohesionMoment"];
        "Law2_CylScGeom6D_CohFrictPhys_CohesionMoment" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_ScGridCoGeom_CohFrictPhys_CundallStrack" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_ScGridCoGeom_CohFrictPhys_CundallStrack"];
        "Law2_ScGridCoGeom_CohFrictPhys_CundallStrack" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_ScGeom_MindlinPhys_Mindlin" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_ScGeom_MindlinPhys_Mindlin"];
        "Law2_ScGeom_MindlinPhys_Mindlin" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_ScGeom_LudingPhys_Basic" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_ScGeom_LudingPhys_Basic"];
        "Law2_ScGeom_LudingPhys_Basic" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_ScGeom_MindlinPhys_MindlinDeresiewitz" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_ScGeom_MindlinPhys_MindlinDeresiewitz"];
        "Law2_ScGeom_MindlinPhys_MindlinDeresiewitz" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_ScGeom_FrictPhys_CundallStrack" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_ScGeom_FrictPhys_CundallStrack"];
        "Law2_ScGeom_FrictPhys_CundallStrack" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_ScGeom_ViscElCapPhys_Basic" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_ScGeom_ViscElCapPhys_Basic"];
        "Law2_ScGeom_ViscElCapPhys_Basic" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM"];
        "Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM" -> "LawFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Law2_GridCoGridCoGeom_FrictPhys_CundallStrack" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Law2_GridCoGridCoGeom_FrictPhys_CundallStrack"];
        "Law2_GridCoGridCoGeom_FrictPhys_CundallStrack" -> "Law2_ScGeom_FrictPhys_CundallStrack" [arrowsize=0.5,style="setlinewidth(0.5)"];
}

class yade.wrapper.LawFunctor(inherits Functor → Serializable)

Functor for applying constitutive laws on interactions.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Law2_ChCylGeom6D_CohFrictPhys_CohesionMoment(inherits LawFunctor → Functor → Serializable)

Law for linear compression, and Mohr-Coulomb plasticity surface without cohesion. This law implements the classical linear elastic-plastic law from [CundallStrack1979] (see also [Pfc3dManual30]). The normal force is (with the convention of positive tensile forces) F_n=\min(k_n u_n, 0). The shear force is F_s=k_s u_s, the plasticity condition defines the maximum value of the shear force : F_s^{\max}=F_n\tan(\phi), with \phi the friction angle.

Note

This law is well tested in the context of triaxial simulation, and has been used for a number of published results (see e.g. [Scholtes2009b] and other papers from the same authors). It is generalised by Law2_ScGeom6D_CohFrictPhys_CohesionMoment, which adds cohesion and moments at contact.

always_use_moment_law(=false)

If true, use bending/twisting moments at all contacts. If false, compute moments only for cohesive contacts.

bases

Ordered list of types (as strings) this functor accepts.

creep_viscosity(=1)

creep viscosity [Pa.s/m]. probably should be moved to Ip2_CohFrictMat_CohFrictMat_CohFrictPhys...

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

neverErase(=false)

Keep interactions even if particles go away from each other (only in case another constitutive law is in the scene, e.g. Law2_ScGeom_CapillaryPhys_Capillarity)

shear_creep(=false)

activate creep on the shear force, using CohesiveFrictionalContactLaw::creep_viscosity.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

twist_creep(=false)

activate creep on the twisting moment, using CohesiveFrictionalContactLaw::creep_viscosity.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

useIncrementalForm(=false)

use the incremental formulation to compute bending and twisting moments. Creep on the twisting moment is not included in such a case.

class yade.wrapper.Law2_CylScGeom6D_CohFrictPhys_CohesionMoment(inherits LawFunctor → Functor → Serializable)

This law generalises Law2_CylScGeom_FrictPhys_CundallStrack by adding cohesion and moments at contact.

always_use_moment_law(=false)

If true, use bending/twisting moments at all contacts. If false, compute moments only for cohesive contacts.

bases

Ordered list of types (as strings) this functor accepts.

creep_viscosity(=1)

creep viscosity [Pa.s/m]. probably should be moved to Ip2_CohFrictMat_CohFrictMat_CohFrictPhys...

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

neverErase(=false)

Keep interactions even if particles go away from each other (only in case another constitutive law is in the scene, e.g. Law2_ScGeom_CapillaryPhys_Capillarity)

shear_creep(=false)

activate creep on the shear force, using CohesiveFrictionalContactLaw::creep_viscosity.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

twist_creep(=false)

activate creep on the twisting moment, using CohesiveFrictionalContactLaw::creep_viscosity.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

useIncrementalForm(=false)

use the incremental formulation to compute bending and twisting moments. Creep on the twisting moment is not included in such a case.

class yade.wrapper.Law2_CylScGeom_FrictPhys_CundallStrack(inherits LawFunctor → Functor → Serializable)

Law for linear compression, and Mohr-Coulomb plasticity surface without cohesion. This law implements the classical linear elastic-plastic law from [CundallStrack1979] (see also [Pfc3dManual30]). The normal force is (with the convention of positive tensile forces) F_n=\min(k_n u_n, 0). The shear force is F_s=k_s u_s, the plasticity condition defines the maximum value of the shear force : F_s^{\max}=F_n\tan(\phi), with \phi the friction angle.

Note

This law uses ScGeom.

Note

This law is well tested in the context of triaxial simulation, and has been used for a number of published results (see e.g. [Scholtes2009b] and other papers from the same authors). It is generalised by Law2_ScGeom6D_CohFrictPhys_CohesionMoment, which adds cohesion and moments at contact.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

neverErase(=false)

Keep interactions even if particles go away from each other (only in case another constitutive law is in the scene, e.g. Law2_ScGeom_CapillaryPhys_Capillarity)

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Law2_GridCoGridCoGeom_FrictPhys_CundallStrack(inherits Law2_ScGeom_FrictPhys_CundallStrack → LawFunctor → Functor → Serializable)

Frictional elastic contact law between two gridConnection . See Law2_ScGeom_FrictPhys_CundallStrack for more details.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

elasticEnergy() → float

Compute and return the total elastic energy in all “FrictPhys” contacts

initPlasticDissipation((float)arg2) → None

Initialize cummulated plastic dissipation to a value (0 by default).

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

neverErase(=false)

Keep interactions even if particles go away from each other (only in case another constitutive law is in the scene, e.g. Law2_ScGeom_CapillaryPhys_Capillarity)

plasticDissipation() → float

Total energy dissipated in plastic slips at all FrictPhys contacts. Computed only if Law2_ScGeom_FrictPhys_CundallStrack::traceEnergy is true.

sphericalBodies(=true)

If true, compute branch vectors from radii (faster), else use contactPoint-position. Turning this flag true is safe for sphere-sphere contacts and a few other specific cases. It will give wrong values of torques on facets or boxes.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

traceEnergy(=false)

Define the total energy dissipated in plastic slips at all contacts. This will trace only plastic energy in this law, see O.trackEnergy for a more complete energies tracing

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Law2_L3Geom_FrictPhys_ElPerfPl(inherits LawFunctor → Functor → Serializable)

Basic law for testing L3Geom; it bears no cohesion (unless noBreak is True), and plastic slip obeys the Mohr-Coulomb criterion (unless noSlip is True).

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

noBreak(=false)

Do not break contacts when particles separate.

noSlip(=false)

No plastic slipping.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Law2_L6Geom_FrictPhys_Linear(inherits Law2_L3Geom_FrictPhys_ElPerfPl → LawFunctor → Functor → Serializable)

Basic law for testing L6Geom – linear in both normal and shear sense, without slip or breakage.

bases

Ordered list of types (as strings) this functor accepts.

charLen(=1)

Characteristic length with the meaning of the stiffness ratios bending/shear and torsion/normal.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

noBreak(=false)

Do not break contacts when particles separate.

noSlip(=false)

No plastic slipping.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Law2_PolyhedraGeom_PolyhedraPhys_Volumetric(inherits LawFunctor → Functor → Serializable)

Calculate physical response of 2 vector in interaction, based on penetration configuration given by PolyhedraGeom. Normal force is proportional to the volume of intersection

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

elasticEnergy() → float

Compute and return the total elastic energy in all “FrictPhys” contacts

initPlasticDissipation((float)arg2) → None

Initialize cummulated plastic dissipation to a value (0 by default).

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

plasticDissipation() → float

Total energy dissipated in plastic slips at all FrictPhys contacts. Computed only if Law2_PolyhedraGeom_PolyhedraPhys_Volumetric::traceEnergy is true.

shearForce(=Vector3r::Zero())

Shear force from last step

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

traceEnergy(=false)

Define the total energy dissipated in plastic slips at all contacts. This will trace only plastic energy in this law, see O.trackEnergy for a more complete energies tracing

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

volumePower(=1.)

Power of volume used in evaluation of normal force. Default is 1.0 - normal force is linearly proportional to volume. 1.0/3.0 would mean that normal force is proportional to the cube root of volume, approximation of penetration depth.

class yade.wrapper.Law2_ScGeom6D_CohFrictPhys_CohesionMoment(inherits LawFunctor → Functor → Serializable)

Law for linear traction-compression-bending-twisting, with cohesion+friction and Mohr-Coulomb plasticity surface. This law adds adhesion and moments to Law2_ScGeom_FrictPhys_CundallStrack.

The normal force is (with the convention of positive tensile forces) F_n=min(k_n*u_n, a_n), with a_n the normal adhesion. The shear force is F_s=k_s*u_s, the plasticity condition defines the maximum value of the shear force, by default F_s^{max}=F_n*tan(\phi)+a_s, with \phi the friction angle and a_s the shear adhesion. If CohFrictPhys::cohesionDisableFriction is True, friction is ignored as long as adhesion is active, and the maximum shear force is only F_s^{max}=a_s.

If the maximum tensile or maximum shear force is reached and CohFrictPhys::fragile =True (default), the cohesive link is broken, and a_n, a_s are set back to zero. If a tensile force is present, the contact is lost, else the shear strength is F_s^{max}=F_n*tan(\phi). If CohFrictPhys::fragile =False, the behaviour is perfectly plastic, and the shear strength is kept constant.

If Law2_ScGeom6D_CohFrictPhys_CohesionMoment::momentRotationLaw =True, bending and twisting moments are computed using a linear law with moduli respectively k_t and k_r, so that the moments are : M_b=k_b*\Theta_b and M_t=k_t*\Theta_t, with \Theta_{b,t} the relative rotations between interacting bodies (details can be found in [Bourrier2013]). The maximum value of moments can be defined and takes the form of rolling friction. Cohesive -type moment may also be included in the future.

Creep at contact is implemented in this law, as defined in [Hassan2010]. If activated, there is a viscous behaviour of the shear and twisting components, and the evolution of the elastic parts of shear displacement and relative twist is given by du_{s,e}/dt=-F_s/\nu_s and d\Theta_{t,e}/dt=-M_t/\nu_t.

always_use_moment_law(=false)

If true, use bending/twisting moments at all contacts. If false, compute moments only for cohesive contacts.

bases

Ordered list of types (as strings) this functor accepts.

bendingElastEnergy() → float

Compute bending elastic energy.

creep_viscosity(=1)

creep viscosity [Pa.s/m]. probably should be moved to Ip2_CohFrictMat_CohFrictMat_CohFrictPhys.

dict() → dict

Return dictionary of attributes.

elasticEnergy() → float

Compute total elastic energy.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

neverErase(=false)

Keep interactions even if particles go away from each other (only in case another constitutive law is in the scene, e.g. Law2_ScGeom_CapillaryPhys_Capillarity)

normElastEnergy() → float

Compute normal elastic energy.

shearElastEnergy() → float

Compute shear elastic energy.

shear_creep(=false)

activate creep on the shear force, using CohesiveFrictionalContactLaw::creep_viscosity.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

traceEnergy(=false)

Define the total energy dissipated in plastic slips at all contacts. This will trace only plastic energy in this law, see O.trackEnergy for a more complete energies tracing

twistElastEnergy() → float

Compute twist elastic energy.

twist_creep(=false)

activate creep on the twisting moment, using CohesiveFrictionalContactLaw::creep_viscosity.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

useIncrementalForm(=false)

use the incremental formulation to compute bending and twisting moments. Creep on the twisting moment is not included in such a case.

class yade.wrapper.Law2_ScGeom6D_InelastCohFrictPhys_CohesionMoment(inherits LawFunctor → Functor → Serializable)

This law is currently under developpement. Final version and documentation will come before the end of 2014.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

normElastEnergy() → float

Compute normal elastic energy.

shearElastEnergy() → float

Compute shear elastic energy.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Law2_ScGeom6D_NormalInelasticityPhys_NormalInelasticity(inherits LawFunctor → Functor → Serializable)

Contact law used to simulate granular filler in rock joints [Duriez2009a], [Duriez2011]. It includes possibility of cohesion, moment transfer and inelastic compression behaviour (to reproduce the normal inelasticity observed for rock joints, for the latter).

The moment transfer relation corresponds to the adaptation of the work of Plassiard & Belheine (see in [DeghmReport2006] for example), which was realized by J. Kozicki, and is now coded in ScGeom6D.

As others LawFunctor, it uses pre-computed data of the interactions (rigidities, friction angles -with their tan()-, orientations of the interactions); this work is done here in Ip2_2xNormalInelasticMat_NormalInelasticityPhys.

To use this you should also use NormalInelasticMat as material type of the bodies.

The effects of this law are illustrated in examples/normalInelasticity-test.py

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

momentAlwaysElastic(=false)

boolean, true=> the part of the contact torque (caused by relative rotations, which is computed only if momentRotationLaw..) is not limited by a plastic threshold

momentRotationLaw(=true)

boolean, true=> computation of a torque (against relative rotation) exchanged between particles

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Law2_ScGeom_BubblePhys_Bubble(inherits LawFunctor → Functor → Serializable)

Constitutive law for Bubble model.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

pctMaxForce(=0.1)

Chan[2011] states the contact law is valid only for small interferences; therefore an exponential force-displacement curve models the contact stiffness outside that regime (large penetration). This artificial stiffening ensures that bubbles will not pass through eachother or completely overlap during the simulation. The maximum force is Fmax = (2*pi*surfaceTension*rAvg). pctMaxForce is the percentage of the maximum force dictates the separation threshold, Dmax, for each contact. Penetrations less than Dmax calculate the reaction force from the derived contact law, while penetrations equal to or greater than Dmax calculate the reaction force from the artificial exponential curve.

surfaceTension(=0.07197)

The surface tension in the liquid surrounding the bubbles. The default value is that of water at 25 degrees Celcius.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Law2_ScGeom_CpmPhys_Cpm(inherits LawFunctor → Functor → Serializable)

Constitutive law for the cpm-model.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

elasticEnergy() → float

Compute and return the total elastic energy in all “CpmPhys” contacts

epsSoft(=-3e-3, approximates confinement -20MPa precisely, -100MPa a little over, -200 and -400 are OK (secant))

Strain at which softening in compression starts (non-negative to deactivate)

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

omegaThreshold(=1., >=1. to deactivate, i.e. never delete any contacts)

damage after which the contact disappears (<1), since omega reaches 1 only for strain →+∞

relKnSoft(=.3)

Relative rigidity of the softening branch in compression (0=perfect elastic-plastic, <0 softening, >0 hardening)

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

yieldEllipseShift(=NaN)

horizontal scaling of the ellipse (shifts on the +x axis as interactions with +y are given)

yieldLogSpeed(=.1)

scaling in the logarithmic yield surface (should be <1 for realistic results; >=0 for meaningful results)

yieldSigmaTMagnitude((float)sigmaN, (float)omega, (float)undamagedCohesion, (float)tanFrictionAngle) → float

Return radius of yield surface for given material and state parameters; uses attributes of the current instance (yieldSurfType etc), change them before calling if you need that.

yieldSurfType(=2)

yield function: 0: mohr-coulomb (original); 1: parabolic; 2: logarithmic, 3: log+lin_tension, 4: elliptic, 5: elliptic+log

class yade.wrapper.Law2_ScGeom_FrictPhys_CundallStrack(inherits LawFunctor → Functor → Serializable)

Law for linear compression, and Mohr-Coulomb plasticity surface without cohesion. This law implements the classical linear elastic-plastic law from [CundallStrack1979] (see also [Pfc3dManual30]). The normal force is (with the convention of positive tensile forces) F_n=\min(k_n u_n, 0). The shear force is F_s=k_s u_s, the plasticity condition defines the maximum value of the shear force : F_s^{\max}=F_n\tan(\phi), with \phi the friction angle.

This law is well tested in the context of triaxial simulation, and has been used for a number of published results (see e.g. [Scholtes2009b] and other papers from the same authors). It is generalised by Law2_ScGeom6D_CohFrictPhys_CohesionMoment, which adds cohesion and moments at contact.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

elasticEnergy() → float

Compute and return the total elastic energy in all “FrictPhys” contacts

initPlasticDissipation((float)arg2) → None

Initialize cummulated plastic dissipation to a value (0 by default).

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

neverErase(=false)

Keep interactions even if particles go away from each other (only in case another constitutive law is in the scene, e.g. Law2_ScGeom_CapillaryPhys_Capillarity)

plasticDissipation() → float

Total energy dissipated in plastic slips at all FrictPhys contacts. Computed only if Law2_ScGeom_FrictPhys_CundallStrack::traceEnergy is true.

sphericalBodies(=true)

If true, compute branch vectors from radii (faster), else use contactPoint-position. Turning this flag true is safe for sphere-sphere contacts and a few other specific cases. It will give wrong values of torques on facets or boxes.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

traceEnergy(=false)

Define the total energy dissipated in plastic slips at all contacts. This will trace only plastic energy in this law, see O.trackEnergy for a more complete energies tracing

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Law2_ScGeom_FrictViscoPhys_CundallStrackVisco(inherits LawFunctor → Functor → Serializable)

Constitutive law for the FrictViscoPM. Corresponds to Law2_ScGeom_FrictPhys_CundallStrack with the only difference that viscous damping in normal direction can be considered.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

elasticEnergy() → float

Compute and return the total elastic energy in all “FrictViscoPhys” contacts

initPlasticDissipation((float)arg2) → None

Initialize cummulated plastic dissipation to a value (0 by default).

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

neverErase(=false)

Keep interactions even if particles go away from each other (only in case another constitutive law is in the scene, e.g. Law2_ScGeom_CapillaryPhys_Capillarity)

plasticDissipation() → float

Total energy dissipated in plastic slips at all FrictPhys contacts. Computed only if :yref:Law2_ScGeom_FrictViscoPhys_CundallStrackVisco::traceEnergy` is true.

sphericalBodies(=true)

If true, compute branch vectors from radii (faster), else use contactPoint-position. Turning this flag true is safe for sphere-sphere contacts and a few other specific cases. It will give wrong values of torques on facets or boxes.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

traceEnergy(=false)

Define the total energy dissipated in plastic slips at all contacts. This will trace only plastic energy in this law, see O.trackEnergy for a more complete energies tracing

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM(inherits LawFunctor → Functor → Serializable)

Interaction law for cohesive frictional material, e.g. rock, possibly presenting joint surfaces, that can be mechanically described with a smooth contact logic [Ivars2011] (implemented in Yade in [Scholtes2012]). See examples/jointedCohesiveFrictionalPM for script examples. Joint surface definitions (through stl meshes or direct definition with gts module) are illustrated there.

Key(="")

string specifying the name of saved file ‘cracks___.txt’, when recordCracks is true.

bases

Ordered list of types (as strings) this functor accepts.

cracksFileExist(=false)

if true (and if recordCracks), data are appended to an existing ‘cracksKey’ text file; otherwise its content is reset.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

neverErase(=false)

Keep interactions even if particles go away from each other (only in case another constitutive law is in the scene

recordCracks(=false)

if true, data about interactions that lose their cohesive feature are stored in a text file cracksKey.txt (see Key and cracksFileExist). It contains 9 columns: the break iteration, the 3 coordinates of the contact point, the type (1 means shear break, while 0 corresponds to tensile break), the ‘’cross section’’ (mean radius of the 2 spheres) and the 3 coordinates of the contact normal.

smoothJoint(=false)

if true, interactions of particles belonging to joint surface (JCFpmPhys.isOnJoint) are handled according to a smooth contact logic [Ivars2011], [Scholtes2012].

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Law2_ScGeom_LudingPhys_Basic(inherits LawFunctor → Functor → Serializable)

Linear viscoelastic model operating on ScGeom and LudingPhys.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Law2_ScGeom_MindlinPhys_HertzWithLinearShear(inherits LawFunctor → Functor → Serializable)

Constitutive law for the Hertz formulation (using MindlinPhys.kno) and linear beahvior in shear (using MindlinPhys.kso for stiffness and FrictPhys.tangensOfFrictionAngle).

Note

No viscosity or damping. If you need those, look at Law2_ScGeom_MindlinPhys_Mindlin, which also includes non-linear Mindlin shear.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

neverErase(=false)

Keep interactions even if particles go away from each other (only in case another constitutive law is in the scene, e.g. Law2_ScGeom_CapillaryPhys_Capillarity)

nonLin(=0)

Shear force nonlinearity (the value determines how many features of the non-linearity are taken in account). 1: ks as in HM 2: shearElastic increment computed as in HM 3. granular ratcheting disabled.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Law2_ScGeom_MindlinPhys_Mindlin(inherits LawFunctor → Functor → Serializable)

Constitutive law for the Hertz-Mindlin formulation. It includes non linear elasticity in the normal direction as predicted by Hertz for two non-conforming elastic contact bodies. In the shear direction, instead, it reseambles the simplified case without slip discussed in Mindlin’s paper, where a linear relationship between shear force and tangential displacement is provided. Finally, the Mohr-Coulomb criterion is employed to established the maximum friction force which can be developed at the contact. Moreover, it is also possible to include the effect of linear viscous damping through the definition of the parameters \beta_{n} and \beta_{s}.

bases

Ordered list of types (as strings) this functor accepts.

calcEnergy(=false)

bool to calculate energy terms (shear potential energy, dissipation of energy due to friction and dissipation of energy due to normal and tangential damping)

contactsAdhesive() → float

Compute total number of adhesive contacts.

dict() → dict

Return dictionary of attributes.

frictionDissipation(=uninitalized)

Energy dissipation due to sliding

includeAdhesion(=false)

bool to include the adhesion force following the DMT formulation. If true, also the normal elastic energy takes into account the adhesion effect.

includeMoment(=false)

bool to consider rolling resistance (if Ip2_FrictMat_FrictMat_MindlinPhys::eta is 0.0, no plastic condition is applied.)

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

neverErase(=false)

Keep interactions even if particles go away from each other (only in case another constitutive law is in the scene, e.g. Law2_ScGeom_CapillaryPhys_Capillarity)

normDampDissip(=uninitalized)

Energy dissipated by normal damping

normElastEnergy() → float

Compute normal elastic potential energy. It handles the DMT formulation if Law2_ScGeom_MindlinPhys_Mindlin::includeAdhesion is set to true.

preventGranularRatcheting(=true)

bool to avoid granular ratcheting

ratioSlidingContacts() → float

Return the ratio between the number of contacts sliding to the total number at a given time.

shearDampDissip(=uninitalized)

Energy dissipated by tangential damping

shearEnergy(=uninitalized)

Shear elastic potential energy

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Law2_ScGeom_MindlinPhys_MindlinDeresiewitz(inherits LawFunctor → Functor → Serializable)

Hertz-Mindlin contact law with partial slip solution, as described in [Thornton1991].

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

neverErase(=false)

Keep interactions even if particles go away from each other (only in case another constitutive law is in the scene, e.g. Law2_ScGeom_CapillaryPhys_Capillarity)

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Law2_ScGeom_ViscElCapPhys_Basic(inherits LawFunctor → Functor → Serializable)

Extended version of Linear viscoelastic model with capillary parameters.

NLiqBridg(=uninitalized)

The total number of liquid bridges

VLiqBridg(=uninitalized)

The total volume of liquid bridges

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Law2_ScGeom_ViscElPhys_Basic(inherits LawFunctor → Functor → Serializable)

Linear viscoelastic model operating on ScGeom and ViscElPhys. The contact law is visco-elastic in the normal direction, and visco-elastic frictional in the tangential direction. The normal contact is modelled as a spring of equivalent stiffness k_n, placed in parallel with a viscous damper of equivalent viscosity c_n. As for the tangential contact, it is made of a spring-dashpot system (in parallel with equivalent stiffness k_s and viscosity c_s) in serie with a slider of friction coefficient \mu  = \tan \phi.

The friction coefficient \mu  = \tan \phi is always evaluated as \tan(\min(\phi_1,\phi_2)), where \phi_1 and \phi_2 are respectively the friction angle of particle 1 and 2. For the other parameters, depending on the material input, the equivalent parameters of the contact (K_n,C_n,K_s,C_s,\phi) are evaluated differently. In the following, the quantities in parenthesis are the material constant which are precised for each particle. They are then associated to particle 1 and 2 (e.g. kn_1,kn_2,cn_1...), and should not be confused with the equivalent parameters of the contact (K_n,C_n,K_s,C_s,\phi).

  • If contact time (tc), normal and tangential restitution coefficient (en,et) are precised, the equivalent parameters are evaluated following the formulation of Pournin [Pournin2001].
  • If normal and tangential stiffnesses (kn, ks) and damping constant (cn,cs) of each particle are precised, the equivalent stiffnesses and damping constants of each contact made of two particles 1 and 2 is made A = 2\frac{a_1 a_2}{a_1 + a_2}, where A is K_n, K_s, C_n and C_s, and 1 and 2 refer to the value associated to particle 1 and 2.
  • Alternatively it is possible to precise the Young modulus (young) and poisson’s ratio (poisson) instead of the normal and spring constant (kn and ks). In this case, the equivalent parameters are evaluated the same way as the previous case with kn_x = E_x d_x, ks_x = v_x kn_x, where E_x, v_x and d_x are Young modulus, poisson’s ratio and diameter of particle x.
  • If Yound modulus (young), poisson’s ratio (poisson), normal and tangential restitution coefficient (en,et) are precised, the equivalent stiffnesses are evaluated as previously: K_n = 2\frac{kn_1 kn_2}{kn_1 + kn_2}, kn_x = E_x d_x, K_s = 2(ks_1 ks_2)/(ks_1 + ks_2), ks_x = v kn_x. The damping constant is computed at each contact in order to fulfill the normal restitution coefficient e_n = (en_1 en_2)/(en_1 + en_2). This is achieved resolving numerically equation 21 of [Schwager2007] (There is in fact a mistake in the article from equation 18 to 19, so that there is a change in sign). Be careful in this configuration the tangential restitution coefficient is set to 1 (no tangential damping). This formulation imposes directly the normal restitution coefficient of the collisions instead of the damping constant.
bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Law2_ScGeom_ViscoFrictPhys_CundallStrack(inherits Law2_ScGeom_FrictPhys_CundallStrack → LawFunctor → Functor → Serializable)

Law similar to Law2_ScGeom_FrictPhys_CundallStrack with the addition of shear creep at contacts.

bases

Ordered list of types (as strings) this functor accepts.

creepStiffness(=1)

dict() → dict

Return dictionary of attributes.

elasticEnergy() → float

Compute and return the total elastic energy in all “FrictPhys” contacts

initPlasticDissipation((float)arg2) → None

Initialize cummulated plastic dissipation to a value (0 by default).

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

neverErase(=false)

Keep interactions even if particles go away from each other (only in case another constitutive law is in the scene, e.g. Law2_ScGeom_CapillaryPhys_Capillarity)

plasticDissipation() → float

Total energy dissipated in plastic slips at all FrictPhys contacts. Computed only if Law2_ScGeom_FrictPhys_CundallStrack::traceEnergy is true.

shearCreep(=false)

sphericalBodies(=true)

If true, compute branch vectors from radii (faster), else use contactPoint-position. Turning this flag true is safe for sphere-sphere contacts and a few other specific cases. It will give wrong values of torques on facets or boxes.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

traceEnergy(=false)

Define the total energy dissipated in plastic slips at all contacts. This will trace only plastic energy in this law, see O.trackEnergy for a more complete energies tracing

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

viscosity(=1)

class yade.wrapper.Law2_ScGeom_WirePhys_WirePM(inherits LawFunctor → Functor → Serializable)

Constitutive law for the wire model.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

linkThresholdIteration(=1)

Iteration to create the link.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Law2_ScGridCoGeom_CohFrictPhys_CundallStrack(inherits LawFunctor → Functor → Serializable)

Law between a cohesive frictional GridConnection and a cohesive frictional Sphere. Almost the same than Law2_ScGeom6D_CohFrictPhys_CohesionMoment, but THE ROTATIONAL MOMENTS ARE NOT COMPUTED.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

neverErase(=false)

Keep interactions even if particles go away from each other (only in case another constitutive law is in the scene, e.g. Law2_ScGeom_CapillaryPhys_Capillarity)

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Law2_ScGridCoGeom_FrictPhys_CundallStrack(inherits LawFunctor → Functor → Serializable)

Law between a frictional GridConnection and a frictional Sphere. Almost the same than Law2_ScGeom_FrictPhys_CundallStrack, but the force is divided and applied on the two GridNodes only.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

neverErase(=false)

Keep interactions even if particles go away from each other (only in case another constitutive law is in the scene, e.g. Law2_ScGeom_CapillaryPhys_Capillarity)

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Law2_TTetraSimpleGeom_NormPhys_Simple(inherits LawFunctor → Functor → Serializable)

EXPERIMENTAL. TODO

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

LawDispatcher

class yade.wrapper.LawDispatcher(inherits Dispatcher → Engine → Serializable)

Dispatcher calling functors based on received argument type(s).

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

dispFunctor((IGeom)arg2, (IPhys)arg3) → LawFunctor

Return functor that would be dispatched for given argument(s); None if no dispatch; ambiguous dispatch throws.

dispMatrix([(bool)names=True]) → dict

Return dictionary with contents of the dispatch matrix.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

functors

Functors associated with this dispatcher.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

Callbacks

digraph IntrCallback {
        rankdir=RL;
        margin=.2;
        "IntrCallback" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.IntrCallback"];
        "SumIntrForcesCb" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.SumIntrForcesCb"];
        "SumIntrForcesCb" -> "IntrCallback" [arrowsize=0.5,style="setlinewidth(0.5)"];
}

class yade.wrapper.IntrCallback(inherits Serializable)

Abstract callback object which will be called for every (real) Interaction after the interaction has been processed by InteractionLoop.

At the beginning of the interaction loop, stepInit is called, initializing the object; it returns either NULL (to deactivate the callback during this time step) or pointer to function, which will then be passed (1) pointer to the callback object itself and (2) pointer to Interaction.

Note

(NOT YET DONE) This functionality is accessible from python by passing 4th argument to InteractionLoop constructor, or by appending the callback object to InteractionLoop::callbacks.

dict() → dict

Return dictionary of attributes.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.SumIntrForcesCb(inherits IntrCallback → Serializable)

Callback summing magnitudes of forces over all interactions. IPhys of interactions must derive from NormShearPhys (responsability fo the user).

dict() → dict

Return dictionary of attributes.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

Preprocessors

digraph FileGenerator {
        rankdir=RL;
        margin=.2;
        "FileGenerator" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.FileGenerator"];
        "CapillaryTriaxialTest" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.CapillaryTriaxialTest"];
        "CapillaryTriaxialTest" -> "FileGenerator" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "CohesiveTriaxialTest" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.CohesiveTriaxialTest"];
        "CohesiveTriaxialTest" -> "FileGenerator" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "SimpleShear" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.SimpleShear"];
        "SimpleShear" -> "FileGenerator" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "TriaxialTest" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.TriaxialTest"];
        "TriaxialTest" -> "FileGenerator" [arrowsize=0.5,style="setlinewidth(0.5)"];
}

class yade.wrapper.FileGenerator(inherits Serializable)

Base class for scene generators, preprocessors.

dict() → dict

Return dictionary of attributes.

generate((str)out) → None

Generate scene, save to given file

load() → None

Generate scene, save to temporary file and load immediately

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.CapillaryTriaxialTest(inherits FileGenerator → Serializable)

This preprocessor is a variant of TriaxialTest, including the model of capillary forces developed as part of the PhD of Luc Scholtès. See the documentation of Law2_ScGeom_CapillaryPhys_Capillarity or the main page https://yade-dem.org/wiki/CapillaryTriaxialTest, for more details.

Results obtained with this preprocessor were reported for instance in ‘Scholtes et al. Micromechanics of granular materials with capillary effects. International Journal of Engineering Science 2009,(47)1, 64-75.’

Key(="")

A code that is added to output filenames.

Rdispersion(=0.3)

Normalized standard deviation of generated sizes.

StabilityCriterion(=0.01)

Value of unbalanced force for which the system is considered stable. Used in conditionals to switch between loading stages.

WallStressRecordFile(="./WallStressesWater"+Key)

autoCompressionActivation(=true)

Do we just want to generate a stable packing under isotropic pressure (false) or do we want the triaxial loading to start automatically right after compaction stage (true)?

autoStopSimulation(=false)

freeze the simulation when conditions are reached (don’t activate this if you want to be able to run/stop from Qt GUI)

autoUnload(=true)

auto adjust the isotropic stress state from TriaxialTest::sigmaIsoCompaction to TriaxialTest::sigmaLateralConfinement if they have different values. See docs for TriaxialCompressionEngine::autoUnload

biaxial2dTest(=false)

FIXME : what is that?

binaryFusion(=true)

Defines how overlapping bridges affect the capillary forces (see CapillaryTriaxialTest::fusionDetection). If binary=true, the force is null as soon as there is an overlap detected, if not, the force is divided by the number of overlaps.

boxFrictionDeg(=0.0)

Friction angle [°] of boundaries contacts.

boxKsDivKn(=0.5)

Ratio of shear vs. normal contact stiffness for boxes.

boxWalls(=true)

Use boxes for boundaries (recommended).

boxYoungModulus(=15000000.0)

Stiffness of boxes.

capillaryPressure(=0)

Define succion in the packing [Pa]. This is the value used in the capillary model.

capillaryStressRecordFile(="./capStresses"+Key)

compactionFrictionDeg(=sphereFrictionDeg)

Friction angle [°] of spheres during compaction (different values result in different porosities)]. This value is overridden by TriaxialTest::sphereFrictionDeg before triaxial testing.

contactStressRecordFile(="./contStresses"+Key)

dampingForce(=0.2)

Coefficient of Cundal-Non-Viscous damping (applied on on the 3 components of forces)

dampingMomentum(=0.2)

Coefficient of Cundal-Non-Viscous damping (applied on on the 3 components of torques)

defaultDt(=0.0001)

Max time-step. Used as initial value if defined. Latter adjusted by the time stepper.

density(=2600)

density of spheres

dict() → dict

Return dictionary of attributes.

facetWalls(=false)

Use facets for boundaries (not tested)

finalMaxMultiplier(=1.001)

max multiplier of diameters during internal compaction (secondary precise adjustment)

fixedBoxDims(="")

string that contains some subset (max. 2) of {‘x’,’y’,’z’} ; contains axes will have box dimension hardcoded, even if box is scaled as mean_radius is prescribed: scaling will be applied on the rest.

fixedPoroCompaction(=false)

flag to choose an isotropic compaction until a fixed porosity choosing a same translation speed for the six walls

fixedPorosity(=1)

FIXME : what is that?

fusionDetection(=false)

test overlaps between liquid bridges on modify forces if overlaps exist

generate((str)out) → None

Generate scene, save to given file

importFilename(="")

File with positions and sizes of spheres.

internalCompaction(=false)

flag for choosing between moving boundaries or increasing particles sizes during the compaction stage.

load() → None

Generate scene, save to temporary file and load immediately

lowerCorner(=Vector3r(0, 0, 0))

Lower corner of the box.

maxMultiplier(=1.01)

max multiplier of diameters during internal compaction (initial fast increase)

maxWallVelocity(=10)

max velocity of boundaries. Usually useless, but can help stabilizing the system in some cases.

noFiles(=false)

Do not create any files during run (.xml, .spheres, wall stress records)

numberOfGrains(=400)

Number of generated spheres.

radiusControlInterval(=10)

interval between size changes when growing spheres.

radiusMean(=-1)

Mean radius. If negative (default), autocomputed to as a function of box size and TriaxialTest::numberOfGrains

recordIntervalIter(=20)

interval between file outputs

sigmaIsoCompaction(=-50000)

Confining stress during isotropic compaction (< 0 for real - compressive - compaction).

sigmaLateralConfinement(=-50000)

Lateral stress during triaxial loading (< 0 for classical compressive cases). An isotropic unloading is performed if the value is not equal to CapillaryTriaxialTest::SigmaIsoCompaction.

sphereFrictionDeg(=18.0)

Friction angle [°] of spheres assigned just before triaxial testing.

sphereKsDivKn(=0.5)

Ratio of shear vs. normal contact stiffness for spheres.

sphereYoungModulus(=15000000.0)

Stiffness of spheres.

strainRate(=1)

Strain rate in triaxial loading.

thickness(=0.001)

thickness of boundaries. It is arbitrary and should have no effect

timeStepOutputInterval(=50)

interval for outputing general information on the simulation (stress,unbalanced force,...)

timeStepUpdateInterval(=50)

interval for GlobalStiffnessTimeStepper

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

upperCorner(=Vector3r(1, 1, 1))

Upper corner of the box.

wallOversizeFactor(=1.3)

Make boundaries larger than the packing to make sure spheres don’t go out during deformation.

wallStiffnessUpdateInterval(=10)

interval for updating the stiffness of sample/boundaries contacts

wallWalls(=false)

Use walls for boundaries (not tested)

water(=true)

activate capillary model

class yade.wrapper.CohesiveTriaxialTest(inherits FileGenerator → Serializable)

This preprocessor is a variant of TriaxialTest using the cohesive-frictional contact law with moments. It sets up a scene for cohesive triaxial tests. See full documentation at http://yade-dem.org/wiki/TriaxialTest.

Cohesion is initially 0 by default. The suggested usage is to define cohesion values in a second step, after isotropic compaction : define shear and normal cohesions in Ip2_CohFrictMat_CohFrictMat_CohFrictPhys, then turn Ip2_CohFrictMat_CohFrictMat_CohFrictPhys::setCohesionNow true to assign them at each contact at next iteration.

Key(="")

A code that is added to output filenames.

StabilityCriterion(=0.01)

Value of unbalanced force for which the system is considered stable. Used in conditionals to switch between loading stages.

WallStressRecordFile(="./CohesiveWallStresses"+Key)

autoCompressionActivation(=true)

Do we just want to generate a stable packing under isotropic pressure (false) or do we want the triaxial loading to start automatically right after compaction stage (true)?

autoStopSimulation(=false)

freeze the simulation when conditions are reached (don’t activate this if you want to be able to run/stop from Qt GUI)

autoUnload(=true)

auto adjust the isotropic stress state from TriaxialTest::sigmaIsoCompaction to TriaxialTest::sigmaLateralConfinement if they have different values. See docs for TriaxialCompressionEngine::autoUnload

biaxial2dTest(=false)

FIXME : what is that?

boxFrictionDeg(=0.0)

Friction angle [°] of boundaries contacts.

boxKsDivKn(=0.5)

Ratio of shear vs. normal contact stiffness for boxes.

boxWalls(=true)

Use boxes for boundaries (recommended).

boxYoungModulus(=15000000.0)

Stiffness of boxes.

compactionFrictionDeg(=sphereFrictionDeg)

Friction angle [°] of spheres during compaction (different values result in different porosities)]. This value is overridden by TriaxialTest::sphereFrictionDeg before triaxial testing.

dampingForce(=0.2)

Coefficient of Cundal-Non-Viscous damping (applied on on the 3 components of forces)

dampingMomentum(=0.2)

Coefficient of Cundal-Non-Viscous damping (applied on on the 3 components of torques)

defaultDt(=0.001)

Max time-step. Used as initial value if defined. Latter adjusted by the time stepper.

density(=2600)

density of spheres

dict() → dict

Return dictionary of attributes.

facetWalls(=false)

Use facets for boundaries (not tested)

finalMaxMultiplier(=1.001)

max multiplier of diameters during internal compaction (secondary precise adjustment)

fixedBoxDims(="")

string that contains some subset (max. 2) of {‘x’,’y’,’z’} ; contains axes will have box dimension hardcoded, even if box is scaled as mean_radius is prescribed: scaling will be applied on the rest.

fixedPoroCompaction(=false)

flag to choose an isotropic compaction until a fixed porosity choosing a same translation speed for the six walls

fixedPorosity(=1)

FIXME : what is that?

generate((str)out) → None

Generate scene, save to given file

importFilename(="")

File with positions and sizes of spheres.

internalCompaction(=false)

flag for choosing between moving boundaries or increasing particles sizes during the compaction stage.

load() → None

Generate scene, save to temporary file and load immediately

lowerCorner(=Vector3r(0, 0, 0))

Lower corner of the box.

maxMultiplier(=1.01)

max multiplier of diameters during internal compaction (initial fast increase)

maxWallVelocity(=10)

max velocity of boundaries. Usually useless, but can help stabilizing the system in some cases.

noFiles(=false)

Do not create any files during run (.xml, .spheres, wall stress records)

normalCohesion(=0)

Material parameter used to define contact strength in tension.

numberOfGrains(=400)

Number of generated spheres.

radiusControlInterval(=10)

interval between size changes when growing spheres.

radiusDeviation(=0.3)

Normalized standard deviation of generated sizes.

radiusMean(=-1)

Mean radius. If negative (default), autocomputed to as a function of box size and TriaxialTest::numberOfGrains

recordIntervalIter(=20)

interval between file outputs

setCohesionOnNewContacts(=false)

create cohesionless (False) or cohesive (True) interactions for new contacts.

shearCohesion(=0)

Material parameter used to define shear strength of contacts.

sigmaIsoCompaction(=-50000)

Confining stress during isotropic compaction (< 0 for real - compressive - compaction).

sigmaLateralConfinement(=-50000)

Lateral stress during triaxial loading (< 0 for classical compressive cases). An isotropic unloading is performed if the value is not equal to TriaxialTest::sigmaIsoCompaction.

sphereFrictionDeg(=18.0)

Friction angle [°] of spheres assigned just before triaxial testing.

sphereKsDivKn(=0.5)

Ratio of shear vs. normal contact stiffness for spheres.

sphereYoungModulus(=15000000.0)

Stiffness of spheres.

strainRate(=0.1)

Strain rate in triaxial loading.

thickness(=0.001)

thickness of boundaries. It is arbitrary and should have no effect

timeStepUpdateInterval(=50)

interval for GlobalStiffnessTimeStepper

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

upperCorner(=Vector3r(1, 1, 1))

Upper corner of the box.

wallOversizeFactor(=1.3)

Make boundaries larger than the packing to make sure spheres don’t go out during deformation.

wallStiffnessUpdateInterval(=10)

interval for updating the stiffness of sample/boundaries contacts

wallWalls(=false)

Use walls for boundaries (not tested)

class yade.wrapper.SimpleShear(inherits FileGenerator → Serializable)

Preprocessor for creating a numerical model of a simple shear box.

  • Boxes (6) constitute the different sides of the box itself
  • Spheres are contained in the box. The sample is generated by default via the same method used in TriaxialTest Preprocesor (=> see in source function GenerateCloud). But import of a list of spheres from a text file can be also performed after few changes in the source code.
Launching this preprocessor will carry out an oedometric compression, until a value of normal stress equal to 2 MPa (and stable). But with others Engines KinemCNDEngine, KinemCNSEngine and KinemCNLEngine, respectively constant normal displacement, constant normal rigidity and constant normal stress paths can be carried out for such simple shear boxes.

NB about micro-parameters : their default values correspond to those used in [Duriez2009a] and [Duriez2011] to simulate infilled rock joints.

boxPoissonRatio(=0.04)

value of ElastMat::poisson for the spheres [-]

boxYoungModulus(=4.0e9)

value of ElastMat::young for the boxes [Pa]

density(=2600)

density of the spheres [kg/m^3]

dict() → dict

Return dictionary of attributes.

generate((str)out) → None

Generate scene, save to given file

gravApplied(=false)

depending on this, GravityEngine is added or not to the scene to take into account the weight of particles

gravity(=Vector3r(0, -9.81, 0))

vector corresponding to used gravity (if gravApplied) [m/s^2]

height(=0.02)

initial height (along y-axis) of the shear box [m]

length(=0.1)

initial length (along x-axis) of the shear box [m]

load() → None

Generate scene, save to temporary file and load immediately

sphereFrictionDeg(=37)

value of ElastMat::poisson for the spheres [^\circ] (the necessary conversion in rad is done automatically)

spherePoissonRatio(=0.04)

value of ElastMat::poisson for the spheres [-]

sphereYoungModulus(=4.0e9)

value of ElastMat::young for the spheres [Pa]

thickness(=0.001)

thickness of the boxes constituting the shear box [m]

timeStepUpdateInterval(=50)

value of TimeStepper::timeStepUpdateInterval for the TimeStepper used here

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

width(=0.04)

initial width (along z-axis) of the shear box [m]

class yade.wrapper.TriaxialTest(inherits FileGenerator → Serializable)

Create a scene for triaxal test.

Introduction

Yade includes tools to simulate triaxial tests on particles assemblies. This pre-processor (and variants like e.g. CapillaryTriaxialTest) illustrate how to use them. It generates a scene which will - by default - go through the following steps :

  • generate random loose packings in a parallelepiped.
  • compress the packing isotropicaly, either squeezing the packing between moving rigid boxes or expanding the particles while boxes are fixed (depending on flag internalCompaction). The confining pressure in this stage is defined via sigmaIsoCompaction.
  • when the packing is dense and stable, simulate a loading path and get the mechanical response as a result.

The default loading path corresponds to a constant lateral stress (sigmaLateralConfinement) in 2 directions and constant strain rate on the third direction. This default loading path is performed when the flag autoCompressionActivation it True, otherwise the simulation stops after isotropic compression.

Different loading paths might be performed. In order to define them, the user can modify the flags found in engine TriaxialStressController at any point in the simulation (in c++). If TriaxialStressController.wall_X_activated is true boundary X is moved automatically to maintain the defined stress level sigmaN (see axis conventions below). If false the boundary is not controlled by the engine at all. In that case the user is free to prescribe fixed position, constant velocity, or more complex conditions.

Note

Axis conventions. Boundaries perpendicular to the x axis are called “left” and “right”, y corresponds to “top” and “bottom”, and axis z to “front” and “back”. In the default loading path, strain rate is assigned along y, and constant stresses are assigned on x and z.

Essential engines
  1. The TriaxialCompressionEngine is used for controlling the state of the sample and simulating loading paths. TriaxialCompressionEngine inherits from TriaxialStressController, which computes stress- and strain-like quantities in the packing and maintain a constant level of stress at each boundary. TriaxialCompressionEngine has few more members in order to impose constant strain rate and control the transition between isotropic compression and triaxial test. Transitions are defined by changing some flags of the TriaxialStressController, switching from/to imposed strain rate to/from imposed stress.
  2. The class TriaxialStateRecorder is used to write to a file the history of stresses and strains.
  3. TriaxialTest is using GlobalStiffnessTimeStepper to compute an appropriate \Dt for the numerical scheme.

Note

TriaxialStressController::ComputeUnbalancedForce returns a value that can be useful for evaluating the stability of the packing. It is defined as (mean force on particles)/(mean contact force), so that it tends to 0 in a stable packing. This parameter is checked by TriaxialCompressionEngine to switch from one stage of the simulation to the next one (e.g. stop isotropic confinment and start axial loading)

Frequently Asked Questions

  1. How is generated the packing? How to change particles sizes distribution? Why do I have a message “Exceeded 3000 tries to insert non-overlapping sphere?

    The initial positioning of spheres is done by generating random (x,y,z) in a box and checking if a sphere of radius R (R also randomly generated with respect to a uniform distribution between mean*(1-std_dev) and mean*(1+std_dev) can be inserted at this location without overlaping with others.

    If the sphere overlaps, new (x,y,z)’s are generated until a free position for the new sphere is found. This explains the message you have: after 3000 trial-and-error, the sphere couldn’t be placed, and the algorithm stops.

    You get the message above if you try to generate an initialy dense packing, which is not possible with this algorithm. It can only generate clouds. You should keep the default value of porosity (n~0.7), or even increase if it is still to low in some cases. The dense state will be obtained in the second step (compaction, see below).

  2. How is the compaction done, what are the parameters maxWallVelocity and finalMaxMultiplier?
    Compaction is done
    1. by moving rigid boxes or
    2. by increasing the sizes of the particles (decided using the option internalCompaction ⇒ size increase).

    Both algorithm needs numerical parameters to prevent instabilities. For instance, with the method (1) maxWallVelocity is the maximum wall velocity, with method (2) finalMaxMultiplier is the max value of the multiplier applied on sizes at each iteration (always something like 1.00001).

  3. During the simulation of triaxial compression test, the wall in one direction moves with an increment of strain while the stresses in other two directions are adjusted to sigma_iso. How the stresses in other directions are maintained constant to sigma_iso? What is the mechanism? Where is it implemented in Yade?

    The control of stress on a boundary is based on the total stiffness K of all contacts between the packing and this boundary. In short, at each step, displacement=stress_error/K. This algorithm is implemented in TriaxialStressController, and the control itself is in TriaxialStressController::ControlExternalStress. The control can be turned off independently for each boundary, using the flags wall_XXX_activated, with XXX∈{top, bottom, left, right, back, front}. The imposed sress is a unique value (sigma_iso) for all directions if TriaxialStressController.isAxisymetric, or 3 independent values sigma1, sigma2, sigma3.

  4. Which value of friction angle do you use during the compaction phase of the Triaxial Test?

    The friction during the compaction (whether you are using the expansion method or the compression one for the specimen generation) can be anything between 0 and the final value used during the Triaxial phase. Note that higher friction than the final one would result in volumetric collapse at the beginning of the test. The purpose of using a different value of friction during this phase is related to the fact that the final porosity you get at the end of the sample generation essentially depends on it as well as on the assumed Particle Size Distribution. Changing the initial value of friction will get to a different value of the final porosity.

  5. Which is the aim of the bool isRadiusControlIteration?

    This internal variable (updated automatically) is true each N timesteps (with N=radiusControlInterval). For other timesteps, there is no expansion. Cycling without expanding is just a way to speed up the simulation, based on the idea that 1% increase each 10 iterations needs less operations than 0.1% at each iteration, but will give similar results.

  6. How comes the unbalanced force reaches a low value only after many timesteps in the compaction phase?

    The value of unbalanced force (dimensionless) is expected to reach low value (i.e. identifying a static-equilibrium condition for the specimen) only at the end of the compaction phase. The code is not aiming at simulating a quasistatic isotropic compaction process, it is only giving a stable packing at the end of it.

Key(="")

A code that is added to output filenames.

StabilityCriterion(=0.01)

Value of unbalanced force for which the system is considered stable. Used in conditionals to switch between loading stages.

WallStressRecordFile(="./WallStresses"+Key)

autoCompressionActivation(=true)

Do we just want to generate a stable packing under isotropic pressure (false) or do we want the triaxial loading to start automatically right after compaction stage (true)?

autoStopSimulation(=false)

freeze the simulation when conditions are reached (don’t activate this if you want to be able to run/stop from Qt GUI)

autoUnload(=true)

auto adjust the isotropic stress state from TriaxialTest::sigmaIsoCompaction to TriaxialTest::sigmaLateralConfinement if they have different values. See docs for TriaxialCompressionEngine::autoUnload

biaxial2dTest(=false)

FIXME : what is that?

boxFrictionDeg(=0.0)

Friction angle [°] of boundaries contacts.

boxKsDivKn(=0.5)

Ratio of shear vs. normal contact stiffness for boxes.

boxYoungModulus(=15000000.0)

Stiffness of boxes.

compactionFrictionDeg(=sphereFrictionDeg)

Friction angle [°] of spheres during compaction (different values result in different porosities)]. This value is overridden by TriaxialTest::sphereFrictionDeg before triaxial testing.

dampingForce(=0.2)

Coefficient of Cundal-Non-Viscous damping (applied on on the 3 components of forces)

dampingMomentum(=0.2)

Coefficient of Cundal-Non-Viscous damping (applied on on the 3 components of torques)

defaultDt(=-1)

Max time-step. Used as initial value if defined. Latter adjusted by the time stepper.

density(=2600)

density of spheres

dict() → dict

Return dictionary of attributes.

facetWalls(=false)

Use facets for boundaries (not tested)

finalMaxMultiplier(=1.001)

max multiplier of diameters during internal compaction (secondary precise adjustment)

fixedBoxDims(="")

string that contains some subset (max. 2) of {‘x’,’y’,’z’} ; contains axes will have box dimension hardcoded, even if box is scaled as mean_radius is prescribed: scaling will be applied on the rest.

generate((str)out) → None

Generate scene, save to given file

importFilename(="")

File with positions and sizes of spheres.

internalCompaction(=false)

flag for choosing between moving boundaries or increasing particles sizes during the compaction stage.

load() → None

Generate scene, save to temporary file and load immediately

lowerCorner(=Vector3r(0, 0, 0))

Lower corner of the box.

maxMultiplier(=1.01)

max multiplier of diameters during internal compaction (initial fast increase)

maxWallVelocity(=10)

max velocity of boundaries. Usually useless, but can help stabilizing the system in some cases.

noFiles(=false)

Do not create any files during run (.xml, .spheres, wall stress records)

numberOfGrains(=400)

Number of generated spheres.

radiusControlInterval(=10)

interval between size changes when growing spheres.

radiusMean(=-1)

Mean radius. If negative (default), autocomputed to as a function of box size and TriaxialTest::numberOfGrains

radiusStdDev(=0.3)

Normalized standard deviation of generated sizes.

recordIntervalIter(=20)

interval between file outputs

sigmaIsoCompaction(=-50000)

Confining stress during isotropic compaction (< 0 for real - compressive - compaction).

sigmaLateralConfinement(=-50000)

Lateral stress during triaxial loading (< 0 for classical compressive cases). An isotropic unloading is performed if the value is not equal to TriaxialTest::sigmaIsoCompaction.

sphereFrictionDeg(=18.0)

Friction angle [°] of spheres assigned just before triaxial testing.

sphereKsDivKn(=0.5)

Ratio of shear vs. normal contact stiffness for spheres.

sphereYoungModulus(=15000000.0)

Stiffness of spheres.

strainRate(=0.1)

Strain rate in triaxial loading.

thickness(=0.001)

thickness of boundaries. It is arbitrary and should have no effect

timeStepUpdateInterval(=50)

interval for GlobalStiffnessTimeStepper

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

upperCorner(=Vector3r(1, 1, 1))

Upper corner of the box.

wallOversizeFactor(=1.3)

Make boundaries larger than the packing to make sure spheres don’t go out during deformation.

wallStiffnessUpdateInterval(=10)

interval for updating the stiffness of sample/boundaries contacts

wallWalls(=false)

Use walls for boundaries (not tested)

Rendering

OpenGLRenderer

class yade.wrapper.OpenGLRenderer(inherits Serializable)

Class responsible for rendering scene on OpenGL devices.

bgColor(=Vector3r(.2, .2, .2))

Color of the background canvas (RGB)

bound(=false)

Render body Bound

cellColor(=Vector3r(1, 1, 0))

Color of the periodic cell (RGB).

clipPlaneActive(=vector<bool>(numClipPlanes, false))

Activate/deactivate respective clipping planes

clipPlaneSe3(=vector<Se3r>(numClipPlanes, Se3r(Vector3r::Zero(), Quaternionr::Identity())))

Position and orientation of clipping planes

dict() → dict

Return dictionary of attributes.

dispScale(=Vector3r::Ones(), disable scaling)

Artificially enlarge (scale) dispalcements from bodies’ reference positions by this relative amount, so that they become better visible (independently in 3 dimensions). Disbled if (1,1,1).

dof(=false)

Show which degrees of freedom are blocked for each body

extraDrawers(=uninitalized)

Additional rendering components (GlExtraDrawer).

ghosts(=true)

Render objects crossing periodic cell edges by cloning them in multiple places (periodic simulations only).

hideBody((int)id) → None

Hide body from id (see OpenGLRenderer::showBody)

id(=false)

Show body id’s

intrAllWire(=false)

Draw wire for all interactions, blue for potential and green for real ones (mostly for debugging)

intrGeom(=false)

Render Interaction::geom objects.

intrPhys(=false)

Render Interaction::phys objects

intrWire(=false)

If rendering interactions, use only wires to represent them.

light1(=true)

Turn light 1 on.

light2(=true)

Turn light 2 on.

light2Color(=Vector3r(0.5, 0.5, 0.1))

Per-color intensity of secondary light (RGB).

light2Pos(=Vector3r(-130, 75, 30))

Position of secondary OpenGL light source in the scene.

lightColor(=Vector3r(0.6, 0.6, 0.6))

Per-color intensity of primary light (RGB).

lightPos(=Vector3r(75, 130, 0))

Position of OpenGL light source in the scene.

mask(=~0, draw everything)

Bitmask for showing only bodies where ((mask & Body::mask)!=0)

render() → None

Render the scene in the current OpenGL context.

rotScale(=1., disable scaling)

Artificially enlarge (scale) rotations of bodies relative to their reference orientation, so the they are better visible.

selId(=Body::ID_NONE)

Id of particle that was selected by the user.

setRefSe3() → None

Make current positions and orientation reference for scaleDisplacements and scaleRotations.

shape(=true)

Render body Shape

showBody((int)id) → None

Make body visible (see OpenGLRenderer::hideBody)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wire(=false)

Render all bodies with wire only (faster)

GlShapeFunctor

digraph GlShapeFunctor {
        rankdir=RL;
        margin=.2;
        "GlShapeFunctor" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.GlShapeFunctor"];
        "Gl1_Wall" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Gl1_Wall"];
        "Gl1_Wall" -> "GlShapeFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Gl1_Box" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Gl1_Box"];
        "Gl1_Box" -> "GlShapeFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Gl1_ChainedCylinder" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Gl1_ChainedCylinder"];
        "Gl1_ChainedCylinder" -> "Gl1_Cylinder" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Gl1_Sphere" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Gl1_Sphere"];
        "Gl1_Sphere" -> "GlShapeFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Gl1_Tetra" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Gl1_Tetra"];
        "Gl1_Tetra" -> "GlShapeFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Gl1_GridConnection" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Gl1_GridConnection"];
        "Gl1_GridConnection" -> "GlShapeFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Gl1_Cylinder" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Gl1_Cylinder"];
        "Gl1_Cylinder" -> "GlShapeFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Gl1_Polyhedra" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Gl1_Polyhedra"];
        "Gl1_Polyhedra" -> "GlShapeFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Gl1_Facet" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Gl1_Facet"];
        "Gl1_Facet" -> "GlShapeFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
}

class yade.wrapper.GlShapeFunctor(inherits Functor → Serializable)

Abstract functor for rendering Shape objects.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Gl1_Box(inherits GlShapeFunctor → Functor → Serializable)

Renders Box object

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Gl1_ChainedCylinder(inherits Gl1_Cylinder → GlShapeFunctor → Functor → Serializable)

Renders ChainedCylinder object including a shift for compensating flexion.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

glutNormalize = True
glutSlices = 8
glutStacks = 4
label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wire = False
class yade.wrapper.Gl1_Cylinder(inherits GlShapeFunctor → Functor → Serializable)

Renders Cylinder object

wire(=false) [static]

Only show wireframe (controlled by glutSlices and glutStacks.

glutNormalize(=true) [static]

Fix normals for non-wire rendering

glutSlices(=8) [static]

Number of sphere slices.

glutStacks(=4) [static]

Number of sphere stacks.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

glutNormalize = True
glutSlices = 8
glutStacks = 4
label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wire = False
class yade.wrapper.Gl1_Facet(inherits GlShapeFunctor → Functor → Serializable)

Renders Facet object

normals(=false) [static]

In wire mode, render normals of facets and edges; facet’s colors are disregarded in that case.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

normals = False
timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Gl1_GridConnection(inherits GlShapeFunctor → Functor → Serializable)

Renders Cylinder object

wire(=false) [static]

Only show wireframe (controlled by glutSlices and glutStacks.

glutNormalize(=true) [static]

Fix normals for non-wire rendering

glutSlices(=8) [static]

Number of cylinder slices.

glutStacks(=4) [static]

Number of cylinder stacks.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

glutNormalize = True
glutSlices = 8
glutStacks = 4
label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wire = False
class yade.wrapper.Gl1_Polyhedra(inherits GlShapeFunctor → Functor → Serializable)

Renders Polyhedra object

wire(=false) [static]

Only show wireframe

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wire = False
class yade.wrapper.Gl1_Sphere(inherits GlShapeFunctor → Functor → Serializable)

Renders Sphere object

quality(=1.0) [static]

Change discretization level of spheres. quality>1 for better image quality, at the price of more cpu/gpu usage, 0<quality<1 for faster rendering. If mono-color spheres are displayed (Gl1_Sphere::stripes = False), quality mutiplies Gl1_Sphere::glutSlices and Gl1_Sphere::glutStacks. If striped spheres are displayed (Gl1_Sphere::stripes = True), only integer increments are meaningfull : quality=1 and quality=1.9 will give the same result, quality=2 will give finer result.

wire(=false) [static]

Only show wireframe (controlled by glutSlices and glutStacks.

stripes(=false) [static]

In non-wire rendering, show stripes clearly showing particle rotation.

localSpecView(=true) [static]

Compute specular light in local eye coordinate system.

glutSlices(=12) [static]

Base number of sphere slices, multiplied by Gl1_Sphere::quality before use); not used with stripes (see glut{Solid,Wire}Sphere reference)

glutStacks(=6) [static]

Base number of sphere stacks, multiplied by Gl1_Sphere::quality before use; not used with stripes (see glut{Solid,Wire}Sphere reference)

circleView(=false) [static]

For 2D simulations : display tori instead of spheres, so they will appear like circles if the viewer is looking in the right direction. In this case, remember to disable perspective by pressing “t”-key in the viewer.

circleRelThickness(=0.2) [static]

If Gl1_Sphere::circleView is enabled, this is the torus diameter relative to the sphere radius (i.e. the circle relative thickness).

circleAllowedRotationAxis(='z') [static]

If Gl1_Sphere::circleView is enabled, this is the only axis (‘x’, ‘y’ or ‘z’) along which rotation is allowed for the 2D simulation. It allows right orientation of the tori to appear like circles in the viewer. For example, if circleAllowedRotationAxis=’x’ is set, blockedDOFs=”YZ” should also be set for all your particles.

bases

Ordered list of types (as strings) this functor accepts.

circleAllowedRotationAxis = 'z'
circleRelThickness = 0.2
circleView = False
dict() → dict

Return dictionary of attributes.

glutSlices = 12
glutStacks = 6
label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

localSpecView = True
quality = 1.0
stripes = False
timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wire = False
class yade.wrapper.Gl1_Tetra(inherits GlShapeFunctor → Functor → Serializable)

Renders Tetra object

wire(=true) [static]

TODO

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

wire = True
class yade.wrapper.Gl1_Wall(inherits GlShapeFunctor → Functor → Serializable)

Renders Wall object

div(=20) [static]

Number of divisions of the wall inside visible scene part.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

div = 20
label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

GlStateFunctor

class yade.wrapper.GlStateFunctor(inherits Functor → Serializable)

Abstract functor for rendering State objects.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

GlBoundFunctor

digraph GlBoundFunctor {
        rankdir=RL;
        margin=.2;
        "GlBoundFunctor" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.GlBoundFunctor"];
        "Gl1_Aabb" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Gl1_Aabb"];
        "Gl1_Aabb" -> "GlBoundFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
}

class yade.wrapper.GlBoundFunctor(inherits Functor → Serializable)

Abstract functor for rendering Bound objects.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Gl1_Aabb(inherits GlBoundFunctor → Functor → Serializable)

Render Axis-aligned bounding box (Aabb).

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

GlIGeomFunctor

digraph GlIGeomFunctor {
        rankdir=RL;
        margin=.2;
        "GlIGeomFunctor" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.GlIGeomFunctor"];
        "Gl1_PolyhedraGeom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Gl1_PolyhedraGeom"];
        "Gl1_PolyhedraGeom" -> "GlIGeomFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Gl1_L6Geom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Gl1_L6Geom"];
        "Gl1_L6Geom" -> "Gl1_L3Geom" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Gl1_L3Geom" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Gl1_L3Geom"];
        "Gl1_L3Geom" -> "GlIGeomFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
}

class yade.wrapper.GlIGeomFunctor(inherits Functor → Serializable)

Abstract functor for rendering IGeom objects.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Gl1_L3Geom(inherits GlIGeomFunctor → Functor → Serializable)

Render L3Geom geometry.

axesLabels(=false) [static]

Whether to display labels for local axes (x,y,z)

axesScale(=1.) [static]

Scale local axes, their reference length being half of the minimum radius.

axesWd(=1.) [static]

Width of axes lines, in pixels; not drawn if non-positive

uPhiWd(=2.) [static]

Width of lines for drawing displacements (and rotations for L6Geom); not drawn if non-positive.

uScale(=1.) [static]

Scale local displacements (u - u0); 1 means the true scale, 0 disables drawing local displacements; negative values are permissible.

axesLabels = False
axesScale = 1.0
axesWd = 1.0
bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

uPhiWd = 2.0
uScale = 1.0
updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Gl1_L6Geom(inherits Gl1_L3Geom → GlIGeomFunctor → Functor → Serializable)

Render L6Geom geometry.

phiScale(=1.) [static]

Scale local rotations (phi - phi0). The default scale is to draw \pi rotation with length equal to minimum radius.

axesLabels = False
axesScale = 1.0
axesWd = 1.0
bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

phiScale = 1.0
timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

uPhiWd = 2.0
uScale = 1.0
updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Gl1_PolyhedraGeom(inherits GlIGeomFunctor → Functor → Serializable)

Render PolyhedraGeom geometry.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

GlIPhysFunctor

digraph GlIPhysFunctor {
        rankdir=RL;
        margin=.2;
        "GlIPhysFunctor" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.GlIPhysFunctor"];
        "Gl1_CpmPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Gl1_CpmPhys"];
        "Gl1_CpmPhys" -> "GlIPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Gl1_PolyhedraPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Gl1_PolyhedraPhys"];
        "Gl1_PolyhedraPhys" -> "GlIPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
        "Gl1_NormPhys" [shape="box",fontsize=8,style="setlinewidth(0.5),solid",height=0.2,URL="yade.wrapper.html#yade.wrapper.Gl1_NormPhys"];
        "Gl1_NormPhys" -> "GlIPhysFunctor" [arrowsize=0.5,style="setlinewidth(0.5)"];
}

class yade.wrapper.GlIPhysFunctor(inherits Functor → Serializable)

Abstract functor for rendering IPhys objects.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Gl1_CpmPhys(inherits GlIPhysFunctor → Functor → Serializable)

Render CpmPhys objects of interactions.

contactLine(=true) [static]

Show contact line

dmgLabel(=true) [static]

Numerically show contact damage parameter

dmgPlane(=false) [static]

[what is this?]

epsT(=false) [static]

Show shear strain

epsTAxes(=false) [static]

Show axes of shear plane

normal(=false) [static]

Show contact normal

colorStrainRatio(=-1) [static]

If positive, set the interaction (wire) color based on \eps_N normalized by \eps_0 × colorStrainRatio (\eps_0 = CpmPhys.epsCrackOnset ). Otherwise, color based on the residual strength.

epsNLabel(=false) [static]

Numerically show normal strain

bases

Ordered list of types (as strings) this functor accepts.

colorStrainRatio = -1.0
contactLine = True
dict() → dict

Return dictionary of attributes.

dmgLabel = True
dmgPlane = False
epsNLabel = False
epsT = False
epsTAxes = False
label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

normal = False
timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Gl1_NormPhys(inherits GlIPhysFunctor → Functor → Serializable)

Renders NormPhys objects as cylinders of which diameter and color depends on NormPhys.normalForce magnitude.

maxFn(=0) [static]

Value of NormPhys.normalForce corresponding to maxRadius. This value will be increased (but not decreased ) automatically.

signFilter(=0) [static]

If non-zero, only display contacts with negative (-1) or positive (+1) normal forces; if zero, all contacts will be displayed.

refRadius(=std::numeric_limits<Real>::infinity()) [static]

Reference (minimum) particle radius; used only if maxRadius is negative. This value will be decreased (but not increased ) automatically. (auto-updated)

maxRadius(=-1) [static]

Cylinder radius corresponding to the maximum normal force. If negative, auto-updated refRadius will be used instead.

slices(=6) [static]

Number of sphere slices; (see glutCylinder reference)

stacks(=1) [static]

Number of sphere stacks; (see glutCylinder reference)

maxWeakFn(=NaN) [static]

Value that divides contacts by their normal force into the ‘weak fabric’ and ‘strong fabric’. This value is set as side-effect by utils.fabricTensor.

weakFilter(=0) [static]

If non-zero, only display contacts belonging to the ‘weak’ (-1) or ‘strong’ (+1) fabric.

weakScale(=1.) [static]

If maxWeakFn is set, scale radius of the weak fabric by this amount (usually smaller than 1). If zero, 1 pixel line is displayed. Colors are not affected by this value.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

maxFn = 0.0
maxRadius = -1.0
maxWeakFn = nan
refRadius = inf
signFilter = 0
slices = 6
stacks = 1
timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

weakFilter = 0
weakScale = 1.0
class yade.wrapper.Gl1_PolyhedraPhys(inherits GlIPhysFunctor → Functor → Serializable)

Renders PolyhedraPhys objects as cylinders of which diameter and color depends on PolyhedraPhys::normForce magnitude.

maxFn(=0) [static]

Value of NormPhys.normalForce corresponding to maxDiameter. This value will be increased (but not decreased ) automatically.

refRadius(=std::numeric_limits<Real>::infinity()) [static]

Reference (minimum) particle radius

signFilter(=0) [static]

If non-zero, only display contacts with negative (-1) or positive (+1) normal forces; if zero, all contacts will be displayed.

maxRadius(=-1) [static]

Cylinder radius corresponding to the maximum normal force.

slices(=6) [static]

Number of sphere slices; (see glutCylinder reference)

stacks(=1) [static]

Number of sphere stacks; (see glutCylinder reference)

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

maxFn = 0.0
maxRadius = -1.0
refRadius = inf
signFilter = 0
slices = 6
stacks = 1
timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

Simulation data

Omega

class yade.wrapper.Omega
addScene() → int

Add new scene to Omega, returns its number

bodies

Bodies in the current simulation (container supporting index access by id and iteration)

cell

Periodic cell of the current scene (None if the scene is aperiodic).

childClassesNonrecursive((str)arg2) → list

Return list of all classes deriving from given class, as registered in the class factory

disableGdb() → None

Revert SEGV and ABRT handlers to system defaults.

dt

Current timestep (Δt) value.

dynDt

Whether a TimeStepper is used for dynamic Δt control. See dt on how to enable/disable TimeStepper.

dynDtAvailable

Whether a TimeStepper is amongst O.engines, activated or not.

energy

EnergyTracker of the current simulation. (meaningful only with O.trackEnergy)

engines

List of engines in the simulation (corresponds to Scene::engines in C++ source code).

exitNoBacktrace([(int)status=0]) → None

Disable SEGV handler and exit, optionally with given status number.

filename

Filename under which the current simulation was saved (None if never saved).

forceSyncCount

Counter for number of syncs in ForceContainer, for profiling purposes.

forces

ForceContainer (forces, torques, displacements) in the current simulation.

interactions

Access to interactions of simulation, by using

  1. id’s of both Bodies of the interactions, e.g. O.interactions[23,65]

  2. iteraction over the whole container:

    for i in O.interactions: print i.id1,i.id2
    

Note

Iteration silently skips interactions that are not real.

isChildClassOf((str)arg2, (str)arg3) → bool

Tells whether the first class derives from the second one (both given as strings).

iter

Get current step number

labeledEngine((str)arg2) → object

Return instance of engine/functor with the given label. This function shouldn’t be called by the user directly; every ehange in O.engines will assign respective global python variables according to labels.

For example:

O.engines=[InsertionSortCollider(label=’collider’)]

collider.nBins=5 # collider has become a variable after assignment to O.engines automatically

load((str)file[, (bool)quiet=False]) → None

Load simulation from file. The file should be saved in the same version of Yade, otherwise compatibility is not guaranteed.

loadTmp([(str)mark=''[, (bool)quiet=False]]) → None

Load simulation previously stored in memory by saveTmp. mark optionally distinguishes multiple saved simulations

lsTmp() → list

Return list of all memory-saved simulations.

materials

Shared materials; they can be accessed by id or by label

miscParams

MiscParams in the simulation (Scene::mistParams), usually used to save serializables that don’t fit anywhere else, like GL functors

numThreads

Get maximum number of threads openMP can use.

pause() → None

Stop simulation execution. (May be called from within the loop, and it will stop after the current step).

periodic

Get/set whether the scene is periodic or not (True/False).

plugins() → list

Return list of all plugins registered in the class factory.

realtime

Return clock (human world) time the simulation has been running.

reload([(bool)quiet=False]) → None

Reload current simulation

reset() → None

Reset simulations completely (including another scenes!).

resetAllScenes() → None

Reset all scenes.

resetCurrentScene() → None

Reset current scene.

resetThisScene() → None

Reset current scene.

resetTime() → None

Reset simulation time: step number, virtual and real time. (Doesn’t touch anything else, including timings).

run([(int)nSteps=-1[, (bool)wait=False]]) → None

Run the simulation. nSteps how many steps to run, then stop (if positive); wait will cause not returning to python until simulation will have stopped.

runEngine((Engine)arg2) → None

Run given engine exactly once; simulation time, step number etc. will not be incremented (use only if you know what you do).

running

Whether background thread is currently running a simulation.

save((str)file[, (bool)quiet=False]) → None

Save current simulation to file (should be .xml or .xml.bz2 or .yade or .yade.gz). .xml files are bigger than .yade, but can be more or less easily (due to their size) opened and edited, e.g. with text editors. .bz2 and .gz correspond both to compressed versions. All saved files should be loaded in the same version of Yade, otherwise compatibility is not guaranteed.

saveTmp([(str)mark=''[, (bool)quiet=False]]) → None

Save simulation to memory (disappears at shutdown), can be loaded later with loadTmp. mark optionally distinguishes different memory-saved simulations.

sceneToString() → str

Return the entire scene as a string. Equivalent to using O.save(...) except that the scene goes to a string instead of a file. (see also stringToScene())

speed

Return current calculation speed [iter/sec].

step() → None

Advance the simulation by one step. Returns after the step will have finished.

stopAtIter

Get/set number of iteration after which the simulation will stop.

stopAtTime

Get/set time after which the simulation will stop.

stringToScene((str)arg2[, (str)mark='']) → None

Load simulation from a string passed as argument (see also sceneToString).

subStep

Get the current subStep number (only meaningful if O.subStepping==True); -1 when outside the loop, otherwise either 0 (O.subStepping==False) or number of engine to be run (O.subStepping==True)

subStepping

Get/set whether subStepping is active.

switchScene() → None

Switch to alternative simulation (while keeping the old one). Calling the function again switches back to the first one. Note that most variables from the first simulation will still refer to the first simulation even after the switch (e.g. b=O.bodies[4]; O.switchScene(); [b still refers to the body in the first simulation here])

switchToScene((int)arg2) → None

Switch to defined scene. Default scene has number 0, other scenes have to be created by addScene method.

tags

Tags (string=string dictionary) of the current simulation (container supporting string-index access/assignment)

thisScene

Return current scene’s id.

time

Return virtual (model world) time of the simulation.

timingEnabled

Globally enable/disable timing services (see documentation of the timing module).

tmpFilename() → str

Return unique name of file in temporary directory which will be deleted when yade exits.

tmpToFile((str)fileName[, (str)mark='']) → None

Save XML of saveTmp‘d simulation into fileName.

tmpToString([(str)mark='']) → str

Return XML of saveTmp‘d simulation as string.

trackEnergy

When energy tracking is enabled or disabled in this simulation.

wait() → None

Don’t return until the simulation will have been paused. (Returns immediately if not running).

BodyContainer

class yade.wrapper.BodyContainer
__init__((BodyContainer)arg2) → None
addToClump((object)arg2, (int)arg3[, (int)discretization=0]) → None

Add body b (or a list of bodies) to an existing clump c. c must be clump and b may not be a clump member of c. Clump masses and inertia are adapted automatically (for details see clump()).

See examples/clumps/addToClump-example.py for an example script.

Note

If b is a clump itself, then all members will be added to c and b will be deleted. If b is a clump member of clump d, then all members from d will be added to c and d will be deleted. If you need to add just clump member b, release this member from d first.

append((Body)arg2) → int
Append one Body instance, return its id.
append( (BodyContainer)arg1, (object)arg2) → object :
Append list of Body instance, return list of ids
appendClumped((object)arg2[, (int)discretization=0]) → tuple

Append given list of bodies as a clump (rigid aggregate); returns a tuple of (clumpId,[memberId1,memberId2,...]). Clump masses and inertia are adapted automatically (for details see clump()).

clear() → None

Remove all bodies (interactions not checked)

clump((object)arg2[, (int)discretization=0]) → int

Clump given bodies together (creating a rigid aggregate); returns clumpId. Clump masses and inertia are adapted automatically when discretization>0. If clump members are overlapping this is done by integration/summation over mass points using a regular grid of cells (grid cells length is defined as R_{min}/discretization, where R_{min} is minimum clump member radius). For non-overlapping members inertia of the clump is the sum of inertias from members. If discretization<=0 sum of inertias from members is used (faster, but inaccurate).

erase((int)arg2[, (bool)eraseClumpMembers=0]) → bool

Erase body with the given id; all interaction will be deleted by InteractionLoop in the next step. If a clump is erased use O.bodies.erase(clumpId,True) to erase the clump AND its members.

getRoundness([(list)excludeList=[]]) → float

Returns roundness coefficient RC = R2/R1. R1 is the equivalent sphere radius of a clump. R2 is the minimum radius of a sphere, that imbeds the clump. If just spheres are present RC = 1. If clumps are present 0 < RC < 1. Bodies can be excluded from the calculation by giving a list of ids: O.bodies.getRoundness([ids]).

See examples/clumps/replaceByClumps-example.py for an example script.

releaseFromClump((int)arg2, (int)arg3[, (int)discretization=0]) → None

Release body b from clump c. b must be a clump member of c. Clump masses and inertia are adapted automatically (for details see clump()).

See examples/clumps/releaseFromClump-example.py for an example script.

Note

If c contains only 2 members b will not be released and a warning will appear. In this case clump c should be erased.

replace((object)arg2) → object
replaceByClumps((list)arg2, (object)arg3[, (int)discretization=0]) → list

Replace spheres by clumps using a list of clump templates and a list of amounts; returns a list of tuples: [(clumpId1,[memberId1,memberId2,...]),(clumpId2,[memberId1,memberId2,...]),...]. A new clump will have the same volume as the sphere, that was replaced. Clump masses and inertia are adapted automatically (for details see clump()).

O.bodies.replaceByClumps( [utils.clumpTemplate([1,1],[.5,.5])] , [.9] ) #will replace 90 % of all standalone spheres by ‘dyads’

See examples/clumps/replaceByClumps-example.py for an example script.

updateClumpProperties([(list)excludeList=[][, (int)discretization=5]]) → None

Manually force Yade to update clump properties mass, volume and inertia (for details of ‘discretization’ value see clump()). Can be used, when clumps are modified or erased during a simulation. Clumps can be excluded from the calculation by giving a list of ids: O.bodies.updateProperties([ids]).

InteractionContainer

class yade.wrapper.InteractionContainer

Access to interactions of simulation, by using

  1. id’s of both Bodies of the interactions, e.g. O.interactions[23,65]

  2. iteraction over the whole container:

    for i in O.interactions: print i.id1,i.id2
    

Note

Iteration silently skips interactions that are not real.

__init__((InteractionContainer)arg2) → None
all([(bool)onlyReal=False]) → list

Return list of all interactions. Virtual interaction are filtered out if onlyReal=True, else (default) it dumps the full content.

clear() → None

Remove all interactions, and invalidate persistent collider data (if the collider supports it).

countReal() → int

Return number of interactions that are “real”, i.e. they have phys and geom.

erase((int)arg2, (int)arg3) → None

Erase one interaction, given by id1, id2 (internally, requestErase is called – the interaction might still exist as potential, if the Collider decides so).

eraseNonReal() → None

Erase all interactions that are not real .

has((int)arg2, (int)arg3) → bool

Tell if a pair of ids corresponds to an existing interaction (real or not)

nth((int)arg2) → Interaction

Return n-th interaction from the container (usable for picking random interaction).

serializeSorted
withBody((int)arg2) → list

Return list of real interactions of given body.

withBodyAll((int)arg2) → list

Return list of all (real as well as non-real) interactions of given body.

ForceContainer

class yade.wrapper.ForceContainer
__init__((ForceContainer)arg2) → None
addF((int)id, (Vector3)f[, (bool)permanent=False]) → None

Apply force on body (accumulates).

# If permanent=false (default), the force applies for one iteration, then it is reset by ForceResetter. # If permanent=true, it persists over iterations, until it is overwritten by another call to addF(id,f,True) or removed by reset(resetAll=True). The permanent force on a body can be checked with permF(id).
addMove((int)id, (Vector3)m) → None

Apply displacement on body (accumulates).

addRot((int)id, (Vector3)r) → None

Apply rotation on body (accumulates).

addT((int)id, (Vector3)t[, (bool)permanent=False]) → None

Apply torque on body (accumulates).

# If permanent=false (default), the torque applies for one iteration, then it is reset by ForceResetter. # If permanent=true, it persists over iterations, until it is overwritten by another call to addT(id,f,True) or removed by reset(resetAll=True). The permanent torque on a body can be checked with permT(id).
f((int)id[, (bool)sync=False]) → Vector3

Force applied on body. For clumps in openMP, synchronize the force container with sync=True, else the value will be wrong.

getPermForceUsed() → bool

Check wether permanent forces are present.

m((int)id[, (bool)sync=False]) → Vector3

Deprecated alias for t (torque).

move((int)id) → Vector3

Displacement applied on body.

permF((int)id) → Vector3

read the value of permanent force on body (set with setPermF()).

permT((int)id) → Vector3

read the value of permanent torque on body (set with setPermT()).

reset([(bool)resetAll=True]) → None

Reset the force container, including user defined permanent forces/torques. resetAll=False will keep permanent forces/torques unchanged.

rot((int)id) → Vector3

Rotation applied on body.

syncCount

Number of synchronizations of ForceContainer (cummulative); if significantly higher than number of steps, there might be unnecessary syncs hurting performance.

t((int)id[, (bool)sync=False]) → Vector3

Torque applied on body. For clumps in openMP, synchronize the force container with sync=True, else the value will be wrong.

MaterialContainer

class yade.wrapper.MaterialContainer

Container for Materials. A material can be accessed using

  1. numerical index in range(0,len(cont)), like cont[2];
  2. textual label that was given to the material, like cont[‘steel’]. This etails traversing all materials and should not be used frequently.
__init__((MaterialContainer)arg2) → None
append((Material)arg2) → int
Add new shared Material; changes its id and return it.
append( (MaterialContainer)arg1, (object)arg2) → object :
Append list of Material instances, return list of ids.
index((str)arg2) → int

Return id of material, given its label.

Scene

class yade.wrapper.Scene(inherits Serializable)

Object comprising the whole simulation.

compressionNegative

Whether the convention is that compression has negative sign (set by IGeomFunctor).

dict() → dict

Return dictionary of attributes.

doSort(=false)

Used, when new body is added to the scene.

dt(=1e-8)

Current timestep for integration.

flags(=0)

Various flags of the scene; 1 (Scene::LOCAL_COORDS): use local coordinate system rather than global one for per-interaction quantities (set automatically from the functor).

isPeriodic(=false)

Whether periodic boundary conditions are active.

iter(=0)

Current iteration (computational step) number

localCoords

Whether local coordianate system is used on interactions (set by IGeomFunctor).

selectedBody(=-1)

Id of body that is selected by the user

speed(=0)

Current calculation speed [iter/s]

stopAtIter(=0)

Iteration after which to stop the simulation.

stopAtTime(=0)

Time after which to stop the simulation

subStep(=-1)

Number of sub-step; not to be changed directly. -1 means to run loop prologue (cell integration), 0…n-1 runs respective engines (n is number of engines), n runs epilogue (increment step number and time.

subStepping(=false)

Whether we currently advance by one engine in every step (rather than by single run through all engines).

tags(=uninitalized)

Arbitrary key=value associations (tags like mp3 tags: author, date, version, description etc.)

time(=0)

Simulation time (virtual time) [s]

trackEnergy(=false)

Whether energies are being traced.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

Cell

class yade.wrapper.Cell(inherits Serializable)

Parameters of periodic boundary conditions. Only applies if O.isPeriodic==True.

dict() → dict

Return dictionary of attributes.

getDefGrad() → Matrix3

Returns deformation gradient tensor \mat{F} of the cell deformation (http://en.wikipedia.org/wiki/Finite_strain_theory)

getEulerianAlmansiStrain() → Matrix3

Returns Eulerian-Almansi strain tensor \mat{e}=\frac{1}{2}(\mat{I}-\mat{b}^{-1})=\frac{1}{2}(\mat{I}-(\mat{F}\mat{F}^T)^{-1}) of the cell (http://en.wikipedia.org/wiki/Finite_strain_theory)

getLCauchyGreenDef() → Matrix3

Returns left Cauchy-Green deformation tensor \mat{b}=\mat{F}\mat{F}^T of the cell (http://en.wikipedia.org/wiki/Finite_strain_theory)

getLagrangianStrain() → Matrix3

Returns Lagrangian strain tensor \mat{E}=\frac{1}{2}(\mat{C}-\mat{I})=\frac{1}{2}(\mat{F}^T\mat{F}-\mat{I})=\frac{1}{2}(\mat{U}^2-\mat{I}) of the cell (http://en.wikipedia.org/wiki/Finite_strain_theory)

getLeftStretch() → Matrix3

Returns left (spatial) stretch tensor of the cell (matrix \mat{U} from polar decomposition \mat{F}=\mat{RU} )

getPolarDecOfDefGrad() → tuple

Returns orthogonal matrix \mat{R} and symmetric positive semi-definite matrix \mat{U} as polar decomposition of deformation gradient \mat{F} of the cell ( \mat{F}=\mat{RU} )

getRCauchyGreenDef() → Matrix3

Returns right Cauchy-Green deformation tensor \mat{C}=\mat{F}^T\mat{F} of the cell (http://en.wikipedia.org/wiki/Finite_strain_theory)

getRightStretch() → Matrix3

Returns right (material) stretch tensor of the cell (matrix \mat{V} from polar decomposition \mat{F}=\mat{RU}=\mat{VR}\ \rightarrow\ \mat{V}=\mat{FR}^T )

getRotation() → Matrix3

Returns rotation of the cell (orthogonal matrix \mat{R} from polar decomposition \mat{F}=\mat{RU} )

getSmallStrain() → Matrix3

Returns small strain tensor \mat{\varepsilon}=\frac{1}{2}(\mat{F}+\mat{F}^T)-\mat{I} of the cell (http://en.wikipedia.org/wiki/Finite_strain_theory)

getSpin() → Vector3

Returns the spin defined by the skew symmetric part of velGrad

hSize

Base cell vectors (columns of the matrix), updated at every step from velGrad (trsf accumulates applied velGrad transformations). Setting hSize during a simulation is not supported by most contact laws, it is only meant to be used at iteration 0 before any interactions have been created.

hSize0

Value of untransformed hSize, with respect to current trsf (computed as trsf ⁻¹ × hSize.

homoDeform(=2)

If >0, deform (velGrad) the cell homothetically by adjusting positions and velocities of bodies. The velocity change is obtained by deriving the expression v=∇v.x, where ∇v is the macroscopic velocity gradient, giving in an incremental form: Δv=Δ ∇v x + ∇v Δx. As a result, velocities are modified as soon as velGrad changes, according to the first term: Δv(t)=Δ ∇v x(t), while the 2nd term reflects a convective term: Δv’= ∇v v(t-dt/2). The second term is neglected if homoDeform=1. All terms are included if homoDeform=2 (default)

nextVelGrad(=Matrix3r::Zero())

see Cell.velGrad.

prevHSize(=Matrix3r::Identity())

hSize from the previous step, used in the definition of relative velocity across periods.

prevVelGrad(=Matrix3r::Zero())

Velocity gradient in the previous step.

refHSize(=Matrix3r::Identity())

Reference cell configuration, only used with OpenGLRenderer.dispScale. Updated automatically when hSize or trsf is assigned directly; also modified by utils.setRefSe3 (called e.g. by the Reference button in the UI).

refSize

Reference size of the cell (lengths of initial cell vectors, i.e. column norms of hSize).

Note

Modifying this value is deprecated, use setBox instead.

setBox((Vector3)arg2) → None
Set Cell shape to be rectangular, with dimensions along axes specified by given argument. Shorthand for assigning diagonal matrix with respective entries to hSize.
setBox( (Cell)arg1, (float)arg2, (float)arg3, (float)arg4) → None :
Set Cell shape to be rectangular, with dimensions along x, y, z specified by arguments. Shorthand for assigning diagonal matrix with the respective entries to hSize.
shearPt((Vector3)arg2) → Vector3

Apply shear (cell skew+rot) on the point

shearTrsf

Current skew+rot transformation (no resize)

size

Current size of the cell, i.e. lengths of the 3 cell lateral vectors contained in Cell.hSize columns. Updated automatically at every step.

trsf

Current transformation matrix of the cell, obtained from time integration of Cell.velGrad.

unshearPt((Vector3)arg2) → Vector3

Apply inverse shear on the point (removes skew+rot of the cell)

unshearTrsf

Inverse of the current skew+rot transformation (no resize)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

velGrad

Velocity gradient of the transformation; used in NewtonIntegrator. Values of velGrad accumulate in trsf at every step.

NOTE: changing velGrad at the beginning of a simulation loop would lead to inacurate integration for one step, as it should normaly be changed after the contact laws (but before Newton). To avoid this problem, assignment is deferred automatically. The target value typed in terminal is actually stored in Cell.nextVelGrad and will be applied right in time by Newton integrator.

Note

Assigning individual components of velGrad is not possible (it will not return any error but it will have no effect). Instead, you can assign to Cell.nextVelGrad, as in O.cell.nextVelGrad[1,2]=1.

velGradChanged(=false)

true when velGrad has been changed manually (see also Cell.nextVelGrad)

volume

Current volume of the cell.

wrap((Vector3)arg2) → Vector3

Transform an arbitrary point into a point in the reference cell

wrapPt((Vector3)arg2) → Vector3

Wrap point inside the reference cell, assuming the cell has no skew+rot.

Other classes

class yade.wrapper.TimingDeltas
data

Get timing data as list of tuples (label, execTime[nsec], execCount) (one tuple per checkpoint)

reset() → None

Reset timing information

class yade.wrapper.GlShapeDispatcher(inherits Dispatcher → Engine → Serializable)

Dispatcher calling functors based on received argument type(s).

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

dispFunctor((Shape)arg2) → GlShapeFunctor

Return functor that would be dispatched for given argument(s); None if no dispatch; ambiguous dispatch throws.

dispMatrix([(bool)names=True]) → dict

Return dictionary with contents of the dispatch matrix.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

functors

Functors associated with this dispatcher.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

Link class for Lattice Boltzmann Method

DistMid(=Vector3r::Zero())

Distance between middle of the link and mass center of body

PointingOutside(=false)

True if it is a link pointing outside to the system (from a fluid or solid node)

VbMid(=Vector3r::Zero())

Velocity of boundary at midpoint

ct(=0.)

Coupling term in modified bounce back rule

dict() → dict

Return dictionary of attributes.

fid(=-1)

Fluid node identifier

i(=-1)

direction index of the link

idx_sigma_i(=-1)

sigma_i direction index (Fluid->Solid)

isBd(=false)

True if it is a boundary link

nid1(=-1)

fixed node identifier

nid2(=-1)

fixed node identifier or -1 if node points outside

sid(=-1)

Solid node identifier

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.GlExtra_LawTester(inherits GlExtraDrawer → Serializable)

Find an instance of LawTester and show visually its data.

dead(=false)

Deactivate the object (on error/exception).

dict() → dict

Return dictionary of attributes.

tester(=uninitalized)

Associated LawTester object.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.MatchMaker(inherits Serializable)

Class matching pair of ids to return pre-defined (for a pair of ids defined in matches) or derived value (computed using algo) of a scalar parameter. It can be called (id1, id2, val1=NaN, val2=NaN) in both python and c++.

Note

There is a converter from python number defined for this class, which creates a new MatchMaker returning the value of that number; instead of giving the object instance therefore, you can only pass the number value and it will be converted automatically.

algo

Alogorithm used to compute value when no match for ids is found. Possible values are

  • ‘avg’ (arithmetic average)
  • ‘min’ (minimum value)
  • ‘max’ (maximum value)
  • ‘harmAvg’ (harmonic average)

The following algo algorithms do not require meaningful input values in order to work:

  • ‘val’ (return value specified by val)
  • ‘zero’ (always return 0.)
computeFallback((float)val1, (float)val2) → float

Compute algo value for val1 and val2, using algorithm specified by algo.

dict() → dict

Return dictionary of attributes.

matches(=uninitalized)

Array of (id1,id2,value) items; queries matching id1 + id2 or id2 + id1 will return value

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

val(=NaN)

Constant value returned if there is no match and algo is val

class yade.wrapper.GlBoundDispatcher(inherits Dispatcher → Engine → Serializable)

Dispatcher calling functors based on received argument type(s).

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

dispFunctor((Bound)arg2) → GlBoundFunctor

Return functor that would be dispatched for given argument(s); None if no dispatch; ambiguous dispatch throws.

dispMatrix([(bool)names=True]) → dict

Return dictionary with contents of the dispatch matrix.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

functors

Functors associated with this dispatcher.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.EnergyTracker(inherits Serializable)

Storage for tracing energies. Only to be used if O.trackEnergy is True.

clear() → None

Clear all stored values.

dict() → dict

Return dictionary of attributes.

energies(=uninitalized)

Energy values, in linear array

items() → list

Return contents as list of (name,value) tuples.

keys() → list

Return defined energies.

total() → float

Return sum of all energies.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Engine(inherits Serializable)

Basic execution unit of simulation, called from the simulation loop (O.engines)

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.LBMnode(inherits Serializable)

Node class for Lattice Boltzmann Method

dict() → dict

Return dictionary of attributes.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.GlIGeomDispatcher(inherits Dispatcher → Engine → Serializable)

Dispatcher calling functors based on received argument type(s).

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

dispFunctor((IGeom)arg2) → GlIGeomFunctor

Return functor that would be dispatched for given argument(s); None if no dispatch; ambiguous dispatch throws.

dispMatrix([(bool)names=True]) → dict

Return dictionary with contents of the dispatch matrix.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

functors

Functors associated with this dispatcher.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.ParallelEngine(inherits Engine → Serializable)

Engine for running other Engine in parallel.

__init__() → None

object __init__(tuple args, dict kwds)

__init__((list)arg2) → object :
Construct from (possibly nested) list of slaves.
dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

slaves

List of lists of Engines; each top-level group will be run in parallel with other groups, while Engines inside each group will be run sequentially, in given order.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.LBMbody(inherits Serializable)

Body class for Lattice Boltzmann Method

AVel(=Vector3r::Zero())

Angular velocity of body

Fh(=Vector3r::Zero())

Hydrodynamical force on body

Mh(=Vector3r::Zero())

Hydrodynamical momentum on body

dict() → dict

Return dictionary of attributes.

fm(=Vector3r::Zero())

Hydrodynamic force (LB unit) at t-0.5dt

force(=Vector3r::Zero())

Hydrodynamic force, need to be reinitialized (LB unit)

fp(=Vector3r::Zero())

Hydrodynamic force (LB unit) at t+0.5dt

isEroded(=false)

Hydrodynamical force on body

mm(=Vector3r::Zero())

Hydrodynamic momentum (LB unit) at t-0.5dt

momentum(=Vector3r::Zero())

Hydrodynamic momentum,need to be reinitialized (LB unit)

mp(=Vector3r::Zero())

Hydrodynamic momentum (LB unit) at t+0.5dt

pos(=Vector3r::Zero())

Position of body

radius(=-1000.)

Radius of body (for sphere)

saveProperties(=false)

To save properties of the body

type(=-1)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

vel(=Vector3r::Zero())

Velocity of body

class yade.wrapper.Functor(inherits Serializable)

Function-like object that is called by Dispatcher, if types of arguments match those the Functor declares to accept.

bases

Ordered list of types (as strings) this functor accepts.

dict() → dict

Return dictionary of attributes.

label(=uninitalized)

Textual label for this object; must be a valid python identifier, you can refer to it directly from python.

timingDeltas

Detailed information about timing inside the Dispatcher itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Serializable
dict() → dict

Return dictionary of attributes.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.GlStateDispatcher(inherits Dispatcher → Engine → Serializable)

Dispatcher calling functors based on received argument type(s).

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

dispFunctor((State)arg2) → GlStateFunctor

Return functor that would be dispatched for given argument(s); None if no dispatch; ambiguous dispatch throws.

dispMatrix([(bool)names=True]) → dict

Return dictionary with contents of the dispatch matrix.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

functors

Functors associated with this dispatcher.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.GlIPhysDispatcher(inherits Dispatcher → Engine → Serializable)

Dispatcher calling functors based on received argument type(s).

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

dispFunctor((IPhys)arg2) → GlIPhysFunctor

Return functor that would be dispatched for given argument(s); None if no dispatch; ambiguous dispatch throws.

dispMatrix([(bool)names=True]) → dict

Return dictionary with contents of the dispatch matrix.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

functors

Functors associated with this dispatcher.

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.GlExtra_OctreeCubes(inherits GlExtraDrawer → Serializable)

Render boxed read from file

boxesFile(=uninitalized)

File to read boxes from; ascii files with x0 y0 z0 x1 y1 z1 c records, where c is an integer specifying fill (0 for wire, 1 for filled).

dead(=false)

Deactivate the object (on error/exception).

dict() → dict

Return dictionary of attributes.

fillRangeDraw(=Vector2i(-2, 2))

Range of fill indices that will be rendered.

fillRangeFill(=Vector2i(2, 2))

Range of fill indices that will be filled.

levelRangeDraw(=Vector2i(-2, 2))

Range of levels that will be rendered.

noFillZero(=true)

Do not fill 0-fill boxed (those that are further subdivided)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Dispatcher(inherits Engine → Serializable)

Engine dispatching control to its associated functors, based on types of argument it receives. This abstract base class provides no functionality in itself.

dead(=false)

If true, this engine will not run at all; can be used for making an engine temporarily deactivated and only resurrect it at a later point.

dict() → dict

Return dictionary of attributes.

execCount

Cummulative count this engine was run (only used if O.timingEnabled==True).

execTime

Cummulative time this Engine took to run (only used if O.timingEnabled==True).

label(=uninitalized)

Textual label for this object; must be valid python identifier, you can refer to it directly from python.

ompThreads(=-1)

Number of threads to be used in the engine. If ompThreads<0 (default), the number will be typically OMP_NUM_THREADS or the number N defined by ‘yade -jN’ (this behavior can depend on the engine though). This attribute will only affect engines whose code includes openMP parallel regions (e.g. InteractionLoop). This attribute is mostly useful for experiments or when combining ParallelEngine with engines that run parallel regions, resulting in nested OMP loops with different number of threads at each level.

timingDeltas

Detailed information about timing inside the Engine itself. Empty unless enabled in the source code and O.timingEnabled==True.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

class yade.wrapper.Cell(inherits Serializable)

Parameters of periodic boundary conditions. Only applies if O.isPeriodic==True.

dict() → dict

Return dictionary of attributes.

getDefGrad() → Matrix3

Returns deformation gradient tensor \mat{F} of the cell deformation (http://en.wikipedia.org/wiki/Finite_strain_theory)

getEulerianAlmansiStrain() → Matrix3

Returns Eulerian-Almansi strain tensor \mat{e}=\frac{1}{2}(\mat{I}-\mat{b}^{-1})=\frac{1}{2}(\mat{I}-(\mat{F}\mat{F}^T)^{-1}) of the cell (http://en.wikipedia.org/wiki/Finite_strain_theory)

getLCauchyGreenDef() → Matrix3

Returns left Cauchy-Green deformation tensor \mat{b}=\mat{F}\mat{F}^T of the cell (http://en.wikipedia.org/wiki/Finite_strain_theory)

getLagrangianStrain() → Matrix3

Returns Lagrangian strain tensor \mat{E}=\frac{1}{2}(\mat{C}-\mat{I})=\frac{1}{2}(\mat{F}^T\mat{F}-\mat{I})=\frac{1}{2}(\mat{U}^2-\mat{I}) of the cell (http://en.wikipedia.org/wiki/Finite_strain_theory)

getLeftStretch() → Matrix3

Returns left (spatial) stretch tensor of the cell (matrix \mat{U} from polar decomposition \mat{F}=\mat{RU} )

getPolarDecOfDefGrad() → tuple

Returns orthogonal matrix \mat{R} and symmetric positive semi-definite matrix \mat{U} as polar decomposition of deformation gradient \mat{F} of the cell ( \mat{F}=\mat{RU} )

getRCauchyGreenDef() → Matrix3

Returns right Cauchy-Green deformation tensor \mat{C}=\mat{F}^T\mat{F} of the cell (http://en.wikipedia.org/wiki/Finite_strain_theory)

getRightStretch() → Matrix3

Returns right (material) stretch tensor of the cell (matrix \mat{V} from polar decomposition \mat{F}=\mat{RU}=\mat{VR}\ \rightarrow\ \mat{V}=\mat{FR}^T )

getRotation() → Matrix3

Returns rotation of the cell (orthogonal matrix \mat{R} from polar decomposition \mat{F}=\mat{RU} )

getSmallStrain() → Matrix3

Returns small strain tensor \mat{\varepsilon}=\frac{1}{2}(\mat{F}+\mat{F}^T)-\mat{I} of the cell (http://en.wikipedia.org/wiki/Finite_strain_theory)

getSpin() → Vector3

Returns the spin defined by the skew symmetric part of velGrad

hSize

Base cell vectors (columns of the matrix), updated at every step from velGrad (trsf accumulates applied velGrad transformations). Setting hSize during a simulation is not supported by most contact laws, it is only meant to be used at iteration 0 before any interactions have been created.

hSize0

Value of untransformed hSize, with respect to current trsf (computed as trsf ⁻¹ × hSize.

homoDeform(=2)

If >0, deform (velGrad) the cell homothetically by adjusting positions and velocities of bodies. The velocity change is obtained by deriving the expression v=∇v.x, where ∇v is the macroscopic velocity gradient, giving in an incremental form: Δv=Δ ∇v x + ∇v Δx. As a result, velocities are modified as soon as velGrad changes, according to the first term: Δv(t)=Δ ∇v x(t), while the 2nd term reflects a convective term: Δv’= ∇v v(t-dt/2). The second term is neglected if homoDeform=1. All terms are included if homoDeform=2 (default)

nextVelGrad(=Matrix3r::Zero())

see Cell.velGrad.

prevHSize(=Matrix3r::Identity())

hSize from the previous step, used in the definition of relative velocity across periods.

prevVelGrad(=Matrix3r::Zero())

Velocity gradient in the previous step.

refHSize(=Matrix3r::Identity())

Reference cell configuration, only used with OpenGLRenderer.dispScale. Updated automatically when hSize or trsf is assigned directly; also modified by utils.setRefSe3 (called e.g. by the Reference button in the UI).

refSize

Reference size of the cell (lengths of initial cell vectors, i.e. column norms of hSize).

Note

Modifying this value is deprecated, use setBox instead.

setBox((Vector3)arg2) → None
Set Cell shape to be rectangular, with dimensions along axes specified by given argument. Shorthand for assigning diagonal matrix with respective entries to hSize.
setBox( (Cell)arg1, (float)arg2, (float)arg3, (float)arg4) → None :
Set Cell shape to be rectangular, with dimensions along x, y, z specified by arguments. Shorthand for assigning diagonal matrix with the respective entries to hSize.
shearPt((Vector3)arg2) → Vector3

Apply shear (cell skew+rot) on the point

shearTrsf

Current skew+rot transformation (no resize)

size

Current size of the cell, i.e. lengths of the 3 cell lateral vectors contained in Cell.hSize columns. Updated automatically at every step.

trsf

Current transformation matrix of the cell, obtained from time integration of Cell.velGrad.

unshearPt((Vector3)arg2) → Vector3

Apply inverse shear on the point (removes skew+rot of the cell)

unshearTrsf

Inverse of the current skew+rot transformation (no resize)

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary

velGrad

Velocity gradient of the transformation; used in NewtonIntegrator. Values of velGrad accumulate in trsf at every step.

NOTE: changing velGrad at the beginning of a simulation loop would lead to inacurate integration for one step, as it should normaly be changed after the contact laws (but before Newton). To avoid this problem, assignment is deferred automatically. The target value typed in terminal is actually stored in Cell.nextVelGrad and will be applied right in time by Newton integrator.

Note

Assigning individual components of velGrad is not possible (it will not return any error but it will have no effect). Instead, you can assign to Cell.nextVelGrad, as in O.cell.nextVelGrad[1,2]=1.

velGradChanged(=false)

true when velGrad has been changed manually (see also Cell.nextVelGrad)

volume

Current volume of the cell.

wrap((Vector3)arg2) → Vector3

Transform an arbitrary point into a point in the reference cell

wrapPt((Vector3)arg2) → Vector3

Wrap point inside the reference cell, assuming the cell has no skew+rot.

class yade.wrapper.GlExtraDrawer(inherits Serializable)

Performing arbitrary OpenGL drawing commands; called from OpenGLRenderer (see OpenGLRenderer.extraDrawers) once regular rendering routines will have finished.

This class itself does not render anything, derived classes should override the render method.

dead(=false)

Deactivate the object (on error/exception).

dict() → dict

Return dictionary of attributes.

updateAttrs((dict)arg2) → None

Update object attributes from given dictionary