PFC 7.0 is available now as a pre-release. Features in this version open new realms of possibilities for granular, manufacturing, and soil simulation applications as well as bonded-block modeling (BBM), including fragmentation.
The latest version of PFC provides major enhancements for modeling capabilities, faster solutions with multi-threaded FISH, and many new contact models.
Rigid Block Enhancements
In addition to improved computational performance, rigid blocks have been enhanced so that it's possible to:
- Cut rigid blocks during cycling, retaining contacts
- Easily apply rigid block boundary conditions
- Simplify model creation via facet groups
- Densify rigid blocks via cutting
Generalized Clump Logic
The clumping logic has been generalized, allowing collections of balls and/or convex rigid blocks to be clumped together. This logic permits:
- Modeling concave shapes with rigid blocks instead of pebbles. For example, models composed of the dolos object shown below (left and center) requires about the same modeling time as the clump (right), but does not suffer from bumpy surfaces and normal stiffness issues
- Improved simulations of fragmentation; clumps (including rigid blocks) can now break (e.g., pebbles may be freed from clumps during cycling) without losing the contact information
- The clump inertia tensor and volume computations are now multi-threaded
An inlet logic has been added to simplify model generation by feeding balls, clumps, or rigid blocks into the model
- Uses the brick logic to pre-define a collection of objects
- Can specify inlet flow rates, positions, and orientations
- Translate and rotate inlets at defined velocities during cycling
The FISH scripting language is now multi-threaded, resulting in much faster execution of FISH functions. This an important new feature in PFC 7 as FISH is commonly used during model cycling. To take full advantage of multi-threaded FISH, a new LIST data type, SPLITTING syntax, and OPERATORS have been added.
Lists are one-dimensional arrays of general FISH values. They differ from matrices in that each index can hold any valid FISH type (including another list). They differ from arrays in that they are passed by value, and they can only be of one dimension. You can iterate through all the elements of a list using the loop foreach statement. The access operator -> can be applied to lists, which permits the retrieval or assignment of an element and returns another list.
FISH splitting allows a function, operator, or library call to be executed repeatedly on each element of an aggregate type (a list, an array, a container of objects, etc). Splitting is executed on all available threads. Splitting can be used as an alternative to loop statements to perform actions on many objects in a very clear and concise manner.
FISH operators are a special class of function designed to be executed in a multi-threaded environment.
On a repeated function call made using splitting, if the symbol was declared as an operator these separate executions will be distributed on all available threads (see the
program threads command). On a typical modern multi-core computer and a large set of data this can result in a very large increase in speed.
One of the most common and important uses of FISH operators—indeed their primary reason for being—is to use during cycling. Otherwise a single threaded FISH function that checks or changes all objects in a model will easily dominate the run time of the system.
The following 3DEC 7 example illustrates the use of FISH operators.
New Contact Models
Edinburgh-Elasto-Plastic-Adhesive (EEPA) Contact Model
The Edinburgh-Elasto-Plastic-Adhesion (EEPA) contact model is an extension of the linear hysteretic model by Walton and Braun(1986), by allowing tensile forces to develop and also allowing for non-linear force-displacement behavior in compression. The implementation of this model in PFC is based on the work from Morrisey (2013).
Johnson-Kendall-Roberts (JKR) Contact Model
The Johnson-Kendall-Roberts (JKR) contact model is an extension of the well-known Hertz contact model proposed by Johnson (1971). The model accounts for attraction forces due to van der Waals effects. The model is, however, also used to model material where the adhesion is caused by capillary or liquid-bridge forces as discussed by Hærvig (2017), Carr (2016), Morrisey (2013), and Xia et al. (2019).
Spring Network Contact Model
The spring network contact model is an elastic continuum with connected rigid blocks for a hybrid lattice/DEM approach for bonded block modeling (BBM) of rock.
The formulation is similar to the parallel-bond or soft-bond contact models, but also offers:
- Control over stress heterogeneity via the stiffness properties
- No property calibration is needed. Corrections are automatically applied to contact forces based on the current average stress tensor of the contacting blocks and the elastic behavior of the blocks (macroscopic Young's modulus and Poisson's ratio)
There is also the potential to extend this contact model to follow non-linear, non-isotropic, elasto-plastic constitutive laws.
FISH Contact Model
The FISH contact model can be used to facilitate contact model development. The FISH scripting language provides a powerful tool for adding custom physics. This contact model is a blank slate for users to implement their own contact physics via a FISH function. The function must take nine arguments which are filled inside the force-displacement computation. The FISH function must modify the contact model force and/or moment. If effective stiffnesses are provided, then the timestep is determined automatically. C++ contact models and FISH intrinsics are still available.
Contact extra variables or global FISH symbols can be used to manage the contact model properties. It is also strongly suggested that the contact property indices (see
contact.prop.index) be used to set the properties in the FISH model while cycling, as string properties increase modeling times significantly.
And More ....
- Stress installation schemes for ball and rigid block packings
- Support for the SOLVE CONVERGENCE command. This is a solve limit based on the maximum convergence value of all contacts in the model. The convergence value for a contact is defined as the ratio of the current mechanical force ratio to the target force ratio of the contact.
- PFC 7 for Linux OS is under development for the release version. This is especially useful for deployment on AWS and on high-performance Linux computers.