# mpacts.contact.models.collision.linearforce. **linearforce_fl**¶

In order to be able to use this module import it like this:

```
import mpacts.contact.models.collision.linearforce.linearforce_fl
#or assign it to a shorter name
import mpacts.contact.models.collision.linearforce.linearforce_fl as lin
```

Contents

## FlatLayerAdhesionFprimInt¶

Description: Linear flat layer force including adhesion Geometry combinations available:

PC2 | PC1 - | Rigid_Triangle | Rigid_Quad | Deformable_Triangle |
---|---|---|---|

Rigid_Triangle |
YES | YES | YES |

Rigid_Quad |
YES | YES | |

Rigid_CylinderBottom |
YES | ||

Rigid_Cylinder |
YES | YES | YES |

Deformable_Triangle |
YES |

**FlatLayerAdhesionFprimInt (Deformable_Triangle Deformable_Triangle)**

Linear flat layer force including adhesion

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`attrConst`

— Adhesion energy (J/m^2) of two surfaces brought together`k_layer`

— layer stiffnes [Pa/m]. Not that k_layer = bulk modulus / layer thickness`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

This contact model is composed out of following pieces *(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Deformable_NGon_1_Data <3 > ↓ Deformable_NGon_2_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ NoContactAdhesionModifier ↓ LinearFlatLayerAdhesion_Int <12 > ↓ Feedback

**FlatLayerAdhesionFprimInt (Deformable_Triangle Rigid_Cylinder)**

Linear flat layer force including adhesion

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`attrConst`

— Adhesion energy (J/m^2) of two surfaces brought together`k_layer`

— layer stiffnes [Pa/m]. Not that k_layer = bulk modulus / layer thickness`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`extend_cylinder_hull`

(default value = 0) — Distance that the cylinder will be extended at top and bottom for contact resolution.It is recommended that you choose a non-zero value here, to prevent particles falling out at the edges. A good choice would be the maximal allowed overlap.Default: zero.

This contact model is composed out of following pieces *(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Deformable_NGon_1_Data <3 > ↓ Rigid_Cylinder_2_Data ↓ FlatLayer_NGon_1_Data <3 > ↓ NGon_HollowCylinder ↓ NoContactAdhesionModifier ↓ LinearFlatLayerAdhesion_Int <12 > ↓ Feedback

**FlatLayerAdhesionFprimInt (Deformable_Triangle Rigid_CylinderBottom)**

Linear flat layer force including adhesion

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`attrConst`

— Adhesion energy (J/m^2) of two surfaces brought together`k_layer`

— layer stiffnes [Pa/m]. Not that k_layer = bulk modulus / layer thickness`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`extend_radius`

(default value = 0) — If given, the radius will be increased with the given extend. Useful for hollow cylinders to avoid problems in the corner.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in radians) for which the contact will still be considered flat (default: 1 degree).

This contact model is composed out of following pieces *(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_Cylinder_2_Data ↓ Deformable_NGon_1_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ NGon_Disk <Bottom_Selector > ↓ NoContactAdhesionModifier ↓ LinearFlatLayerAdhesion_Int <12 > ↓ Feedback

**FlatLayerAdhesionFprimInt (Deformable_Triangle Rigid_Quad)**

Linear flat layer force including adhesion

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`attrConst`

— Adhesion energy (J/m^2) of two surfaces brought together`k_layer`

— layer stiffnes [Pa/m]. Not that k_layer = bulk modulus / layer thickness`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_2_Data <4 > ↓ Deformable_NGon_1_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <4 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ NoContactAdhesionModifier ↓ LinearFlatLayerAdhesion_Int <12 > ↓ Feedback

**FlatLayerAdhesionFprimInt (Deformable_Triangle Rigid_Triangle)**

Linear flat layer force including adhesion

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`attrConst`

— Adhesion energy (J/m^2) of two surfaces brought together`k_layer`

— layer stiffnes [Pa/m]. Not that k_layer = bulk modulus / layer thickness`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_2_Data <3 > ↓ Deformable_NGon_1_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ NoContactAdhesionModifier ↓ LinearFlatLayerAdhesion_Int <12 > ↓ Feedback

**FlatLayerAdhesionFprimInt (Rigid_Quad Rigid_Cylinder)**

Linear flat layer force including adhesion

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`attrConst`

— Adhesion energy (J/m^2) of two surfaces brought together`k_layer`

— layer stiffnes [Pa/m]. Not that k_layer = bulk modulus / layer thickness`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`extend_cylinder_hull`

(default value = 0) — Distance that the cylinder will be extended at top and bottom for contact resolution.It is recommended that you choose a non-zero value here, to prevent particles falling out at the edges. A good choice would be the maximal allowed overlap.Default: zero.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <4 > ↓ Rigid_Cylinder_2_Data ↓ FlatLayer_NGon_1_Data <4 > ↓ NGon_HollowCylinder ↓ NoContactAdhesionModifier ↓ LinearFlatLayerAdhesion_Int <12 > ↓ AssembleForces_1 ↓ AssembleForces_2 ↓ AssembleMoments_1 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ Feedback

**FlatLayerAdhesionFprimInt (Rigid_Quad Rigid_Quad)**

Linear flat layer force including adhesion

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`attrConst`

— Adhesion energy (J/m^2) of two surfaces brought together`k_layer`

— layer stiffnes [Pa/m]. Not that k_layer = bulk modulus / layer thickness`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`abort_if_different`

(default value = 0) — If ‘True’, inverts the regular function of ‘AbortIfSameParent’, and makes the contact model early abort if the particles’ parents are different. Please do not change this ‘Property’ if you are not sure what you are doing.`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <4 > ↓ Rigid_NGon_2_Data <4 > ↓ FlatLayer_NGon_1_Data <4 > ↓ FlatLayer_NGon_2_Data <4 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ NoContactAdhesionModifier ↓ LinearFlatLayerAdhesion_Int <12 > ↓ AssembleForces_1 ↓ AssembleMoments_cps_1 ↓ AssembleMoments_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ AbortIfSameParent ↓ Feedback

**FlatLayerAdhesionFprimInt (Rigid_Quad Rigid_Triangle)**

Linear flat layer force including adhesion

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`attrConst`

— Adhesion energy (J/m^2) of two surfaces brought together`k_layer`

— layer stiffnes [Pa/m]. Not that k_layer = bulk modulus / layer thickness`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <4 > ↓ Rigid_NGon_2_Data <3 > ↓ FlatLayer_NGon_1_Data <4 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ NoContactAdhesionModifier ↓ LinearFlatLayerAdhesion_Int <12 > ↓ AssembleForces_1 ↓ AssembleMoments_cps_1 ↓ AssembleMoments_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ Feedback

**FlatLayerAdhesionFprimInt (Rigid_Triangle Rigid_Cylinder)**

Linear flat layer force including adhesion

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`attrConst`

— Adhesion energy (J/m^2) of two surfaces brought together`k_layer`

— layer stiffnes [Pa/m]. Not that k_layer = bulk modulus / layer thickness`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`extend_cylinder_hull`

(default value = 0) — Distance that the cylinder will be extended at top and bottom for contact resolution.It is recommended that you choose a non-zero value here, to prevent particles falling out at the edges. A good choice would be the maximal allowed overlap.Default: zero.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <3 > ↓ Rigid_Cylinder_2_Data ↓ FlatLayer_NGon_1_Data <3 > ↓ NGon_HollowCylinder ↓ NoContactAdhesionModifier ↓ LinearFlatLayerAdhesion_Int <12 > ↓ AssembleForces_1 ↓ AssembleForces_2 ↓ AssembleMoments_1 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ Feedback

**FlatLayerAdhesionFprimInt (Rigid_Triangle Rigid_Triangle)**

Linear flat layer force including adhesion

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`attrConst`

— Adhesion energy (J/m^2) of two surfaces brought together`k_layer`

— layer stiffnes [Pa/m]. Not that k_layer = bulk modulus / layer thickness`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`abort_if_different`

(default value = 0) — If ‘True’, inverts the regular function of ‘AbortIfSameParent’, and makes the contact model early abort if the particles’ parents are different. Please do not change this ‘Property’ if you are not sure what you are doing.`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <3 > ↓ Rigid_NGon_2_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ NoContactAdhesionModifier ↓ LinearFlatLayerAdhesion_Int <12 > ↓ AssembleForces_1 ↓ AssembleMoments_cps_1 ↓ AssembleMoments_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ AbortIfSameParent ↓ Feedback

## FlatLayerDebug¶

Description: Simple flat layer force model between n-gons with only normal forces. First checks AABBs for overlap and aborts if there is none to speed up calculations. And saves forces to each triangle for later analysis Geometry combinations available:

PC2 | PC1 - | Rigid_Triangle | Rigid_Quad | Deformable_Triangle |
---|---|---|---|

Rigid_Triangle |
YES | YES | YES |

Rigid_Quad |
YES | YES | |

Rigid_CylinderBottom |
YES | ||

Rigid_Cylinder |
YES | YES | YES |

Deformable_Triangle |
YES |

**FlatLayerDebug (Deformable_Triangle Deformable_Triangle)**

Simple flat layer force model between n-gons with only normal forces. First checks AABBs for overlap and aborts if there is none to speed up calculations. And saves forces to each triangle for later analysis

*Parallel Compatible*: No

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`overlap1`

— Array with unsigned which stores the Overlap per primitive for pc1.`overlap2`

— Array with unsigned which stores the Overlap per primitive for pc1.`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.`reject_case1`

— Array with unsigned which stores the rejectCase per primitive for pc1.`reject_case2`

— Array with unsigned which stores the rejectCase per primitive for pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`abort_if_different`

(default value = 0) — If ‘True’, inverts the regular function of ‘AbortIfSameParent’, and makes the contact model early abort if the particles’ parents are different. Please do not change this ‘Property’ if you are not sure what you are doing.`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Deformable_NGon_1_Data <3 > ↓ Deformable_NGon_2_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerPressure_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ DistributeForcesAndMomentsToTriangle_2_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_DeformableTriangle_2 ↓ AssembleSimpleTangentialForces_DeformableTriangle_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ WriteRejectCase_Primitives_2 ↓ WriteRejectCase_Primitives_1 ↓ WriteTotalOverlap_Primitives_1 ↓ WriteTotalOverlap_Primitives_2 ↓ Assemble_ContactArea_1 ↓ Assemble_ContactArea_2 ↓ AbortIfSameParent ↓ Feedback

**FlatLayerDebug (Deformable_Triangle Rigid_Cylinder)**

Simple flat layer force model between n-gons with only normal forces. First checks AABBs for overlap and aborts if there is none to speed up calculations. And saves forces to each triangle for later analysis

*Parallel Compatible*: No

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`overlap1`

— Array with unsigned which stores the Overlap per primitive for pc1.`overlap2`

— Array with unsigned which stores the Overlap per primitive for pc1.`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.`reject_case1`

— Array with unsigned which stores the rejectCase per primitive for pc1.`reject_case2`

— Array with unsigned which stores the rejectCase per primitive for pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`extend_cylinder_hull`

(default value = 0) — Distance that the cylinder will be extended at top and bottom for contact resolution.It is recommended that you choose a non-zero value here, to prevent particles falling out at the edges. A good choice would be the maximal allowed overlap.Default: zero.`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Deformable_NGon_1_Data <3 > ↓ Rigid_Cylinder_2_Data ↓ FlatLayer_NGon_1_Data <3 > ↓ NGon_HollowCylinder ↓ LinearFlatLayerPressure_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ WriteRejectCase_Primitives_2 ↓ WriteRejectCase_Primitives_1 ↓ WriteTotalOverlap_Primitives_1 ↓ WriteTotalOverlap_Primitives_2 ↓ Assemble_ContactArea_1 ↓ Assemble_ContactArea_2 ↓ Feedback

**FlatLayerDebug (Deformable_Triangle Rigid_CylinderBottom)**

Simple flat layer force model between n-gons with only normal forces. First checks AABBs for overlap and aborts if there is none to speed up calculations. And saves forces to each triangle for later analysis

*Parallel Compatible*: No

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`overlap1`

— Array with unsigned which stores the Overlap per primitive for pc1.`overlap2`

— Array with unsigned which stores the Overlap per primitive for pc1.`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.`reject_case1`

— Array with unsigned which stores the rejectCase per primitive for pc1.`reject_case2`

— Array with unsigned which stores the rejectCase per primitive for pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`extend_radius`

(default value = 0) — If given, the radius will be increased with the given extend. Useful for hollow cylinders to avoid problems in the corner.`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in radians) for which the contact will still be considered flat (default: 1 degree).`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_Cylinder_2_Data ↓ Deformable_NGon_1_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ NGon_Disk <Bottom_Selector > ↓ LinearFlatLayerPressure_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ WriteRejectCase_Primitives_2 ↓ WriteRejectCase_Primitives_1 ↓ WriteTotalOverlap_Primitives_1 ↓ WriteTotalOverlap_Primitives_2 ↓ Assemble_ContactArea_1 ↓ Assemble_ContactArea_2 ↓ Feedback

**FlatLayerDebug (Deformable_Triangle Rigid_Quad)**

*Parallel Compatible*: No

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`overlap1`

— Array with unsigned which stores the Overlap per primitive for pc1.`overlap2`

— Array with unsigned which stores the Overlap per primitive for pc1.`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.`reject_case1`

