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 # 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. **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 # 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) [Simulation case setup files can be found in tutorials/sphereGranFlow folder.](https://github.com/PhasicFlow/phasicFlow/tree/main/tutorials/sphereGranFlow/binarySystemOfParticles)
### Shape definition ### 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"> <div align="center">
in <b>caseSetup/sphereShape</b> file in <b>caseSetup/sphereShape</b> file
@ -31,7 +33,7 @@ materials (prop1 prop1); // material names for shapes
``` ```
### Positioning and initial mixture ### 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"> <div align="center">
in <b>settings/particlesDict</b> file in <b>settings/particlesDict</b> file
@ -42,10 +44,16 @@ in <b>settings/particlesDict</b> file
// positions particles // positions particles
positionParticles positionParticles
{ {
method positionOrdered; // ordered positioning method ordered; // other options: random or empty
maxNumberOfParticles 30001; // maximum number of particles in the simulation orderedInfo
mortonSorting Yes; // perform initial sorting based on morton code? {
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 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) p2 (0.0 0.0 0.097); // end point of cylinder axis (m m m)
radius 0.117; // radius of cylinder (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 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).
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).
**Note:** Other selectors are: `selectBox` that selects particles inside a box and `randomSelect` that selects particles randomly from a given index range. **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 Default value for fields defined for particles
These fields should always be defined for simulations with These fields should always be defined for simulations with
spherical particles.*/ spherical particles.
*/
defaultValue defaultValue
{ {
@ -91,8 +92,9 @@ setFields
{ {
shapeAssigne shapeAssigne
{ {
selector selectRange; // type of point selector selector stridedRange; // other options: box, cylinder, sphere, randomPoints
selectRangeInfo
stridedRangeInfo
{ {
begin 0; // begin index of points begin 0; // begin index of points
end 30000; // end index of points end 30000; // end index of points
@ -101,10 +103,10 @@ setFields
fieldValue // fields that the selector is applied to 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; shapeName word largeSphere;
} }
} }
} }

View File

@ -49,4 +49,3 @@ model
mur (0.1); // rolling friction mur (0.1); // rolling friction
} }

View File

@ -6,9 +6,6 @@ objectName particleInsertion;
objectType dicrionary; objectType dicrionary;
fileFormat ASCII; 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

@ -11,4 +11,3 @@ 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

View File

@ -24,7 +24,7 @@ surfaces
{ {
cylinder 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
@ -47,7 +47,7 @@ surfaces
wall1 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 p1 (-0.12 -0.12 0.0); // first point of the wall
@ -68,7 +68,7 @@ surfaces
wall2 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 p1 (-0.12 -0.12 0.1); // first point of the wall
@ -83,5 +83,3 @@ surfaces
motion rotAxis; // motion component name motion rotAxis; // motion component name
} }
} }

View File

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

View File

@ -8,11 +8,11 @@ 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
@ -32,3 +32,4 @@ 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

@ -64,6 +64,7 @@ model
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
0.1); 0.1);
} }

View File

@ -6,7 +6,7 @@ objectName particleInsertion;
objectType dicrionary; objectType dicrionary;
fileFormat ASCII; 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
@ -50,3 +50,5 @@ layer0

View File

@ -11,3 +11,5 @@ names (lightSphere heavySphere); // names of shapes
diameters (0.007 0.007); // diameter of shapes diameters (0.007 0.007); // diameter of shapes
materials (lightMat heavyMat); // material names for 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

@ -56,3 +56,5 @@ boundaries
type exit; // other options: periodict, reflective type exit; // other options: periodict, reflective
} }
} }

View File

@ -17,7 +17,7 @@ surfaces
{ {
cylinderShell 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
@ -34,7 +34,7 @@ surfaces
coneShell 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
@ -55,7 +55,7 @@ surfaces
exitGate 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
@ -70,3 +70,7 @@ surfaces
} }

View File

@ -42,3 +42,4 @@ positionParticles // positions particle
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

@ -20,7 +20,8 @@ timePrecision 6; // maximum number of digits for time f
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); includeObjects (diameter);
// exclude unnecessary data from saving on disk // exclude unnecessary data from saving on disk
excludeObjects (rVelocity.dy1 pStructPosition.dy1 pStructVelocity.dy1); excludeObjects (rVelocity.dy1 pStructPosition.dy1 pStructVelocity.dy1);
@ -32,3 +33,6 @@ 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