Merge pull request #114 from ramin1728/main

binary system of particles tutorial is updated
This commit is contained in:
Hamidreza Norouzi 2024-05-28 13:33:29 +03:30 committed by GitHub
commit 8ee1fe63e6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
18 changed files with 174 additions and 177 deletions

View File

@ -1,6 +1,6 @@
# Problem definition
A rotating drum with two particle sizes is randomly filled and let it rotate to see the segregation of particles.
The focus of this tutorial is to show how to use the pre-processing tool, `particlesPhasicFlow`, to create the initial mixture of small and large particles.
A rotating drum is randomly filled with two particle sizes and rotated to observe particle segregation. The focus of this tutorial is to show how to use the preprocessing tool `particlesPhasicFlow` to create the initial mixture of small and large particles.
**Note:** It is supposed that you have reviewed [simulating a rotating drum](https://github.com/PhasicFlow/phasicFlow/wiki/Simulating-a-rotating-drum) tutorial before starting this tutorial.
@ -14,11 +14,13 @@ a view of the rotating drum with small and large particles after 7 seconds of ro
***
# Case setup
PhasicFlow simulation case setup is based on the text-based files that we provide in two folders located in the simulation case folder: `settings` and `caseSetup`. Here we will have a look at some important files and the rest can be found in the tutorial folder of this case setup.
In the file `caseSetup/sphereShape` two particle types with the names `smallSphere` and `largeSphere` and the diameters 3 and 5 mm are defined.
[Simulation case setup files can be found in tutorials/sphereGranFlow folder.](https://github.com/PhasicFlow/phasicFlow/tree/main/tutorials/sphereGranFlow/binarySystemOfParticles)
### Shape definition
In file `caseSetup/sphereShape`, two particle types with names `smallSphere` and `largeSphere` and diameters 3 and 5 mm are defined.
In the file `caseSetup/sphereShape` two particle types with the names `smallSphere` and `largeSphere` and the diameters 3 and 5 mm are defined.
<div align="center">
in <b>caseSetup/sphereShape</b> file
@ -31,7 +33,7 @@ materials (prop1 prop1); // material names for shapes
```
### Positioning and initial mixture
In dictionary `positionParticles` located in file `settings/particlesDict`, 30000 particles are located in a cylindrical region. These particles are positioned in order along `z`, `x` and then `y` axis with 0.005 m distance between their centers.
In the dictionary `positionParticles` located in file `settings/particlesDict`, 30000 particles are located in a cylindrical region. These particles are positioned in order along `z`, `x` and then `y` axis with 0.005 m distance between their centers.
<div align="center">
in <b>settings/particlesDict</b> file
@ -42,10 +44,16 @@ in <b>settings/particlesDict</b> file
// positions particles
positionParticles
{
method positionOrdered; // ordered positioning
method ordered; // other options: random or empty
maxNumberOfParticles 30001; // maximum number of particles in the simulation
mortonSorting Yes; // perform initial sorting based on morton code?
orderedInfo
{
diameter 0.005; // minimum space between centers of particles
numPoints 30000; // number of particles in the simulation
axisOrder (z x y); // axis order for filling the space with particles
}
regionType cylinder; // other options: box and sphere
cylinder // cylinder region for positioning particles
{
@ -53,17 +61,9 @@ positionParticles
p2 (0.0 0.0 0.097); // end point of cylinder axis (m m m)
radius 0.117; // radius of cylinder (m)
}
positionOrderedInfo
{
diameter 0.005; // minimum space between centers of particles
numPoints 30000; // number of particles in the simulation
axisOrder (z x y); // axis order for filling the space with particles
}
}
```
In dictionary `setFields` located in file `settings/particlesDict`, you define the initial `velocity`, `acceleration`, `rotVelocity`, and `shapeName` fields for all 30000 particles in the simulation. In `selectors` dictionary, you can select subsets of particles and set the field value for these subsets. In `shapeAssigne` sub-dictionary, the `selectRange` selector is defined. It defines a range with `begin` (begin index), `end` (end index) and `stride` to select particles. And in `fieldValue` sub-dictionary, the fields values for selected particles are set (any number of field values can be set here).
In the `setFields` dictionary, located in the `settings/particlesDict` file, you define the initial `velocity`, `acceleration`, `rotVelocity` and `shapeName` fields for all 30000 particles in the simulation. In the `selectors' dictionary, you can select subsets of particles and set the field value for those subsets. The `selectRange` selector is defined in the `shapeAssigne` subdictionary. It defines a range with `begin`, `end` and `stride` to select particles. And in the `fieldValue` subdictionary the field values for selected particles are set (any number of field values can be set here).
**Note:** Other selectors are: `selectBox` that selects particles inside a box and `randomSelect` that selects particles randomly from a given index range.
@ -77,7 +77,8 @@ setFields
/*
Default value for fields defined for particles
These fields should always be defined for simulations with
spherical particles.*/
spherical particles.
*/
defaultValue
{
@ -91,8 +92,9 @@ setFields
{
shapeAssigne
{
selector selectRange; // type of point selector
selectRangeInfo
selector stridedRange; // other options: box, cylinder, sphere, randomPoints
stridedRangeInfo
{
begin 0; // begin index of points
end 30000; // end index of points
@ -101,10 +103,10 @@ setFields
fieldValue // fields that the selector is applied to
{
/*
sets shapeName of the selected points to largeSphere*/
sets shapeName of the selected points to largeSphere
*/
shapeName word largeSphere;
}
}
}

View File

@ -6,47 +6,46 @@ objectName interaction;
objectType dicrionary;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
materials (prop1); // properties of material
materials (prop1); // properties of material
densities (1000.0); // density of materials [kg/m3]
densities (1000.0); // density of materials [kg/m3]
contactListType sortedContactList;
contactListType sortedContactList;
contactSearch
{
method NBS; // method for broad search
method NBS; // method for broad search
updateInterval 10;
updateInterval 10;
sizeRatio 1.1;
sizeRatio 1.1;
cellExtent 0.55;
adjustableBox Yes;
adjustableBox Yes;
}
model
{
contactForceModel nonLinearNonLimited;
contactForceModel nonLinearNonLimited;
rollingFrictionModel normal;
rollingFrictionModel normal;
// Property (solid-solid Properties)
Yeff (1.0e6); // Young modulus [Pa]
Yeff (1.0e6); // Young modulus [Pa]
Geff (0.8e6); // Shear modulus [Pa]
Geff (0.8e6); // Shear modulus [Pa]
nu (0.25); // Poisson's ratio [-]
nu (0.25); // Poisson's ratio [-]
en (0.7); // coefficient of normal restitution
en (0.7); // coefficient of normal restitution
et (1.0); // coefficient of tangential restitution
et (1.0); // coefficient of tangential restitution
mu (0.3); // dynamic friction
mu (0.3); // dynamic friction
mur (0.1); // rolling friction
mur (0.1); // rolling friction
}

View File

@ -6,9 +6,6 @@ objectName particleInsertion;
objectType dicrionary;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
active No; // is insertion active -> yes or no
collisionCheck No; // is checked -> yes or no
collisionCheck No; // is checked -> yes or no
active No; // is insertion active -> yes or no

View File

@ -6,9 +6,8 @@ objectName sphereDict;
objectType sphereShape;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
names (smallSphere largeSphere); // names of shapes
names (smallSphere largeSphere); // names of shapes
diameters (0.003 0.005); // diameter of shapes
diameters (0.003 0.005); // diameter of shapes
materials (prop1 prop1); // material names for shapes
materials (prop1 prop1); // material names for shapes

View File

@ -6,11 +6,11 @@ objectName domainDict;
objectType dictionary;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
globalBox // Simulation domain: every particles that goes outside this domain will be deleted
globalBox // Simulation domain: every particles that goes outside this domain will be deleted
{
min (-0.12 -0.12 0);
min (-0.12 -0.12 0);
max (0.12 0.12 0.1);
max (0.12 0.12 0.1);
}
decomposition
@ -23,41 +23,41 @@ boundaries
// Determines how often (how many iterations) do you want to
// rebuild the list of particles in the neighbor list
// of all boundaries in the simulation domain
neighborListUpdateInterval 50;
neighborListUpdateInterval 50;
// Determines how often do you want to update the new changes in the boundary
updateInterval 10;
updateInterval 10;
// The distance from the boundary plane within which particles are marked to be in the boundary list
neighborLength 0.004;
neighborLength 0.004;
left
{
type exit; // other options: periodict, reflective
type exit; // other options: periodict, reflective
}
right
{
type exit; // other options: periodict, reflective
type exit; // other options: periodict, reflective
}
bottom
{
type exit; // other options: periodict, reflective
type exit; // other options: periodict, reflective
}
top
{
type exit; // other options: periodict, reflective
type exit; // other options: periodict, reflective
}
rear
{
type exit; // other options: periodict, reflective
type exit; // other options: periodict, reflective
}
front
{
type exit; // other options: periodict, reflective
type exit; // other options: periodict, reflective
}
}
}

View File

@ -6,17 +6,17 @@ objectName geometryDict;
objectType dictionary;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
motionModel rotatingAxis; // motion model can be rotatingAxis or stationary or vibrating
motionModel rotatingAxis; // motion model can be rotatingAxis or stationary or vibrating
rotatingAxisInfo // information for rotatingAxis motion model
rotatingAxisInfo // information for rotatingAxis motion model
{
rotAxis
{
p1 (0.0 0.0 0.0); // first point for the axis of rotation
p1 (0.0 0.0 0.0); // first point for the axis of rotation
p2 (0.0 0.0 1.0); // second point for the axis of rotation
p2 (0.0 0.0 1.0); // second point for the axis of rotation
omega 1.214; // rotation speed (rad/s)
omega 1.214; // rotation speed (rad/s)
}
}
@ -24,21 +24,21 @@ surfaces
{
cylinder
{
type cylinderWall; // type of the wall
type cylinderWall; // other options: cuboidWall and planeWall
p1 (0.0 0.0 0.0); // begin point of cylinder axis
p1 (0.0 0.0 0.0); // begin point of cylinder axis
p2 (0.0 0.0 0.1); // end point of cylinder axis
p2 (0.0 0.0 0.1); // end point of cylinder axis
radius1 0.12; // radius at p1
radius1 0.12; // radius at p1
radius2 0.12; // radius at p2
radius2 0.12; // radius at p2
resolution 24; // number of divisions
resolution 24; // number of divisions
material prop1; // material name of this wall
material prop1; // material name of this wall
motion rotAxis; // motion component name
motion rotAxis; // motion component name
}
/*
@ -47,19 +47,19 @@ surfaces
wall1
{
type planeWall; // type of the wall
type planeWall; // other options: cuboidWall and cylinderWall
p1 (-0.12 -0.12 0.0); // first point of the wall
p2 ( 0.12 -0.12 0.0); // second point of the wall
p2 (0.12 -0.12 0.0); // second point of the wall
p3 ( 0.12 0.12 0.0); // third point of the wall
p3 (0.12 0.12 0.0); // third point of the wall
p4 (-0.12 0.12 0.0); // fourth point of the wall
p4 (-0.12 0.12 0.0); // fourth point of the wall
material prop1; // material name of the wall
material prop1; // material name of the wall
motion rotAxis; // motion component name
motion rotAxis; // motion component name
}
/*
@ -68,20 +68,18 @@ surfaces
wall2
{
type planeWall; // type of the wall
type planeWall; // other options: cuboidWall and cylinderWall
p1 (-0.12 -0.12 0.1); // first point of the wall
p2 ( 0.12 -0.12 0.1); // second point of the wall
p2 (0.12 -0.12 0.1); // second point of the wall
p3 ( 0.12 0.12 0.1); // third point of the wall
p3 (0.12 0.12 0.1); // third point of the wall
p4 (-0.12 0.12 0.1); // fourth point of the wall
p4 (-0.12 0.12 0.1); // fourth point of the wall
material prop1; // material name of the wall
material prop1; // material name of the wall
motion rotAxis; // motion component name
motion rotAxis; // motion component name
}
}

View File

@ -9,9 +9,8 @@ fileFormat ASCII;
setFields
{
/*
Default value for fields defined for particles
These fields should always be defined for simulations with
spherical particles.
Default value for fields defined for particles:
These fields should always be defined for simulations with spherical particles
*/
defaultValue
@ -72,5 +71,3 @@ positionParticles // positions particles
radius 0.117; // radius of cylinder
}
}

View File

@ -6,29 +6,30 @@ objectName settingsDict;
objectType dictionary;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
run binarySystemofParticles;
run binarySystemofParticles;
dt 0.00001; // time step for integration (s)
dt 0.00001; // time step for integration (seconds)
startTime 0; // start time for simulation
startTime 0.0; // start time for simulation
endTime 10; // end time for simulation
endTime 10.0; // end time for simulation
saveInterval 0.1; // time interval for saving the simulation
saveInterval 0.1; // time interval for saving the simulation
timePrecision 6; // maximum number of digits for time folder
timePrecision 6; // maximum number of digits for time folder
g (0 -9.8 0); // gravity vector (m/s2)
g (0 -9.8 0); // gravity vector (m/s2)
// save necessary (i.e., required) data on disk
includeObjects (diameter);
// exclude unnecessary data from saving on disk
excludeObjects (rVelocity.dy1 pStructPosition.dy1 pStructVelocity.dy1);
integrationMethod AdamsBashforth2; // integration method
integrationMethod AdamsBashforth2; // integration method
writeFormat ascii; // data writting format (ascii or binary)
writeFormat ascii; // data writting format (ascii or binary)
timersReport Yes; // report timers
timersReport Yes; // report timers
timersReportInterval 0.01; // time interval for reporting timers
timersReportInterval 0.01; // time interval for reporting timers

View File

@ -6,9 +6,9 @@ objectName interaction;
objectType dicrionary;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
materials (lightMat heavyMat wallMat); // a list of materials names
materials (lightMat heavyMat wallMat); // a list of materials names
densities (1000 1500.0 2500); // density of materials [kg/m3]
densities (1000 1500.0 2500); // density of materials [kg/m3]
contactListType sortedContactList;
@ -37,33 +37,34 @@ model
wallMat-wallMat );
*/
Yeff (1.0e6 1.0e6 1.0e6 // Young modulus [Pa]
Yeff (1.0e6 1.0e6 1.0e6 // Young modulus [Pa]
1.0e6 1.0e6
1.0e6);
Geff (0.8e6 0.8e6 0.8e6 // Shear modulus [Pa]
Geff (0.8e6 0.8e6 0.8e6 // Shear modulus [Pa]
0.8e6 0.8e6
0.8e6);
nu (0.25 0.25 0.25 // Poisson's ratio [-]
nu (0.25 0.25 0.25 // Poisson's ratio [-]
0.25 0.25
0.25);
en (0.97 0.97 0.85 // coefficient of normal restitution
en (0.97 0.97 0.85 // coefficient of normal restitution
0.97 0.85
1.00);
et (1.0 1.0 1.0 // coefficient of tangential restitution
et (1.0 1.0 1.0 // coefficient of tangential restitution
1.0 1.0
1.0);
mu (0.65 0.65 0.35 // dynamic friction
mu (0.65 0.65 0.35 // dynamic friction
0.65 0.35
0.35);
mur (0.1 0.1 0.1 // rolling friction
mur (0.1 0.1 0.1 // rolling friction
0.1 0.1
0.1);
0.1);
}

View File

@ -6,9 +6,9 @@ objectName particleInsertion;
objectType dicrionary;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
active yes; // is insertion active -> yes or no
active Yes; // is insertion active -> yes or no
checkForCollision No; // is checked -> yes or no
checkForCollision No; // is checked -> yes or no
/*
one layers of particles are packed
@ -50,3 +50,5 @@ layer0

View File

@ -6,8 +6,10 @@ objectName sphereDict;
objectType sphereShape;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
names (lightSphere heavySphere); // names of shapes
names (lightSphere heavySphere); // names of shapes
diameters (0.007 0.007); // diameter of shapes
materials (lightMat heavyMat); // material names for shapes
diameters (0.007 0.007); // diameter of shapes
materials (lightMat heavyMat); // material names for shapes

View File

@ -1,12 +0,0 @@
/* -------------------------------*- C++ -*--------------------------------- *\
| phasicFlow File |
| copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */
objectName sphereDict;
objectType sphereShape;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
names (lightSphere heavySphere); // names of shapes
diameters (0.007 0.007); // diameter of shapes
materials (lightMat heavyMat); // material names for shapes

View File

View File

View File

@ -21,10 +21,10 @@ boundaries
neighborListUpdateInterval 30;
// Determines how often do you want to update the new changes in the boundary
updateInterval 10;
updateInterval 10;
// The distance from the boundary plane within which particles are marked to be in the boundary list
neighborLength 0.004;
neighborLength 0.004;
left
{
@ -55,4 +55,6 @@ boundaries
{
type exit; // other options: periodict, reflective
}
}
}

View File

@ -6,7 +6,7 @@ objectName geometryDict;
objectType dictionary;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
motionModel stationary; // motion model can be rotatingAxis or stationary or vibrating
motionModel stationary; // motion model can be rotatingAxis or stationary or vibrating
stationaryInfo
{
@ -17,36 +17,36 @@ surfaces
{
cylinderShell
{
type cylinderWall; // type of the wall
type cylinderWall; // other options: cuboidWall and planeWall
p1 (0.0 0.0 0.0); // begin point of cylinder axis
p1 (0.0 0.0 0.0); // begin point of cylinder axis
p2 (0.0 0.0 0.4); // end point of cylinder axis
p2 (0.0 0.0 0.4); // end point of cylinder axis
radius1 0.1; // radius at p1
radius1 0.1; // radius at p1
radius2 0.1; // radius at p2
radius2 0.1; // radius at p2
resolution 36; // number of divisions
resolution 36; // number of divisions
material wallMat; // material name of this wall
material wallMat; // material name of this wall
}
coneShell
{
type cylinderWall; // type of the wall
type cylinderWall; // other options: cuboidWall and planeWall
p1 (0.0 0.0 -0.1); // begin point of cylinder axis
p1 (0.0 0.0 -0.1); // begin point of cylinder axis
p2 (0.0 0.0 0.0); // end point of cylinder axis
p2 (0.0 0.0 0.0); // end point of cylinder axis
radius1 0.02; // radius at p1
radius1 0.02; // radius at p1
radius2 0.1; // radius at p2
radius2 0.1; // radius at p2
resolution 36; // number of divisions
resolution 36; // number of divisions
material wallMat; // material name of this wall
material wallMat; // material name of this wall
}
/*
@ -55,18 +55,22 @@ surfaces
exitGate
{
type planeWall; // type of the wall
type planeWall; // other options: cuboidWall and cylinderWall
p1 (-0.02 -0.02 -0.1); // first point of the wall
p1 (-0.02 -0.02 -0.1); // first point of the wall
p2 ( 0.02 -0.02 -0.1); // second point of the wall
p2 ( 0.02 -0.02 -0.1); // second point of the wall
p3 ( 0.02 0.02 -0.1); // third point of the wall
p3 ( 0.02 0.02 -0.1); // third point of the wall
p4 (-0.02 0.02 -0.1); // fourth point of the wall
p4 (-0.02 0.02 -0.1); // fourth point of the wall
material wallMat; // material name of the wall
material wallMat; // material name of the wall
}
}

View File

@ -16,13 +16,13 @@ setFields
defaultValue
{
velocity realx3 (0 0 0); // linear velocity (m/s)
velocity realx3 (0 0 0); // linear velocity (m/s)
acceleration realx3 (0 0 0); // linear acceleration (m/s2)
acceleration realx3 (0 0 0); // linear acceleration (m/s2)
rVelocity realx3 (0 0 0); // rotational velocity (rad/s)
rVelocity realx3 (0 0 0); // rotational velocity (rad/s)
shapeName word lightSphere; // name of the particle shape
shapeName word lightSphere; // name of the particle shape
}
selectors
@ -31,14 +31,15 @@ setFields
positionParticles // positions particles
{
method empty; // other options: ordered and random
method empty; // other options: ordered and random
regionType box; // other options: cylinder and sphere
regionType box; // other options: cylinder and sphere
boxInfo // box region for positioning particles
boxInfo // box region for positioning particles
{
min (-0.08 -0.08 0.015); // lower corner point of the box
min (-0.08 -0.08 0.015); // lower corner point of the box
max ( 0.08 0.08 0.098); // upper corner point of the box
max ( 0.08 0.08 0.098); // upper corner point of the box
}
}

View File

@ -6,29 +6,33 @@ objectName settingsDict;
objectType dictionary;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
run layerdSiloFilling;
run layerdSiloFilling;
dt 0.00001; // time step for integration (s)
dt 0.00001; // time step for integration (s)
startTime 0.0; // start time for simulation
startTime 0.0; // start time for simulation
endTime 5.0; // end time for simulation
endTime 5.0; // end time for simulation
saveInterval 0.05; // time interval for saving the simulation
saveInterval 0.05; // time interval for saving the simulation
timePrecision 6; // maximum number of digits for time folder
timePrecision 6; // maximum number of digits for time folder
g (0 0 -9.8); // gravity vector (m/s2)
g (0 0 -9.8); // gravity vector (m/s2)
// save necessary (i.e., required) data on disk
// save data objects that are not automatically saved on disk.
// overrides the default behavior
includeObjects (diameter);
// exclude unnecessary data from saving on disk
excludeObjects (rVelocity.dy1 pStructPosition.dy1 pStructVelocity.dy1);
integrationMethod AdamsBashforth2; // integration method
integrationMethod AdamsBashforth2; // integration method
writeFormat ascii; // data writting format (ascii or binary)
timersReport Yes; // report timers
timersReportInterval 0.01; // time interval for reporting timers
writeFormat ascii; // data writting format (ascii or binary)
timersReport Yes; // report timers
timersReportInterval 0.01; // time interval for reporting timers