— Array with unsigned which stores the rejectCase per primitive for pc1.`reject_case2`

— Array with unsigned which stores the rejectCase per primitive for pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_2_Data <4 > ↓ Deformable_NGon_1_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <4 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerPressure_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ WriteRejectCase_Primitives_2 ↓ WriteRejectCase_Primitives_1 ↓ WriteTotalOverlap_Primitives_1 ↓ WriteTotalOverlap_Primitives_2 ↓ Assemble_ContactArea_1 ↓ Assemble_ContactArea_2 ↓ Feedback

**FlatLayerDebug (Deformable_Triangle Rigid_Triangle)**

*Parallel Compatible*: No

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`overlap1`

— Array with unsigned which stores the Overlap per primitive for pc1.`overlap2`

— Array with unsigned which stores the Overlap per primitive for pc1.`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.`reject_case1`

— Array with unsigned which stores the rejectCase per primitive for pc1.`reject_case2`

— Array with unsigned which stores the rejectCase per primitive for pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_2_Data <3 > ↓ Deformable_NGon_1_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerPressure_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ WriteRejectCase_Primitives_2 ↓ WriteRejectCase_Primitives_1 ↓ WriteTotalOverlap_Primitives_1 ↓ WriteTotalOverlap_Primitives_2 ↓ Assemble_ContactArea_1 ↓ Assemble_ContactArea_2 ↓ Feedback

**FlatLayerDebug (Rigid_Quad Rigid_Cylinder)**

*Parallel Compatible*: No

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`overlap1`

— Array with unsigned which stores the Overlap per primitive for pc1.`overlap2`

— Array with unsigned which stores the Overlap per primitive for pc1.`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.`reject_case1`

— Array with unsigned which stores the rejectCase per primitive for pc1.`reject_case2`

— Array with unsigned which stores the rejectCase per primitive for pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`extend_cylinder_hull`

(default value = 0) — Distance that the cylinder will be extended at top and bottom for contact resolution.It is recommended that you choose a non-zero value here, to prevent particles falling out at the edges. A good choice would be the maximal allowed overlap.Default: zero.`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <4 > ↓ Rigid_Cylinder_2_Data ↓ FlatLayer_NGon_1_Data <4 > ↓ NGon_HollowCylinder ↓ LinearFlatLayerPressure_Int <6 > ↓ AssembleForces_1 ↓ AssembleForces_2 ↓ AssembleMoments_1 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ WriteRejectCase_Primitives_2 ↓ WriteRejectCase_Primitives_1 ↓ WriteTotalOverlap_Primitives_1 ↓ WriteTotalOverlap_Primitives_2 ↓ Assemble_ContactArea_1 ↓ Assemble_ContactArea_2 ↓ Feedback

**FlatLayerDebug (Rigid_Quad Rigid_Quad)**

*Parallel Compatible*: No

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`overlap1`

— Array with unsigned which stores the Overlap per primitive for pc1.`overlap2`

— Array with unsigned which stores the Overlap per primitive for pc1.`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.`reject_case1`

