Faceted Walls in PFC
As discussed in “Model Components,” a PFC model is made up of bodies that interact via mechanical contacts. A faceted wall is a body composed of a triangular mesh of n facets \(\{F^{(i)}\}, i = 1, 2, ..., n\). Each facet is a piece. The \(i\)th triangular facet consists of a face bounded by three edges \(\left\{E^{(i)}_k\right\}, k=1...3\) (see Figure 1 below). The edges terminate at points, termed vertices \(\left\{V^{(i)}_k\right\}, k=1...3\). The three vertices delineating a facet must be unique. The edge vectors are defined as \(\textbf{E}^{(i)}_1 = V^{(i)}_2 - V^{(i)}_1\), \(\textbf{E}^{(i)}_2 = V^{(i)}_3 - V^{(i)}_2\), and \(\textbf{E}^{(i)}_3 = V^{(i)}_1 - V^{(i)}_3\). The vertices are ordered so that the normal, \(\textbf{n}^{(i)}\), of the facet is defined by the right-hand rule,
PFC presumes that the normals of all facets of a wall are oriented consistently with neighboring facets or those sharing a common edge or vertex (e.g., a point traversing directly above/below a faceted wall is above/below the facet closest to the traversal point except near wall boundaries). Define the signed distance from facet \(i\) to an arbitrary point in space \(P\) as \(sd = \textbf{n}^{(i)} \cdot \left(P - P^{(i)}\right)\), where \(P^{(i)}\) is any point on the plane of the facet. The distance \(sd\) is signed in the sense that \(sd > 0 \ (sd < 0)\) for points lying above (below) the facet; \(sd = 0\) for points coplanar with a facet. The wall data structure allows for the efficient identification of neighboring facets, or those sharing edges or vertices. Faceted walls can be used to represent closed or open bounded surfaces, with or without missing facets. In addition, large overlap is allowed between balls/clumps and wall facets. Note that facets are not allowed to contain internal holes; nor may facets of the same wall intersect one another. Unlike previous PFC wall implementations, walls are active on all sides by default (e.g., balls approaching facets from an inactive side do not interact with the facets). The user can flag individual facets as inactive on either or both facet sides. Note: No effort is made to stop a ball or pebble from experiencing large forces when migrating from the inactive to active side of a wall facet. Unrealistic velocities may be generated in such circumstances.
Wall motion does not obey the equations of motion. Wall motion can either be rigid or deformable, but not both simultaneously. Invoking rigid wall motion allows the user to specify a translational, \(\textbf{v}\), and a rotational, \(\textbf{w}\), velocity for the wall along with a rotational reference point, \(W_r\). Rotation is accomplished by translating all vertices so that \(W_r\) is the origin (translate by \(-W_r\)); a rotation matrix is constructed from a normalized version of the quaternion \(q(1, w_x\Delta t,w_y\Delta t, w_2\Delta t)\), where \(\Delta t\) is the timestep. The rotation matrix is applied to all vertices, which are subsequently translated by \(W_r\) to their final, rotated positions. This quaternion approach is utilized to avoid gimbal lock, which is a loss of a degree of freedom that can occur when using Euler angles. Invoking deformable wall motion allows the user to specify a translational velocity \(\left\{\textbf{v}^{(i)}\right\}, i = 1, 2, ..., m\) for each vertex in the faceted wall (\(m\) is the number of unique vertices). The specified vertex velocities must preserve facet non-intersection at all times. In all cases, the total force and moment acting on the wall (defined by \(\textbf{F}\) and \(\textbf{M}\), the sums of force and moment acting at each mechanical contact) are stored.
Mechanical interactions conceptually exist between bodies; interactions can exist between walls and bodies of other types (balls or clumps). The user does not have access to the corresponding data structures, though they are described for the sake of clarity. Inter- and intra-wall mechanical interactions are not allowed in PFC. In other words, walls do not interact with other walls. Only one mechanical interaction can exist between two different bodies, but multiple mechanical contacts may exist between the constituent pieces of those bodies. Thus a mechanical interaction acts as a container, storing a list of contacts between constituent pieces along with the resultant force and moment of all associated contacts. Mechanical interactions are created/destroyed by the contact-detection logic whenever bodies are sufficiently close/separated. Proximity detection is aided by abstracting each constituent piece of a body as an extent (e.g., an axis-aligned bounding box—as seen in Figure 2). The contact-detection scheme also creates/destroys contacts between pieces whose extents overlap. Note that there can only be one active mechanical contact between pieces—for instance, between a ball and a wall facet (including shared facet edges/vertices). As described in “Model Components,” the minimum extent can be enlarged in a user-controlled manner to ensure that interactions/contacts are created prior to the intersection of pieces of different bodies.
Faceted Wall Contact Resolution
Mechanical interactions can exist between walls and balls or clumps. As both balls and clumps are composed of spherical pieces, the following discussion will focus on ball-wall mechanical interactions without loss of generality. In addition, the terms interaction and contact below refer to mechanical interactions/contacts only. An interaction is created during contact detection once a ball extent overlaps with at least one of the facet extents of a wall. This interaction holds a list of all contacts between the wall and ball. Contacts exist between the ball and each facet whose extent overlaps the ball’s extent. Contact resolution is the process by which the contact geometry and conditions are delineated. Define the wall contact point as the point on a facet with a ball-facet contact that is closest to the ball centroid (Figure 3). PFC uses an efficient algorithm that casts the triangular facets in parametric form to identify every wall contact point, including unambiguous identification of the region of the facet where the point lies (e.g., on the facet face, on one of the three edges/vertices in 3D (2 edges/vertices in 2D)). Suppose that \(l\) contacts have been identified by the contact-detection logic and that the wall contact points, \(WP_{i}, i = 1...l\), have been calculated. In addition, suppose that the contacts have been ordered with decreasing overlap. The unit normal direction of contact \(i\) points from the ball centroid \(\textbf{x}\) to the wall contact point and is given by
where \(d_i = \Vert WP_i - \textbf{x} \Vert\) is the unsigned distance from the ball centroid to the wall contact point \(WP_i\). The normal overlap between the ball and corresponding wall facet is \(U^{B,W}_i = R - d_{i}\), where \(R\) is the ball radius. The contact is active for \(U^{B,W}_i > 0\), or inactive otherwise unless the contact model stipulates different inactivity conditions. The location of the contact point, the point used for plotting and relative velocity/displacement calculations, is given by
It may be undesirable in certain circumstances for multiple contacts to be simultaneously active. Suppose that a ball overlaps numerous facets delineating a flat wall (Figure 4a). Should all contacts with \(U^{B,W}_{i} > 0\) be active, the effective normal and shear contact stiffness would be many times the contact stiffness for the case of a ball overlapping a single facet (Figure 4b). Such behavior is undesirable, and an associative logic is used to determine the contact activity state. Suppose that the contacts \(C_a, C_b, C_c, C_d\) have been identified during contact detection between the ball and wall facets with corresponding wall contact points \(WP_a, WP_b, WP_c, WP_d\), respectively. All of these contacts are active (e.g., \(U^{B,W}_a, U^{B,W}_b, U^{B,W}_c, U^{B,W}_d > 0\)). Suppose that one traverses the contact list in the arbitrary order \(C_d, C_a, C_b, C_c\). Starting with contact \(C_d\), for instance, one finds that \(WP_d\) falls on the edge shared by facets \(c\) and \(d\); \(C_d\) is deemed active and a link is created between \(C_d\) and \(C_c\). This linkage between contacts occurs since a wall contact point lies on an edge shared by these two facets and \(U^{B,W}_{d} > 0\). Moving to \(C_a\), one finds that \(WP_a\) falls on the edge shared by facets \(a\) and \(b\); \(C_a\) is deemed active and a link is created to \(C_b\) as \(U^{B,W}_{a} > 0\). Moving then to \(C_b\), one finds a link to \(C_a\) and that \(WP_b\) lies on the face of facet \(b\). The linkage signifies that either \(C_a\) or \(C_b\) may be active; the condition \(U^{B,W}_{b} > U^{B,W}_{a}\) specifies that \(C_b\) is active while \(C_a\) is deemed inactive. Inspection of \(C_c\) requires a link to be created between \(C_c\) and \(C_d\) and \(U^{B,W}_{c} > U^{B,W}_{d}\), so \(C_d\) is deemed inactive. In addition, \(WP_c\) lies on the edge shared with facet \(b\) and \(U^{B,W}_{c} > 0\) so a link between \(C_c\) and \(C_b\) is created. In this case, though, \(U^{B,W}_{b} > U^{B,W}_{c}\) so \(C_c\) is also inactive. These links are depicted as curled arrows in Figure 4c. The associative contact-resolution strategy for ball-facet contacts produces the desired result of one active contact, namely \(C_b\). The rules for this scheme can be summarized as follows: 1) only one active contact can exist between a ball and a wall facet, including shared edges and vertices; 2) contacts between a ball and adjacent facets with wall contact points on a shared edge or vertex are linked, provided that the normal overlap is greater than 0; and 3) the contact with the largest overlap in a linked set is the only active contact.
The application of this algorithm to a ball traversing a wall toward a convex edge is depicted in Figure 5. The wall has been broken into multiple facets to demonstrate the use of the algorithm. Figure 5a shows that the contact with facet \(c\), \(C_c\), is active and linked to \(C_b\) and \(C_d\), which are inactive. In addition, \(C_a\) is inactive and linked to \(C_b\). In Figure 5b, \(C_c\) remains active and linked to the inactive contacts \(C_d\) and \(C_b\). The gray region is the region where the ball transitions over the edge shared with facets \(c\) and \(d\). As this happens (Figure 5b and Figure 5c), the contact normal smoothly rotates and \(C_c\) continues to be active. Once over the shared edge (Figure 5d), \(C_d\) becomes active and is linked to the inactive \(C_c\) and \(C_e\). \(C_e\) is also linked to \(C_f\), which is inactive.
The algorithmic performance when applied to a ball moving toward a concave edge is demonstrated in Figure 6. Figure 6a depicts the situation where the ball has not yet begun to overlap the opposing wall facets. In Figure 6b, the algorithm results in two active contacts, namely \(C_c\) and \(C_d\). This occurs because these contacts are not linked, because a wall contact point does not lie on a shared edge or vertex. As the ball continues to translate, \(C_e\) is the only active contact (Figure 6c). When applied to a case of a nominally flat wall with roughness at a length scale much less than the ball size (as seen in Figure 7), this algorithm results in active contacts at each of the facet edges/vertices closest to the ball centroid. This wall configuration results in a significantly stiffer ball-wall contact interaction, because the ball is interacting with a number of facet edges. Though this wall segment is flat when viewed at a certain scale, it does not behave as the examples shown in Figure 4, given application of the associative algorithm. The application of the associative logic is facilitated by ordering the contacts with decreasing overlap; associative checks cease once these checks have been applied to all contacts with positive overlap. The associative logic, as outlined, is included in both “reduced” and “full” contact resolution modes.
Two circumstances where the associative logic will not produce the desired behavior are shown in Figure 8. In Figure 8a, a ball overlaps a sliver where no link exists between contacts. In Figure 8b, a ball overlaps multiple facets of the same wall and no links are present. These situations can occur when the scale of a feature of a wall is much smaller than the scale of a ball. Application of the associative logic results in two (three) active contacts in Figure 8a (Figure 8b) where only one active contact may be physical in both cases. Such conditions can be detected by determining whether or not the line segments connecting the ball centroid to the wall contact points of active contacts (active as determined by the associative logic) intersect any other facets with active contacts. The contact with the largest overlap is deemed active. Such a check is unnecessary when the scales are compatible and is not included in “reduced” contact resolution mode (the default behavior). An alternate approach to mitigating the wedge situation in Figure 8a is to set the “inner” facets of the wedge as inactive, resulting in only one active contact. Such a solution would not mitigate the situation in Figure 8b, though. It is advisable that one consider setting the scales of wall features and balls to be similar, to avoid these situations.
Continuity of Contact-State Information
Suppose that one uses the default contact model in PFC with nonzero normal/shear stiffness and a very large friction coefficient to simulate the two examples shown in Figure 4a and Figure 4b. As the ball translates a specified distance over numerous timesteps along the single facet (Figure 4b), the shear force incrementally accumulates. As the active contact transitions from one facet to another in the multi-facet example (Figure 4a), one is faced with the problem of enforcing continuity in contact-state information in order for the two examples to yield identical results. No continuity in contact-state information, for instance, will lead to the loss of shear force in this situation as the ball moves. Contact-state information is only propagated when in “full” resolution mode. Suppose that the contact-state information is retained during one contact-resolution session when a contact state is switched from active to inactive (e.g., contact normal, wall contact point, contact point, force, moment, etc.). Take the configuration shown in Figure 9a and Figure 9b to correspond with the model state at time \(t\) (\(t + 1\) or incremented by one timestep). \(C_b\) is active at time \(t\), and \(C_d\) is active at time \(t + 1\). Suppose also that the wall facet normals are given by \(\textbf{n}_b\) and \(\textbf{n}_d\) for facets \(b\) and \(d\), respectively. The angle between these facet normal vectors is given by \(\theta = \arccos(\textbf{n}_b \cdot \textbf{n}_d)\). Let the user define the cutoff angle \(\Theta \geq 0\) for all wall interactions with a specific wall. Should \(\theta \leq \Theta\) and no holes exist between the two facets in question, the non-geometric contact-state information is propagated (e.g., all information but not the normal, wall contact point, contact point, etc.). Each contact model defines the process by which the contact-state information is propagated, and this state information can only be propagated between contacts utilizing the same contact models. For the linearbond contact model, the forces are moments added to the currently stored values. The term hole is used to define two conditions: 1) a continuous path cannot be constructed via facet adjacency information between two facets where each facet along the path must intersect the plane containing the wall contact points at subsequent timesteps, \(WP_b\) and \(WP_d\), with normal perpendicular to the average contact normal; or 2) the angle between \(\textbf{n}_b\) and one of the facets along the path is greater than \(\Theta\). In this example, \(\theta = 0\) and a continuous path can be constructed from facets \(b \rightarrow c \rightarrow d\) with no holes; thus the contact-state information is copied from \(S_b\) to \(S_d\).
The associative logic is used as a proxy for path construction. If no links exist between a previously active contact and a contact that has been deemed active by the contact resolution scheme, then the contact-state information is not propagated. For instance, the cases shown in the next figure are easily handled without any direct path construction, due to the associative logic.
Continuity of Contact-State Information at Concave Edges – Proximity Contacts
Suppose that a ball approaches a concave edge as shown in Figure 6a. Take these snapshots as subsequent timesteps of a simulation. Application of the algorithm described in the previous section results in the contact-state information being copied from \(C_b\) to \(C_c\) for the configuration in Figure 6b. Assume that \(\arccos(\textbf{n}_b \cdot \textbf{n}_d), \arccos(\textbf{n}_c \cdot \textbf{n}_d) \leq \Theta\). There is no propagation of state information to \(C_d\). In Figure 6c, \(C_c\) has become inactive and the associated contact-state information has been lost, given the rules outlined above. In order to accommodate the need for continuity of state information across concave facet edges, the algorithm is augmented by the following rule: any two active contacts where the angle between facet normals is less than \(\Theta\) (\(C_d\) and \(C_d\) in Figure 6b) are combined into a single, active proximity contact. Only the proximity contact (PC) accumulates force/moment. The PC has a normal equal to the overlap weighted normal, for example,
with overlap equal to the average overlap. Once a proximity contact has been created, contacts with facets adjacent to those included in the proximity contact are checked for inclusion in the proximity contact. Thus contacts with facets adjacent to those included in a proximity contact where 1) there is a positive overlap and 2) where the minimum angle between any facet normal of facets in the proximity contact are added to a proximity contact. Once a contact overlap is negative, the contact is removed from the proximity contact.
The PC logic also has an impact on the resulting contact configuration of the example presented in Figure 7. Application of the algorithm will reduce the number of active contacts considerably, depending on the value of \(\Theta\) assigned by the user.
Was this helpful? ... | PFC © 2021, Itasca | Updated: Feb 25, 2024 |