|
Like the previous tutorials, this one demonstrates how the StressStrainControlBoundary works on the simple shear deformation mode. Here in the example we keep a constant shear rate in x direction while try to maintain a constant stress in y direction. We generate a loose initial packing by randomly inserting the particles into the cuboid, then tell the boundary that we need to keep constant shear rate in x direction with a velocity gradient in y direction. We also tell the boundary that we need to have stress in y direction to reach 100 (the actual unit depends on your scaling of other parameters, if you use SI-unit, i.e. second, metre, kilogram, for all the other parameters, then the stress will be Pascal) and be kept there at close as possible to the target value during the shearing. Note that in the current settings, the particles are following affine movements in a strainrate control. You could also set the strainrate control to false, then the boundary will drag the particles to move.
Here is a short video of the code's output.
The following headers are included:
These are the necessary headers to be included, they are the same as the other REV tutorials.
Like the previous example of isotropic compression, simple shear also inherits from the Mercury3D class.
The different components of the class will be explained in turn in the following.
Step 1: Define the constructor:
Here we first define the constructor that contains user inputs (target stress, strainrate, gainFactor and the switch Boolean key for strainrate control on particle movements) which will be inserted later on in the main function. Then we define here also the domain size and specie.
Step 2: Set up initial conditions:
Here we setup the system dimensions, timestepping and gravity, then add particles using the CubeInsertionBoundary. After we inserted 96 particles, we then setup the StressStrainControlBoundary using user inputs. For the current case, the final boundary consists of 3 Periodic boundaries in x, y, z directions, respectively.
Step 3: Declare private data members:
REV_IsotropicCompression has three Matrix3D variables and one Boolean variable. These variables are used to pass the user inputs via the constructor.
In the main function, we first define the target stress tensor, strainrate tensor, gainFactor tensor (this is associated with the stress control and could be tunned accordingly), and the boolean variable isStrainRateControlled.
Then a StressStrainControl object is created, after which some of its basic properties are set like its name, saveCount and outputs ON/OFF. Finally, the problem is actually solved by calling its solve() method.
Note that for tuning the gainFactor, if the value is too large, then the stress control correction magnitude is too large, resulting in over correction, or if it is too small, then the correction per timestep is too small then you never reach the target stress value. This gain factor is also associated with the shear rate, because the faster you shear, the higher stress difference is created per timestep, then the corresponding correction on the stress has also to be large. However, one has to bear in mind that if the shear deformation is in similar magnitude as the stress control magnitude, i.e. you move the particle in both shear (x) and stress control (y) directions in similar displacement per timestep, it might cause resonance effect resulting in the oscillation in the stress field.
In the current example, we have set the isStrainRateControlled = true, this means we move particles everytime step using affine movement according to the strainrate tensor. This is because we want to shear everything in a more homogenous way and it will reach steady state faster. If you choose to use boundary movement dragging the particles, then simply set this boolean to false.
The current setup also moves the boundary with its strainrate control, therefore the volume is not conserving. If user would like to have a constant volume shearing, simply set the target stress tensor to zero (this case set target stress in y direction to 0).
Imole, O. I., Kumar, N., Magnanimo, V., & Luding, S. (2013). Hydrostatic and shear behavior of frictionless granular assemblies under different deformation conditions. KONA Powder and Particle Journal, 30, 84-108.
Shi, H., Roy, S., Weinhart, T., Magnanimo, V., & Luding, S. (2020). Steady state rheology of homogeneous and inhomogeneous cohesive granular materials. Granular matter, 22(1), 14.
If you would like to know more about the definitions used in the StressStrainControlBoundary and various deformation possibilities, please click here (right click and open in a new tab if left click does not work): StressStrainControlBoundary.pdf
(Return to Overview of advanced tutorials)