— Array with unsigned which stores the rejectCase per primitive for pc1.`reject_case2`

— Array with unsigned which stores the rejectCase per primitive for pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`abort_if_different`

(default value = 0) — If ‘True’, inverts the regular function of ‘AbortIfSameParent’, and makes the contact model early abort if the particles’ parents are different. Please do not change this ‘Property’ if you are not sure what you are doing.`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <4 > ↓ Rigid_NGon_2_Data <4 > ↓ FlatLayer_NGon_1_Data <4 > ↓ FlatLayer_NGon_2_Data <4 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerPressure_Int <6 > ↓ AssembleForces_1 ↓ AssembleMoments_cps_1 ↓ AssembleMoments_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ WriteRejectCase_Primitives_2 ↓ WriteRejectCase_Primitives_1 ↓ WriteTotalOverlap_Primitives_1 ↓ WriteTotalOverlap_Primitives_2 ↓ Assemble_ContactArea_1 ↓ Assemble_ContactArea_2 ↓ AbortIfSameParent ↓ Feedback

**FlatLayerDebug (Rigid_Quad Rigid_Triangle)**

*Parallel Compatible*: No

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`overlap1`

— Array with unsigned which stores the Overlap per primitive for pc1.`overlap2`

— Array with unsigned which stores the Overlap per primitive for pc1.`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.`reject_case1`

— Array with unsigned which stores the rejectCase per primitive for pc1.`reject_case2`

— Array with unsigned which stores the rejectCase per primitive for pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <4 > ↓ Rigid_NGon_2_Data <3 > ↓ FlatLayer_NGon_1_Data <4 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerPressure_Int <6 > ↓ AssembleForces_1 ↓ AssembleMoments_cps_1 ↓ AssembleMoments_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ WriteRejectCase_Primitives_2 ↓ WriteRejectCase_Primitives_1 ↓ WriteTotalOverlap_Primitives_1 ↓ WriteTotalOverlap_Primitives_2 ↓ Assemble_ContactArea_1 ↓ Assemble_ContactArea_2 ↓ Feedback

**FlatLayerDebug (Rigid_Triangle Rigid_Cylinder)**

*Parallel Compatible*: No

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`overlap1`

— Array with unsigned which stores the Overlap per primitive for pc1.`overlap2`

— Array with unsigned which stores the Overlap per primitive for pc1.`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.`reject_case1`

— Array with unsigned which stores the rejectCase per primitive for pc1.`reject_case2`

— Array with unsigned which stores the rejectCase per primitive for pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`extend_cylinder_hull`

(default value = 0) — Distance that the cylinder will be extended at top and bottom for contact resolution.It is recommended that you choose a non-zero value here, to prevent particles falling out at the edges. A good choice would be the maximal allowed overlap.Default: zero.`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <3 > ↓ Rigid_Cylinder_2_Data ↓ FlatLayer_NGon_1_Data <3 > ↓ NGon_HollowCylinder ↓ LinearFlatLayerPressure_Int <6 > ↓ AssembleForces_1 ↓ AssembleForces_2 ↓ AssembleMoments_1 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ WriteRejectCase_Primitives_2 ↓ WriteRejectCase_Primitives_1 ↓ WriteTotalOverlap_Primitives_1 ↓ WriteTotalOverlap_Primitives_2 ↓ Assemble_ContactArea_1 ↓ Assemble_ContactArea_2 ↓ Feedback

**FlatLayerDebug (Rigid_Triangle Rigid_Triangle)**

*Parallel Compatible*: No

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`overlap1`

— Array with unsigned which stores the Overlap per primitive for pc1.`overlap2`

— Array with unsigned which stores the Overlap per primitive for pc1.`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.`reject_case1`

— Array with unsigned which stores the rejectCase per primitive for pc1.`reject_case2`

— Array with unsigned which stores the rejectCase per primitive for pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`abort_if_different`

(default value = 0) — If ‘True’, inverts the regular function of ‘AbortIfSameParent’, and makes the contact model early abort if the particles’ parents are different. Please do not change this ‘Property’ if you are not sure what you are doing.`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <3 > ↓ Rigid_NGon_2_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerPressure_Int <6 > ↓ AssembleForces_1 ↓ AssembleMoments_cps_1 ↓ AssembleMoments_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ WriteRejectCase_Primitives_2 ↓ WriteRejectCase_Primitives_1 ↓ WriteTotalOverlap_Primitives_1 ↓ WriteTotalOverlap_Primitives_2 ↓ Assemble_ContactArea_1 ↓ Assemble_ContactArea_2 ↓ AbortIfSameParent ↓ Feedback

## FlatLayerFprimInt¶

Description: Simple flat layer force model between n-gons with only normal forces. First checks AABBs for overlap and aborts if there is none to speed up calculations. And saves forces to each triangle for later analysis Geometry combinations available:

PC2 | PC1 - | Rigid_Triangle | Rigid_Quad | Deformable_Triangle |
---|---|---|---|

Rigid_Triangle |
YES | YES | YES |

Rigid_Quad |
YES | YES | |

Rigid_CylinderBottom |
YES | ||

Rigid_Cylinder |
YES | YES | YES |

Deformable_Triangle |
YES |

**FlatLayerFprimInt (Deformable_Triangle Deformable_Triangle)**

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`abort_if_different`

(default value = 0) — If ‘True’, inverts the regular function of ‘AbortIfSameParent’, and makes the contact model early abort if the particles’ parents are different. Please do not change this ‘Property’ if you are not sure what you are doing.`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Deformable_NGon_1_Data <3 > ↓ Deformable_NGon_2_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerPressure_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ DistributeForcesAndMomentsToTriangle_2_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_DeformableTriangle_2 ↓ AssembleSimpleTangentialForces_DeformableTriangle_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ AbortIfSameParent ↓ Feedback

**FlatLayerFprimInt (Deformable_Triangle Rigid_Cylinder)**

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`extend_cylinder_hull`

(default value = 0) — Distance that the cylinder will be extended at top and bottom for contact resolution.It is recommended that you choose a non-zero value here, to prevent particles falling out at the edges. A good choice would be the maximal allowed overlap.Default: zero.`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Deformable_NGon_1_Data <3 > ↓ Rigid_Cylinder_2_Data ↓ FlatLayer_NGon_1_Data <3 > ↓ NGon_HollowCylinder ↓ LinearFlatLayerPressure_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ Feedback

**FlatLayerFprimInt (Deformable_Triangle Rigid_CylinderBottom)**

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`extend_radius`

(default value = 0) — If given, the radius will be increased with the given extend. Useful for hollow cylinders to avoid problems in the corner.`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in radians) for which the contact will still be considered flat (default: 1 degree).`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_Cylinder_2_Data ↓ Deformable_NGon_1_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ NGon_Disk <Bottom_Selector > ↓ LinearFlatLayerPressure_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ Feedback

**FlatLayerFprimInt (Deformable_Triangle Rigid_Quad)**

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_2_Data <4 > ↓ Deformable_NGon_1_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <4 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerPressure_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ Feedback

**FlatLayerFprimInt (Deformable_Triangle Rigid_Triangle)**

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_2_Data <3 > ↓ Deformable_NGon_1_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerPressure_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ Feedback

**FlatLayerFprimInt (Rigid_Quad Rigid_Cylinder)**

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`extend_cylinder_hull`

(default value = 0) — Distance that the cylinder will be extended at top and bottom for contact resolution.It is recommended that you choose a non-zero value here, to prevent particles falling out at the edges. A good choice would be the maximal allowed overlap.Default: zero.`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <4 > ↓ Rigid_Cylinder_2_Data ↓ FlatLayer_NGon_1_Data <4 > ↓ NGon_HollowCylinder ↓ LinearFlatLayerPressure_Int <6 > ↓ AssembleForces_1 ↓ AssembleForces_2 ↓ AssembleMoments_1 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ Feedback

**FlatLayerFprimInt (Rigid_Quad Rigid_Quad)**

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`abort_if_different`

(default value = 0) — If ‘True’, inverts the regular function of ‘AbortIfSameParent’, and makes the contact model early abort if the particles’ parents are different. Please do not change this ‘Property’ if you are not sure what you are doing.`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <4 > ↓ Rigid_NGon_2_Data <4 > ↓ FlatLayer_NGon_1_Data <4 > ↓ FlatLayer_NGon_2_Data <4 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerPressure_Int <6 > ↓ AssembleForces_1 ↓ AssembleMoments_cps_1 ↓ AssembleMoments_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ AbortIfSameParent ↓ Feedback

