(Part A) Set up and run a simulation that uses the 1-Way Constant CFD Coupling method.
(Part B) Use multiple, nested user processes to create a Cumulative Mass Field in order to understand how the fertilizer particles are distributed by the spreader.
The main purpose of this tutorial is to learn how to set up a simulation that uses the 1-Way Constant CFD Coupling method.
The scenario considered is evaluating the performance of a crop spreader, such as those used for broadcasting seed or fertilizer onto fields.
You will learn how to:
Define a rotation motion
Set up CFD Coupling using the 1-Way Constant method
Set custom domain limits
And you will use these features:
Motion Frames
CFD Coupling
Domain Settings
Important: This ADVANCED tutorial contains fewer details, screenshots, and procedures than other Rocky tutorials.
An ADVANCED tutorial is designed for users who are more familiar with the Rocky user interface (UI), and already have a good understanding of the common setup and post-processing tasks.
If you do not already have this level of familiarity, it is recommended that you complete at least Tutorials 01- 05 before beginning this one.
The geometries in this tutorial are composed of:
(1) Spreader
(2) Walls
In the tutorial directory, the .stl files can be found.
Note: Due to the relatively high particle count expected for this tutorial, no geometry representing the ground will be included.
This allows us to speed up processing by reducing the amount of particles that remain active in the simulation while still allowing us to see the full spreading effects.
To get started with this tutorial, do the following:
Download the
dem_tut20_files.zip
file here .Unzip
dem_tut20_files.zip
to your working directory.Open Rocky 2025 R2.
Create a new project.
Save the empty project to a location of your choosing.
Use the information in the tables that follow to start setting up your Rocky project.
Tip: If you run into settings or procedures in these tables that you are not yet familiar with, please refer to the Rocky User Manual and/or other Tutorials to find the detailed instructions you need.
Step Data Entity Editors Location Parameter or Action Settings A Study <01> Study Study Name Spreader B Geometries Import Wall Spreader.stl and Wall.stl with "m" for Import Unit Create Rectangular Surface C Geometries ﹂Rectangular Surface <01>
Rectangular Surface Center Coordinates -0.11, 0.15, 0 [m] Length 0.05 [m] Width 0.04 [m] D Motion Frames Create Motion Frame E Motion Frames ﹂Frame <01>
Frame Name Rotation Motion Add motion Motions | Type Rotation ⯆ … | Initial Angular Velocity 0, 810, 0 [rev/min] F Geometries ﹂Spreader
Wall Motion Frame Rotation Motion ⯆ G Materials ﹂Default Boundary
Material Young's Modulus 1e+08 [N/m2] H Materials ﹂Default Particles
Material Use Bulk Density (Cleared) Density 1000 [kg/m3] Young's Modulus 1e+06 [N/m2] I Particles Create Particle J Particles ﹂Particle <01>
Particle Name 3mm Size 0.003 [m] @ 100% K Particles Create Particle L Particles ﹂Particle <01>
Particle Name 4mm Size 0.004 [m] @ 100% M Inlets and Outlets Create Particle Inlet N Inlets and Outlets ﹂Particle Inlet <01>
Particle Inlet Entry Point Rectangular Surface <01> ⯆ Particle Inlet | Particles Add row (x2) (1) Particle | Mass Flow Rate 3mm ⯆ 0.6 [t/h] (2) Particle | Mass Flow Rate 4mm ⯆ 1.2 [t/h]
For this tutorial, we want the particles to be spread over the domain in the presence of still (non-moving) air.
In this case, the particles will experience air resistance when launched.
The images below show how important is to consider air resistance in this scenario.
A simulation without air resistance results in particles spreading much farther than when air resistance is considered in the project.
To represent this behavior, we will make use the 1-Way Constant CFD coupling method, which has the following key benefits:
Useful in cases where you have a known, unchanging fluid field.
Does not require a separate CFD program. (The functionality is included in Rocky.)
Enables you to define constant values for density, velocity, viscosity and (optional) thermal properties.
Define this coupling method by doing the following:
From Study, click Enable CFD Coupling and select 1-Way Constant (Fluid > Particle) from the Coupling Mode list (as shown).
From the Data panel, select the newly created 1-Way Constant item.
From the Interactions tab, select the 3mm item from the Particle list (as shown).
The CFD Laws that can be set for the selected particle group will appear.
For this tutorial, the CFD Laws for both particle groups will be left as they were set by default. (No changes.)
Select the Fluid Flow tab.
Since we want to simulate still air and the default values already represent this condition, no changes will be made.
Use the information in the table that follows to continue setting up your Rocky project.
Step Data Entity Editors Location Parameter or Action Settings A Domain Settings Domain Settings Use Boundary Limits (Cleared) Min Values -3,-1, -1 [m] Max Values 7, 1, 9 [m] B Solver Solver | Time Simulation Duration 2 [s] Solver | General Output Settings | Time Interval 0.005 [s] Simulation Target CPU ⯆
With a 3D View window opened, your Data panel and Workspace should look similar to the below image.
From the Solver entity, click Start.
The Simulation Summary screen appears (as shown), then processing begins.
Tip: You can use the Auto Refresh checkbox to view in a 3D View window the results during processing.
This completes Part A of this tutorial, during which Rocky was used to set up and process a Fertilizer Spreader simulation.
During this tutorial, it was possible to:
Use Motion Frames to set up a rotation motion.
Set up the 1-Way Constant method of CFD Coupling.
Define custom Domain Settings limits.
What's Next? If you completed this tutorial successfully, then you are ready to move on to Part B and post-process this project.
The main purpose of this tutorial is to learn how to use multiple, nested user processes to understand how the fertilizer particles are distributed by the spreader we simulated earlier in Part A.
Part B will continue from where Part A left off.
You will learn how to:
Layer multiple, nested User Processes to achieve a specific result.
Create a custom property for Eulerian Statistics.
And you will use these features:
User Processes, including:
Cube
Filter
Particles Time Selection
Eulerian Time Statistics
Important: This ADVANCED tutorial contains fewer details, screenshots, and procedures than other Rocky tutorials.
An ADVANCED tutorial is designed for users who are more familiar with the Rocky user interface (UI), and already have a good understanding of the common setup and post-processing tasks.
If you do not already have this level of familiarity, it is recommended that you complete at least Tutorials 01- 05 before beginning this one.
If you completed Part A of this tutorial, ensure that project is open in Rocky. The Part B will continue from where Part A left off.
If you did not complete the project from Part A, do all of the following:
Download the
dem_tut20_files.zip
file here .Unzip
dem_tut20_files.zip
to your working directory.Open Rocky 2025 R2.
Important: To make use of the Rocky project file provided, you must have Rocky 2025 R2 or later. If you have an earlier version of Rocky, please upgrade Rocky to the latest version, or complete Part A from scratch.
From the Rocky program, click the Open Project button, find the dem_tut20_files folder, then from the tutorial_20_A_pre-processing folder, open the tutorial_20_A_pre-processing.rocky file.
Process the simulation. (From the Solver entity, click the Start button.)
Once the simulation finishes processing, you are ready to start Part B.
In this tutorial, we want to understand how the Fertilizer Spreader distributes the particle mass throughout the domain.
To do that, we will create a Cumulative Mass Field to see how different regions of the domain receive different amounts of particle mass.
To evaluate the performance of the spreader, it is useful to measure the fertilizer distribution across the entire crop area.
The Cumulative Mass Field that results from the spreader operating at steady-state as simulated in this tutorial can be used to extrapolate the mass distribution across the entire crop field.
To accomplish the cumulative mass field, we will need to layer different User Processes on top of each other.
We will make use of four User Processes to do this:
(1) Particles Time Selection
(2) Cube (on top of Particles Time Selection)
(3) Eulerian Statistics (on top of Cube)
(4) Filter (on top of Eulerian Statistics)
But before we create our first layer, we need to choose a period of time for the analysis. Specifically:
We will choose a period of time in which the system is in a steady-state.
In other words, the amount of particles being injected is approximately the same amount of particles leaving the domain.
We can obtain that information by plotting the Particles Count and then selecting a period of time in which the curve is stable.
From the Particles entity, on the Curves tab, right-click Particles Count, and then click Show curve in new Plot.
Press the Shift key while left-clicking the top of the Curve to see the values (as shown).
We can see that steady-state is reached after about 0.7 (s).
We now know that for our analysis, we want to select a time period after this point.
We want to analyze how the particles would be distributed on the ground.
However, to speed up the processing time in Part A, we did not include a geometry representing the ground; therefore, the particles in this tutorial leave the domain soon after they fall far enough in the Y direction.
In a case like this, a good approach is to analyze the mass distribution in a layer right before the particles leave the domain.
To accomplish this, we will define a Particles Time Selection, which in this case, will record the last position of every particle that passed inside the domain within a particular time range.
Note: A Particles Time Selection can also be applied to a particular region, such as a Cube or Cylinder.
Furthermore, the particles that left the domain due to the absence of a ground geometry will be recorded very close to the bottom of the domain. This is similar to where the particles would be if they were actually on the ground.
Now, we are going to select all the particles that passed through the domain during the 1s to 2s period. (Based upon earlier measurements, we know this is during steady state.)
Use the information in the table below to create the first layer of this analysis.
Step Data Entity Editors Location Parameter or Action Settings A Particles Create a Particle Times Selection User Processes B User Processes ﹂Particles Time Selection <01>
Time Selection Domain Range Time Range ⯆ Initial 1 [s] Final 2 [s] Open a 3D View by pressing Ctrl+D.
By default, particles are displayed in Automatic/Rich mode, which displays the fully-rendered particles at their original size.
At this domain view, the particles are much too small to see, so we will change to Simple mode, which will render the particles as fixed-sized points instead.
We will also reduce the size of the points in the view for better visibility.
From the Data Editors panel, select the Coloring tab, and then do both of the following (as shown):
Ensure Visible is enabled.
From the Level of Detail list, select Simple.
Under Nodes, define the Point size as 2.
The 3D View now shows all the particles that passed through the domain from 1s to 2s.
Each particle was recorded in its last position either just prior to its leaving the domain or wherever it was at the last timestep, including any particles that were still traveling through the air at that time.
We want to generate a Mass Field to analyze the distribution of particles on the ground. Thus, we must exclude the particles that were still traveling through the air during the last time step.
Therefore, we are going to create a Cube user process over Particles Time Selection <01> to select only the layer of particles closest to the ground.
Use the information in the table below to create the second layer of this analysis.
Step Data Entity Editors Location Parameter or Action Settings A User Processes ﹂Particles Time Selection <01>
Create a Cube User Process B User Processes Cube <01>
Cube Center 2, -0.95, 4 [m] Magnitude 20, 0.1, 20 [m] Coloring Level of Detail Simple ⯆ Nodes | Point Size 2 [ - ] From the Data panel, hide Particles Time Selection <01> from the view.
The 3D View now shows the particles of the Particles Time Selection <01> that are next to the ground, inside the Cube <01>.
In order to generate a Mass Field from these selected particles, we need to create a Eulerian Statistics User Process over the Cube we just created.
Use the information in the table below to create the third layer in this analysis.
Step Data Entity Editors Location Parameter or Action Settings A User Processes ﹂Cube <01>
Create a Eulerian Statistics User Process B User Processes ﹂Eulerian Statistics <01>
Eulerian Statistics Width Divisions 20 [ - ] Heigth Divisions 1 [ - ] Depth Divisions 20 [ - ]
Next, to compute the particle mass in each Eulerian Statistics cell, we must add a new property, derived from Particles.
Use the information in the table below to continue with this analysis.
Step Item Location Parameter or Action Settings A User Processes ﹂Eulerian Statistics <01>
Properties Add and edit properties for source entity (button) B Add or edit eulerian properties (dialog box) Add property (button) C Add new property (dialog box) Operation Sum ⯆ Particle Property Particle Mass ⯆ Add property (button) From the Data Editors panel, on the Properties tab, drag-and-drop the newly created Sum of Particle Mass onto the 3D View.
Tip: You may need to use the eye icons on the Data panel to hide the other User Processes.
Now we will filter the resulting Cumulative Mass Field to show only where the particle mass is above a specific value.
To achieve that, we are going to apply a Filter User Process over the Eulerian Statistics.
Use the information in the table below to create the fourth layer in this analysis.
Step Data Entity Editors Location Parameter or Action Settings A User Processes ﹂Eulerian Statistics <01>
Create a Filter User Process B User Processes ﹂Filter <01>
Filter Property Sum of Particle Mass ⯆ Mode Cut ⯆ Type Range ⯆ Minimum Value 0.001 [kg] Maximum Value 1 [kg]
From the Filter <01> entity, select the Properties tab, select Sum of Particle Mass, and then drag-and-drop it onto the 3D View. (Results shown.)
Tip: Hide Eulerian Statistics <01> by using its Data panel eye icon.
We can then smooth out the faces visualization of the property by enabling Show on Node option.
From the Data Editors panel, select the Coloring tab, enable the Show on Node? checkbox, and then clear the Edges checkbox.
Instead of simulating distribution across the entire crop field, which might require running costly simulations using millions of particles, simulating a steady-state field like we have done in this tutorial can be used to reduce computational time.
Additional analyses can be achieved in the following ways:
Superpose this same field along several points of the trajectory to generate the mass distribution across the entire crop field.
Use the PrePost Scripting functionality to extract the values of each cell and then develop a Python script that computes the trajectory and superposed computations.
This completes Part B of this tutorial, which makes use of Rocky to analyze how a Fertilizer Spreader distributes particles throughout the domain.
During this tutorial, it was possible to:
Layer multiple User Processes to achieve a specific result.
Create a custom property for Eulerian Statistics.
What's Next? If you completed this tutorial successfully, then you are ready to move on to next tutorial.