**FlatLayerFprimInt (Rigid_Quad Rigid_Triangle)**

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <4 > ↓ Rigid_NGon_2_Data <3 > ↓ FlatLayer_NGon_1_Data <4 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerPressure_Int <6 > ↓ AssembleForces_1 ↓ AssembleMoments_cps_1 ↓ AssembleMoments_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ Feedback

**FlatLayerFprimInt (Rigid_Triangle Rigid_Cylinder)**

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`extend_cylinder_hull`

(default value = 0) — Distance that the cylinder will be extended at top and bottom for contact resolution.It is recommended that you choose a non-zero value here, to prevent particles falling out at the edges. A good choice would be the maximal allowed overlap.Default: zero.`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <3 > ↓ Rigid_Cylinder_2_Data ↓ FlatLayer_NGon_1_Data <3 > ↓ NGon_HollowCylinder ↓ LinearFlatLayerPressure_Int <6 > ↓ AssembleForces_1 ↓ AssembleForces_2 ↓ AssembleMoments_1 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ Feedback

**FlatLayerFprimInt (Rigid_Triangle Rigid_Triangle)**

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`abort_if_different`

(default value = 0) — If ‘True’, inverts the regular function of ‘AbortIfSameParent’, and makes the contact model early abort if the particles’ parents are different. Please do not change this ‘Property’ if you are not sure what you are doing.`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <3 > ↓ Rigid_NGon_2_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerPressure_Int <6 > ↓ AssembleForces_1 ↓ AssembleMoments_cps_1 ↓ AssembleMoments_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ AbortIfSameParent ↓ Feedback

## FlatLayerInt¶

Description: Simple flat layer force model between n-gons with only normal forces. Geometry combinations available:

PC2 | PC1 - | Rigid_Triangle | Rigid_Quad | Deformable_Triangle |
---|---|---|---|

Rigid_Triangle |
YES | YES | YES |

Rigid_Quad |
YES | YES | |

Rigid_CylinderBottom |
YES | ||

Rigid_Cylinder |
YES | YES | YES |

Deformable_Triangle |
YES |

**FlatLayerInt (Deformable_Triangle Deformable_Triangle)**

Simple flat layer force model between n-gons with only normal forces.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`abort_if_different`

(default value = 0) — If ‘True’, inverts the regular function of ‘AbortIfSameParent’, and makes the contact model early abort if the particles’ parents are different. Please do not change this ‘Property’ if you are not sure what you are doing.`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Deformable_NGon_1_Data <3 > ↓ Deformable_NGon_2_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerPressure_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ DistributeForcesAndMomentsToTriangle_2_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_DeformableTriangle_2 ↓ AssembleSimpleTangentialForces_DeformableTriangle_2 ↓ AbortIfSameParent ↓ Feedback

**FlatLayerInt (Deformable_Triangle Rigid_Cylinder)**

Simple flat layer force model between n-gons with only normal forces.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`extend_cylinder_hull`

(default value = 0) — Distance that the cylinder will be extended at top and bottom for contact resolution.It is recommended that you choose a non-zero value here, to prevent particles falling out at the edges. A good choice would be the maximal allowed overlap.Default: zero.`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Deformable_NGon_1_Data <3 > ↓ Rigid_Cylinder_2_Data ↓ FlatLayer_NGon_1_Data <3 > ↓ NGon_HollowCylinder ↓ LinearFlatLayerPressure_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ Feedback

**FlatLayerInt (Deformable_Triangle Rigid_CylinderBottom)**

Simple flat layer force model between n-gons with only normal forces.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`extend_radius`

(default value = 0) — If given, the radius will be increased with the given extend. Useful for hollow cylinders to avoid problems in the corner.`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in radians) for which the contact will still be considered flat (default: 1 degree).`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_Cylinder_2_Data ↓ Deformable_NGon_1_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ NGon_Disk <Bottom_Selector > ↓ LinearFlatLayerPressure_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ Feedback

**FlatLayerInt (Deformable_Triangle Rigid_Quad)**

Simple flat layer force model between n-gons with only normal forces.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_2_Data <4 > ↓ Deformable_NGon_1_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <4 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerPressure_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ Feedback

**FlatLayerInt (Deformable_Triangle Rigid_Triangle)**

Simple flat layer force model between n-gons with only normal forces.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_2_Data <3 > ↓ Deformable_NGon_1_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerPressure_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ Feedback

**FlatLayerInt (Rigid_Quad Rigid_Cylinder)**

Simple flat layer force model between n-gons with only normal forces.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`extend_cylinder_hull`

(default value = 0) — Distance that the cylinder will be extended at top and bottom for contact resolution.It is recommended that you choose a non-zero value here, to prevent particles falling out at the edges. A good choice would be the maximal allowed overlap.Default: zero.`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <4 > ↓ Rigid_Cylinder_2_Data ↓ FlatLayer_NGon_1_Data <4 > ↓ NGon_HollowCylinder ↓ LinearFlatLayerPressure_Int <6 > ↓ AssembleForces_1 ↓ AssembleForces_2 ↓ AssembleMoments_1 ↓ AssembleMoments_2 ↓ Feedback

**FlatLayerInt (Rigid_Quad Rigid_Quad)**

Simple flat layer force model between n-gons with only normal forces.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`abort_if_different`

(default value = 0) — If ‘True’, inverts the regular function of ‘AbortIfSameParent’, and makes the contact model early abort if the particles’ parents are different. Please do not change this ‘Property’ if you are not sure what you are doing.`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <4 > ↓ Rigid_NGon_2_Data <4 > ↓ FlatLayer_NGon_1_Data <4 > ↓ FlatLayer_NGon_2_Data <4 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerPressure_Int <6 > ↓ AssembleForces_1 ↓ AssembleMoments_cps_1 ↓ AssembleMoments_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AbortIfSameParent ↓ Feedback

**FlatLayerInt (Rigid_Quad Rigid_Triangle)**

Simple flat layer force model between n-gons with only normal forces.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <4 > ↓ Rigid_NGon_2_Data <3 > ↓ FlatLayer_NGon_1_Data <4 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerPressure_Int <6 > ↓ AssembleForces_1 ↓ AssembleMoments_cps_1 ↓ AssembleMoments_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ Feedback

**FlatLayerInt (Rigid_Triangle Rigid_Cylinder)**

Simple flat layer force model between n-gons with only normal forces.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`extend_cylinder_hull`

(default value = 0) — Distance that the cylinder will be extended at top and bottom for contact resolution.It is recommended that you choose a non-zero value here, to prevent particles falling out at the edges. A good choice would be the maximal allowed overlap.Default: zero.`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <3 > ↓ Rigid_Cylinder_2_Data ↓ FlatLayer_NGon_1_Data <3 > ↓ NGon_HollowCylinder ↓ LinearFlatLayerPressure_Int <6 > ↓ AssembleForces_1 ↓ AssembleForces_2 ↓ AssembleMoments_1 ↓ AssembleMoments_2 ↓ Feedback

**FlatLayerInt (Rigid_Triangle Rigid_Triangle)**

Simple flat layer force model between n-gons with only normal forces.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime.`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`A1`

(default value = -1) — Normal damping coefficient (s) of material 1. If given, we estimate c_layer = k_layer * (A1+A2)/2.`A2`

(default value = -1) — Normal damping coefficient (s) of material 2. If given, we estimate c_layer = k_layer * (A1+A2)/2.`E1`

(default value = -1) — Young’s modulus of material 1. If given, we estimate ‘k_layer’ based on E1 and E2`E2`

(default value = -1) — Young’s modulus of material 2. If given, we estimate ‘k_layer’ based on E1 and E2`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`abort_if_different`

(default value = 0) — If ‘True’, inverts the regular function of ‘AbortIfSameParent’, and makes the contact model early abort if the particles’ parents are different. Please do not change this ‘Property’ if you are not sure what you are doing.`c_layer`

(default value = -1) — layer normal damping coefficient [kg/(m^2 s)]`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`k_layer`

(default value = -1) — Contact layer stiffnes [Pa/m]. If not given, this will be roughly approximated based on two required Young’s moduli.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`nu1`

(default value = -1) — Poisson’s ratio of material 1`nu2`

(default value = -1) — Poisson’s ratio of material 2`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

- Read only properties:

`c`

— Contact damping [Pa*s/m]. Read-only`k`

— Contact stiffness [Pa/m]. Read-only

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <3 > ↓ Rigid_NGon_2_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerPressure_Int <6 > ↓ AssembleForces_1 ↓ AssembleMoments_cps_1 ↓ AssembleMoments_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AbortIfSameParent ↓ Feedback

## FlatLayerNGonSphere¶

Description: Linear flat layer force for spheres with Coulomb as tangential friction model implemented as a dashpot. Geometry combinations available:

PC2 | PC1 - | Rigid_Triangle | Rigid_Quad |
---|---|---|

Sphere |
YES | YES |

**FlatLayerNGonSphere (Rigid_Quad Sphere)**

Linear flat layer force for spheres with Coulomb as tangential friction model implemented as a dashpot.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`k_layer`

— Layer stiffness`mu`

— The coulomb friction coefficient (both static and dynamic).`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`c_layer`

(default value = 0) — Layer damping coefficient`c_t`

(default value = -1) — ‘c’ value of the linear dashpot (N*s/m) in tangential direction. The higher this value, the more accurate the results will be, but the simulation can become unstable, requiring smaller timesteps.`cp_t`

(default value = -1) — Optional contact area-dependent linear dashpot coefficent (Pa*s/m). Give either c_t or cp_t but not both.`flip_normals`

(default value = 0) — Optionally flip normals if sphere is more than its radius submerged. In most cases, we recommend that you leave this option to its default ‘false’.`reject_large_overlap`

(default value = 1) — Optionally reject overlaps`reject_overlap_r`

times larger than the radius. Unless you have a fully concave ‘container’ geometry, we recommend that you leave this value to its default ‘true’.`reject_overlap_r`

(default value = 1) — If`reject_large_overlap`

is`True`

, this specifies the number of sphere radii of overlap that should be rejected (Default=1).

*(click on the chain elements to get more information)*:

DefaultBoilerPlate ↓ Sphere_2_Data ↓ Rigid_NGon_1_Data <4 > ↓ NGon_Sphere ↓ N_LinearFlatLayerForce_NGonSphere ↓ T_CoulombFriction ↓ AssembleForces ↓ AssembleMoments ↓ Feedback

**FlatLayerNGonSphere (Rigid_Triangle Sphere)**

Linear flat layer force for spheres with Coulomb as tangential friction model implemented as a dashpot.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`k_layer`

— Layer stiffness`mu`

— The coulomb friction coefficient (both static and dynamic).`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`c_layer`

(default value = 0) — Layer damping coefficient`c_t`

(default value = -1) — ‘c’ value of the linear dashpot (N*s/m) in tangential direction. The higher this value, the more accurate the results will be, but the simulation can become unstable, requiring smaller timesteps.`cp_t`

(default value = -1) — Optional contact area-dependent linear dashpot coefficent (Pa*s/m). Give either c_t or cp_t but not both.`flip_normals`

(default value = 0) — Optionally flip normals if sphere is more than its radius submerged. In most cases, we recommend that you leave this option to its default ‘false’.`reject_large_overlap`

(default value = 1) — Optionally reject overlaps`reject_overlap_r`

times larger than the radius. Unless you have a fully concave ‘container’ geometry, we recommend that you leave this value to its default ‘true’.`reject_overlap_r`

(default value = 1) — If`reject_large_overlap`

is`True`

, this specifies the number of sphere radii of overlap that should be rejected (Default=1).

*(click on the chain elements to get more information)*:

DefaultBoilerPlate ↓ Sphere_2_Data ↓ Rigid_NGon_1_Data <3 > ↓ NGon_Sphere ↓ N_LinearFlatLayerForce_NGonSphere ↓ T_CoulombFriction ↓ AssembleForces ↓ AssembleMoments ↓ Feedback

## FlatLayerSheetFprimInt¶

Description: Simple flat layer force model between double-sided sheets. First checks AABBs for overlap and aborts if there is none to speed up calculations. Saves forces to each triangle for later analysis. Geometry combinations available:

PC2 | PC1 - | Deformable_Triangle |
---|---|

Rigid_Triangle |
YES |

Rigid_Quad |
YES |

Deformable_Triangle |
YES |

**FlatLayerSheetFprimInt (Deformable_Triangle Deformable_Triangle)**

Simple flat layer force model between double-sided sheets. First checks AABBs for overlap and aborts if there is none to speed up calculations. Saves forces to each triangle for later analysis.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime (N*s/m)`c`

— Normal damping coefficient for the linear dashpot (N*s/m)`k`

— Linear contact stiffness (N/m)`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`abort_if_different`

(default value = 0) — If ‘True’, inverts the regular function of ‘AbortIfSameParent’, and makes the contact model early abort if the particles’ parents are different. Please do not change this ‘Property’ if you are not sure what you are doing.`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Deformable_NGon_1_Data <3 > ↓ Deformable_NGon_2_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ Sheet_Sheet ↓ LinearFlatLayerForce_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ DistributeForcesAndMomentsToTriangle_2_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_DeformableTriangle_2 ↓ AssembleSimpleTangentialForces_DeformableTriangle_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ AbortIfSameParent ↓ Feedback

**FlatLayerSheetFprimInt (Deformable_Triangle Rigid_Quad)**

Simple flat layer force model between double-sided sheets. First checks AABBs for overlap and aborts if there is none to speed up calculations. Saves forces to each triangle for later analysis.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime (N*s/m)`c`

— Normal damping coefficient for the linear dashpot (N*s/m)`k`

— Linear contact stiffness (N/m)`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_2_Data <4 > ↓ Deformable_NGon_1_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <4 > ↓ PABB_NGon_NGon ↓ Sheet_NGon ↓ LinearFlatLayerForce_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ Feedback

**FlatLayerSheetFprimInt (Deformable_Triangle Rigid_Triangle)**

Simple flat layer force model between double-sided sheets. First checks AABBs for overlap and aborts if there is none to speed up calculations. Saves forces to each triangle for later analysis.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime (N*s/m)`c`

— Normal damping coefficient for the linear dashpot (N*s/m)`k`

— Linear contact stiffness (N/m)`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_2_Data <3 > ↓ Deformable_NGon_1_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ Sheet_NGon ↓ LinearFlatLayerForce_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ Feedback

## FlatLayerSphere¶

Description: Linear flat layer force for spheres with Coulomb as tangential friction model implemented as a dashpot. Geometry combinations available:

PC2 | PC1 - | Sphere |
---|---|

Sphere |
YES |

**FlatLayerSphere (Sphere Sphere)**

Linear flat layer force for spheres with Coulomb as tangential friction model implemented as a dashpot.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`k_layer`

— Layer stiffness`mu`

— The coulomb friction coefficient (both static and dynamic).`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`c_layer`

(default value = 0) — Layer damping coefficient`c_t`

(default value = -1) — ‘c’ value of the linear dashpot (N*s/m) in tangential direction. The higher this value, the more accurate the results will be, but the simulation can become unstable, requiring smaller timesteps.`cp_t`

(default value = -1) — Optional contact area-dependent linear dashpot coefficent (Pa*s/m). Give either c_t or cp_t but not both.

*(click on the chain elements to get more information)*:

DefaultBoilerPlate ↓ Sphere_2_Data ↓ Sphere_1_Data ↓ Sphere_Sphere ↓ N_LinearFlatLayerForce_Sphere ↓ T_CoulombFriction ↓ AssembleForces ↓ AssembleMoments ↓ Feedback

## LinearForceCoulombNGonCylinder¶

Description: Custom force for contact between rigid NGons and hollow cylinders (i.e. cylinders with a negative radius). Coulomb Friction model. Geometry combinations available:

PC2 | PC1 - | Rigid_Triangle | Rigid_Quad |
---|---|---|

Rigid_Triangle |
YES | YES |

Rigid_Quad |
YES | |

Rigid_Cylinder |
YES | YES |

**LinearForceCoulombNGonCylinder (Rigid_Quad Rigid_Cylinder)**

Custom force for contact between rigid NGons and hollow cylinders (i.e. cylinders with a negative radius). Coulomb Friction model.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`k`

(kg . s^-2) — effective spring constant.`mu`

— The coulomb friction coefficient (both static and dynamic).`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`c_t`

(default value = -1) — ‘c’ value of the linear dashpot (N*s/m) in tangential direction. The higher this value, the more accurate the results will be, but the simulation can become unstable, requiring smaller timesteps.`c`

(kg . s^-1) (default value = 0) — damping coefficient.`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`cp_t`

(default value = -1) — Optional contact area-dependent linear dashpot coefficent (Pa*s/m). Give either c_t or cp_t but not both.`extend_cylinder_hull`

(default value = 0) — Distance that the cylinder will be extended at top and bottom for contact resolution.It is recommended that you choose a non-zero value here, to prevent particles falling out at the edges. A good choice would be the maximal allowed overlap.Default: zero.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <4 > ↓ Rigid_Cylinder_2_Data ↓ FlatLayer_NGon_1_Data <4 > ↓ NGon_HollowCylinder ↓ N_LinearForce ↓ T_CoulombFriction ↓ AssembleForces_1 ↓ AssembleForces_2 ↓ AssembleMoments_1 ↓ AssembleMoments_2 ↓ Feedback

**LinearForceCoulombNGonCylinder (Rigid_Quad Rigid_Quad)**

Custom force for contact between rigid NGons and hollow cylinders (i.e. cylinders with a negative radius). Coulomb Friction model.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`k`

(kg . s^-2) — effective spring constant.`mu`

— The coulomb friction coefficient (both static and dynamic).`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`c_t`

(default value = -1) — ‘c’ value of the linear dashpot (N*s/m) in tangential direction. The higher this value, the more accurate the results will be, but the simulation can become unstable, requiring smaller timesteps.`c`

(kg . s^-1) (default value = 0) — damping coefficient.`cp_t`

(default value = -1) — Optional contact area-dependent linear dashpot coefficent (Pa*s/m). Give either c_t or cp_t but not both.`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <4 > ↓ Rigid_NGon_2_Data <4 > ↓ FlatLayer_NGon_1_Data <4 > ↓ FlatLayer_NGon_2_Data <4 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ N_LinearForce ↓ T_CoulombFriction ↓ AssembleForces_1 ↓ AssembleMoments_cps_1 ↓ AssembleMoments_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ Feedback

**LinearForceCoulombNGonCylinder (Rigid_Quad Rigid_Triangle)**

Custom force for contact between rigid NGons and hollow cylinders (i.e. cylinders with a negative radius). Coulomb Friction model.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`k`

(kg . s^-2) — effective spring constant.`mu`

— The coulomb friction coefficient (both static and dynamic).`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`c_t`

(default value = -1) — ‘c’ value of the linear dashpot (N*s/m) in tangential direction. The higher this value, the more accurate the results will be, but the simulation can become unstable, requiring smaller timesteps.`c`

(kg . s^-1) (default value = 0) — damping coefficient.`cp_t`

(default value = -1) — Optional contact area-dependent linear dashpot coefficent (Pa*s/m). Give either c_t or cp_t but not both.`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <4 > ↓ Rigid_NGon_2_Data <3 > ↓ FlatLayer_NGon_1_Data <4 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ N_LinearForce ↓ T_CoulombFriction ↓ AssembleForces_1 ↓ AssembleMoments_cps_1 ↓ AssembleMoments_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ Feedback

**LinearForceCoulombNGonCylinder (Rigid_Triangle Rigid_Cylinder)**

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`k`

(kg . s^-2) — effective spring constant.`mu`

— The coulomb friction coefficient (both static and dynamic).`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`c_t`

(default value = -1) — ‘c’ value of the linear dashpot (N*s/m) in tangential direction. The higher this value, the more accurate the results will be, but the simulation can become unstable, requiring smaller timesteps.`c`

(kg . s^-1) (default value = 0) — damping coefficient.`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`cp_t`

(default value = -1) — Optional contact area-dependent linear dashpot coefficent (Pa*s/m). Give either c_t or cp_t but not both.`extend_cylinder_hull`

(default value = 0) — Distance that the cylinder will be extended at top and bottom for contact resolution.It is recommended that you choose a non-zero value here, to prevent particles falling out at the edges. A good choice would be the maximal allowed overlap.Default: zero.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <3 > ↓ Rigid_Cylinder_2_Data ↓ FlatLayer_NGon_1_Data <3 > ↓ NGon_HollowCylinder ↓ N_LinearForce ↓ T_CoulombFriction ↓ AssembleForces_1 ↓ AssembleForces_2 ↓ AssembleMoments_1 ↓ AssembleMoments_2 ↓ Feedback

**LinearForceCoulombNGonCylinder (Rigid_Triangle Rigid_Triangle)**

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`k`

(kg . s^-2) — effective spring constant.`mu`

— The coulomb friction coefficient (both static and dynamic).`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`c_t`

(default value = -1) — ‘c’ value of the linear dashpot (N*s/m) in tangential direction. The higher this value, the more accurate the results will be, but the simulation can become unstable, requiring smaller timesteps.`c`

(kg . s^-1) (default value = 0) — damping coefficient.`cp_t`

(default value = -1) — Optional contact area-dependent linear dashpot coefficent (Pa*s/m). Give either c_t or cp_t but not both.`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <3 > ↓ Rigid_NGon_2_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ N_LinearForce ↓ T_CoulombFriction ↓ AssembleForces_1 ↓ AssembleMoments_cps_1 ↓ AssembleMoments_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ Feedback

## LinearForceFprimInt¶

Description: Linear integrated contact force model between n-gons and other geometries. Integrates the contact force over the intersection polygon using 6 integration points per sub-triangle, and re-normalizes the total integrated force so it scales linearly with the maximal overlap of the contact. This allows for a consistent behavior that is almost identical compared to the standard LinearForceCoulomb model. Geometry combinations available:

PC2 | PC1 - | Rigid_Triangle | Rigid_Quad | Deformable_Triangle |
---|---|---|---|

Rigid_Triangle |
YES | YES | YES |

Rigid_Quad |
YES | YES | |

Rigid_CylinderBottom |
YES | ||

Rigid_Cylinder |
YES | YES | YES |

Deformable_Triangle |
YES |

**LinearForceFprimInt (Deformable_Triangle Deformable_Triangle)**

Linear integrated contact force model between n-gons and other geometries. Integrates the contact force over the intersection polygon using 6 integration points per sub-triangle, and re-normalizes the total integrated force so it scales linearly with the maximal overlap of the contact. This allows for a consistent behavior that is almost identical compared to the standard LinearForceCoulomb model.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime (N*s/m)`c`

— Normal damping coefficient for the linear dashpot (N*s/m)`k`

— Linear contact stiffness (N/m)`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`abort_if_different`

(default value = 0) — If ‘True’, inverts the regular function of ‘AbortIfSameParent’, and makes the contact model early abort if the particles’ parents are different. Please do not change this ‘Property’ if you are not sure what you are doing.`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Deformable_NGon_1_Data <3 > ↓ Deformable_NGon_2_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerForce_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ DistributeForcesAndMomentsToTriangle_2_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_DeformableTriangle_2 ↓ AssembleSimpleTangentialForces_DeformableTriangle_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ AbortIfSameParent ↓ Feedback

**LinearForceFprimInt (Deformable_Triangle Rigid_Cylinder)**

Linear integrated contact force model between n-gons and other geometries. Integrates the contact force over the intersection polygon using 6 integration points per sub-triangle, and re-normalizes the total integrated force so it scales linearly with the maximal overlap of the contact. This allows for a consistent behavior that is almost identical compared to the standard LinearForceCoulomb model.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime (N*s/m)`c`

— Normal damping coefficient for the linear dashpot (N*s/m)`k`

— Linear contact stiffness (N/m)`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`extend_cylinder_hull`

(default value = 0) — Distance that the cylinder will be extended at top and bottom for contact resolution.It is recommended that you choose a non-zero value here, to prevent particles falling out at the edges. A good choice would be the maximal allowed overlap.Default: zero.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Deformable_NGon_1_Data <3 > ↓ Rigid_Cylinder_2_Data ↓ FlatLayer_NGon_1_Data <3 > ↓ NGon_HollowCylinder ↓ LinearFlatLayerForce_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ Feedback

**LinearForceFprimInt (Deformable_Triangle Rigid_CylinderBottom)**

Linear integrated contact force model between n-gons and other geometries. Integrates the contact force over the intersection polygon using 6 integration points per sub-triangle, and re-normalizes the total integrated force so it scales linearly with the maximal overlap of the contact. This allows for a consistent behavior that is almost identical compared to the standard LinearForceCoulomb model.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime (N*s/m)`c`

— Normal damping coefficient for the linear dashpot (N*s/m)`k`

— Linear contact stiffness (N/m)`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`extend_radius`

(default value = 0) — If given, the radius will be increased with the given extend. Useful for hollow cylinders to avoid problems in the corner.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in radians) for which the contact will still be considered flat (default: 1 degree).

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_Cylinder_2_Data ↓ Deformable_NGon_1_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ NGon_Disk <Bottom_Selector > ↓ LinearFlatLayerForce_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ Feedback

**LinearForceFprimInt (Deformable_Triangle Rigid_Quad)**

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime (N*s/m)`c`

— Normal damping coefficient for the linear dashpot (N*s/m)`k`

— Linear contact stiffness (N/m)`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_2_Data <4 > ↓ Deformable_NGon_1_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <4 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerForce_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ Feedback

**LinearForceFprimInt (Deformable_Triangle Rigid_Triangle)**

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime (N*s/m)`c`

— Normal damping coefficient for the linear dashpot (N*s/m)`k`

— Linear contact stiffness (N/m)`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_2_Data <3 > ↓ Deformable_NGon_1_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerForce_Int <6 > ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ Feedback

**LinearForceFprimInt (Rigid_Quad Rigid_Cylinder)**

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime (N*s/m)`c`

— Normal damping coefficient for the linear dashpot (N*s/m)`k`

— Linear contact stiffness (N/m)`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`extend_cylinder_hull`

(default value = 0) — Distance that the cylinder will be extended at top and bottom for contact resolution.It is recommended that you choose a non-zero value here, to prevent particles falling out at the edges. A good choice would be the maximal allowed overlap.Default: zero.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <4 > ↓ Rigid_Cylinder_2_Data ↓ FlatLayer_NGon_1_Data <4 > ↓ NGon_HollowCylinder ↓ LinearFlatLayerForce_Int <6 > ↓ AssembleForces_1 ↓ AssembleForces_2 ↓ AssembleMoments_1 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ Feedback

**LinearForceFprimInt (Rigid_Quad Rigid_Quad)**

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime (N*s/m)`c`

— Normal damping coefficient for the linear dashpot (N*s/m)`k`

— Linear contact stiffness (N/m)`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`abort_if_different`

(default value = 0) — If ‘True’, inverts the regular function of ‘AbortIfSameParent’, and makes the contact model early abort if the particles’ parents are different. Please do not change this ‘Property’ if you are not sure what you are doing.`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <4 > ↓ Rigid_NGon_2_Data <4 > ↓ FlatLayer_NGon_1_Data <4 > ↓ FlatLayer_NGon_2_Data <4 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerForce_Int <6 > ↓ AssembleForces_1 ↓ AssembleMoments_cps_1 ↓ AssembleMoments_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ AbortIfSameParent ↓ Feedback

**LinearForceFprimInt (Rigid_Quad Rigid_Triangle)**

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime (N*s/m)`c`

— Normal damping coefficient for the linear dashpot (N*s/m)`k`

— Linear contact stiffness (N/m)`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <4 > ↓ Rigid_NGon_2_Data <3 > ↓ FlatLayer_NGon_1_Data <4 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerForce_Int <6 > ↓ AssembleForces_1 ↓ AssembleMoments_cps_1 ↓ AssembleMoments_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ Feedback

**LinearForceFprimInt (Rigid_Triangle Rigid_Cylinder)**

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime (N*s/m)`c`

— Normal damping coefficient for the linear dashpot (N*s/m)`k`

— Linear contact stiffness (N/m)`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`extend_cylinder_hull`

(default value = 0) — Distance that the cylinder will be extended at top and bottom for contact resolution.It is recommended that you choose a non-zero value here, to prevent particles falling out at the edges. A good choice would be the maximal allowed overlap.Default: zero.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <3 > ↓ Rigid_Cylinder_2_Data ↓ FlatLayer_NGon_1_Data <3 > ↓ NGon_HollowCylinder ↓ LinearFlatLayerForce_Int <6 > ↓ AssembleForces_1 ↓ AssembleForces_2 ↓ AssembleMoments_1 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ Feedback

**LinearForceFprimInt (Rigid_Triangle Rigid_Triangle)**

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`c_t`

— Tangential Coulomb damping coefficient in static regime (N*s/m)`c`

— Normal damping coefficient for the linear dashpot (N*s/m)`k`

— Linear contact stiffness (N/m)`mu`

— Coulomb friction coefficient`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`Fprim1`

(default value = None) — Array with vectors which stores the contact force per primitive for pc1. If not given, the array pc1[‘Fprim’] is searched first, and if not found, nothing will be done`Fprim2`

(default value = None) — Array with vectors which stores the contact force per primitive for pc2. If not given, the array pc2[‘Fprim’] is searched first, and if not found, nothing will be done`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`abort_if_different`

(default value = 0) — If ‘True’, inverts the regular function of ‘AbortIfSameParent’, and makes the contact model early abort if the particles’ parents are different. Please do not change this ‘Property’ if you are not sure what you are doing.`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ Rigid_NGon_1_Data <3 > ↓ Rigid_NGon_2_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ LinearFlatLayerForce_Int <6 > ↓ AssembleForces_1 ↓ AssembleMoments_cps_1 ↓ AssembleMoments_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ AssembleForces_Primitives_1 ↓ AssembleForces_Primitives_2 ↓ AbortIfSameParent ↓ Feedback

## TruncatedLinearTraction¶

Description: Truncated traction and flat layer repulsion for a brittle connected material. Geometry combinations available:

PC2 | PC1 - | Deformable_Triangle |
---|---|

Rigid_Triangle |
YES |

Rigid_Quad |
YES |

Rigid_CylinderBottom |
YES |

Rigid_Cylinder |
YES |

Deformable_Triangle |
YES |

**TruncatedLinearTraction (Deformable_Triangle Deformable_Triangle)**

Truncated traction and flat layer repulsion for a brittle connected material.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`k_layer`

— layer stiffnes [Pa/m]. Not that k_layer = bulk modulus / layer thickness`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`abort_if_different`

(default value = 0) — If ‘True’, inverts the regular function of ‘AbortIfSameParent’, and makes the contact model early abort if the particles’ parents are different. Please do not change this ‘Property’ if you are not sure what you are doing.`always_init_contact_state`

(default value = 0) — If ‘True’, the contact states may be initialized every time this contact model chain element is executed. This effectively makes the contact force model an adhesion model instead of a brittle fracture model. This mode is useful to obtain initial configurations.`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`init_contact_state`

(default value = 1) — If ‘True’, will again ‘fix’ the contacts within adhesive range on the next iteration. Afterwards, this value is automatically set to false, and broken springs will only re-attach if this property is explicitly set to ‘True’ again.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

- Read only properties:

`k`

— contact stiffness (N/m). Will be computed internally for a given contact based on the contact geometry and k_layer. Can be consulted for de-bugging reasons.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ KeepTimeStep ↓ Deformable_NGon_1_Data <3 > ↓ Deformable_NGon_2_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ TruncatedLinearTraction_Int <16 > ↓ Assemble_ContactArea_1 ↓ Assemble_ContactArea_2 ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ DistributeForcesAndMomentsToTriangle_2_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_DeformableTriangle_2 ↓ AssembleSimpleTangentialForces_DeformableTriangle_2 ↓ AbortIfSameParent ↓ Feedback

**TruncatedLinearTraction (Deformable_Triangle Rigid_Cylinder)**

Truncated traction and flat layer repulsion for a brittle connected material.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`k_layer`

— layer stiffnes [Pa/m]. Not that k_layer = bulk modulus / layer thickness`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`always_init_contact_state`

(default value = 0) — If ‘True’, the contact states may be initialized every time this contact model chain element is executed. This effectively makes the contact force model an adhesion model instead of a brittle fracture model. This mode is useful to obtain initial configurations.`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`extend_cylinder_hull`

(default value = 0) — Distance that the cylinder will be extended at top and bottom for contact resolution.It is recommended that you choose a non-zero value here, to prevent particles falling out at the edges. A good choice would be the maximal allowed overlap.Default: zero.`init_contact_state`

(default value = 1) — If ‘True’, will again ‘fix’ the contacts within adhesive range on the next iteration. Afterwards, this value is automatically set to false, and broken springs will only re-attach if this property is explicitly set to ‘True’ again.

- Read only properties:

`k`

— contact stiffness (N/m). Will be computed internally for a given contact based on the contact geometry and k_layer. Can be consulted for de-bugging reasons.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ KeepTimeStep ↓ Deformable_NGon_1_Data <3 > ↓ Rigid_Cylinder_2_Data ↓ FlatLayer_NGon_1_Data <3 > ↓ NGon_HollowCylinder ↓ TruncatedLinearTraction_Int <16 > ↓ Assemble_ContactArea_1 ↓ Assemble_ContactArea_2 ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ Feedback

**TruncatedLinearTraction (Deformable_Triangle Rigid_CylinderBottom)**

Truncated traction and flat layer repulsion for a brittle connected material.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`k_layer`

— layer stiffnes [Pa/m]. Not that k_layer = bulk modulus / layer thickness`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`always_init_contact_state`

(default value = 0) — If ‘True’, the contact states may be initialized every time this contact model chain element is executed. This effectively makes the contact force model an adhesion model instead of a brittle fracture model. This mode is useful to obtain initial configurations.`contact_range`

(default value = 0) — The range of negative overlaps for which the intersection polygon will be expanded. Default: 0`extend_radius`

(default value = 0) — If given, the radius will be increased with the given extend. Useful for hollow cylinders to avoid problems in the corner.`init_contact_state`

(default value = 1) — If ‘True’, will again ‘fix’ the contacts within adhesive range on the next iteration. Afterwards, this value is automatically set to false, and broken springs will only re-attach if this property is explicitly set to ‘True’ again.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in radians) for which the contact will still be considered flat (default: 1 degree).

- Read only properties:

`k`

— contact stiffness (N/m). Will be computed internally for a given contact based on the contact geometry and k_layer. Can be consulted for de-bugging reasons.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ KeepTimeStep ↓ Rigid_Cylinder_2_Data ↓ Deformable_NGon_1_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ NGon_Disk <Bottom_Selector > ↓ TruncatedLinearTraction_Int <16 > ↓ Assemble_ContactArea_1 ↓ Assemble_ContactArea_2 ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ Feedback

**TruncatedLinearTraction (Deformable_Triangle Rigid_Quad)**

Truncated traction and flat layer repulsion for a brittle connected material.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`k_layer`

— layer stiffnes [Pa/m]. Not that k_layer = bulk modulus / layer thickness`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`always_init_contact_state`

(default value = 0) — If ‘True’, the contact states may be initialized every time this contact model chain element is executed. This effectively makes the contact force model an adhesion model instead of a brittle fracture model. This mode is useful to obtain initial configurations.`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`init_contact_state`

(default value = 1) — If ‘True’, will again ‘fix’ the contacts within adhesive range on the next iteration. Afterwards, this value is automatically set to false, and broken springs will only re-attach if this property is explicitly set to ‘True’ again.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

- Read only properties:

`k`

— contact stiffness (N/m). Will be computed internally for a given contact based on the contact geometry and k_layer. Can be consulted for de-bugging reasons.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ KeepTimeStep ↓ Rigid_NGon_2_Data <4 > ↓ Deformable_NGon_1_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <4 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ TruncatedLinearTraction_Int <16 > ↓ Assemble_ContactArea_1 ↓ Assemble_ContactArea_2 ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ Feedback

**TruncatedLinearTraction (Deformable_Triangle Rigid_Triangle)**

Truncated traction and flat layer repulsion for a brittle connected material.

*Parallel Compatible*: Yes

*Properties*:

- Required keywords:

`k_layer`

— layer stiffnes [Pa/m]. Not that k_layer = bulk modulus / layer thickness`pc1`

— The first particle container in the binary contact detection.`pc2`

— The second particle container in the binary contact detection. If contact detection within the same particle container is desired, and it is applicable for the contactmodel, pass the same pc to both pc1 and pc2.

- Optional keywords:

`PABB_margin`

(default value = -1) — Margin used by the Particle-Aligned Bounding Boxes (PABBs). This margin is added in all Particle-aligned axes of the bounding boxes in each direction. If specified as a value between 0 and half the calling contact detector’s ‘keep_distance’, the PABBs are considered as a pre-contact resolution step, and executed every timestep. Hence, the ‘margin’ can be interpreted as half the maximal overlap distance that should still be detected in the extreme case of two parallel N-gons. If ‘margin’ is not specified (or < 0), the PABBs are considered as a post-contact detection filtering step. The margin is then computed automatically based on the contact detector’s ‘keep_distance’ property, and the PABBs are only used to filter contacts whenever contact detection takes place, i.e. every ‘update_every’ steps. If unsure, leave this parameter as its default which is as safe as a Grid-Based contact detector and induces little overhead in general. However, for simulations with relatively ‘stiff’ and ‘fast’ particles, setting this to a non-zero value might significantly boost the simulation speed.`always_init_contact_state`

(default value = 0) — If ‘True’, the contact states may be initialized every time this contact model chain element is executed. This effectively makes the contact force model an adhesion model instead of a brittle fracture model. This mode is useful to obtain initial configurations.`enable_PABB`

(default value = 1) — If ‘True’, the contacts will be pre-filtered usingParticle-Aligned Bounding Boxes(PABBs). The usage strategy of the PABBs depends on the simulation, and can be configured using the property ‘PABB_margin’`init_contact_state`

(default value = 1) — If ‘True’, will again ‘fix’ the contacts within adhesive range on the next iteration. Afterwards, this value is automatically set to false, and broken springs will only re-attach if this property is explicitly set to ‘True’ again.`max_flat_angle`

(default value = 0.017453292519943295) — Maximal deviation of normal1 and -normal2 (in RADIAN) for which the contact will still be considered flat (default: 1 degree).`reject_angle`

(default value = 1.2309594173407747) — Angles sharper than this angle (in RADIAN) will be ignored, regardless of node normals.Higher = more stable, but might miss sharp contacts. Lower = more inclusive, but numerically dangerous.Only change this setting from its default if you know what you are doing. Default value = arccos(1/3), the angle of the tetrahedron, which is the sharpest we can safely deal with.`weight_normal_1`

(default value = 0.5) — Weight that will be assigned to the contribution of the normal of p1 in determining the normal unit vector. the weight from the normal of p2 is (1-weight_normal_1). Default is equal weights. Only change this setting if you know what you are doing.

- Read only properties:

`k`

— contact stiffness (N/m). Will be computed internally for a given contact based on the contact geometry and k_layer. Can be consulted for de-bugging reasons.

*(click on the chain elements to get more information)*:

FlatNGonBoilerPlate ↓ KeepTimeStep ↓ Rigid_NGon_2_Data <3 > ↓ Deformable_NGon_1_Data <3 > ↓ FlatLayer_NGon_1_Data <3 > ↓ FlatLayer_NGon_2_Data <3 > ↓ PABB_NGon_NGon ↓ NGon_NGon ↓ TruncatedLinearTraction_Int <16 > ↓ Assemble_ContactArea_1 ↓ Assemble_ContactArea_2 ↓ DistributeForcesAndMomentsToTriangle_1_Nodes ↓ AssembleForces_DeformableTriangle_1 ↓ AssembleSimpleTangentialForces_DeformableTriangle_1 ↓ AssembleForces_2 ↓ AssembleMoments_cps_2 ↓ AssembleMoments_2 ↓ Feedback