From 61f5288e18b828407e2d2919bc61e47466e653ad Mon Sep 17 00:00:00 2001 From: Omid Khosravi Date: Thu, 20 Apr 2023 11:15:58 +0430 Subject: [PATCH 1/3] Update RDB ReadMe Some misspellings were corrected. --- tutorials/sphereGranFlow/RotatingDrumWithBaffles/ReadMe.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/ReadMe.md b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/ReadMe.md index d39e076e..8815cb83 100644 --- a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/ReadMe.md +++ b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/ReadMe.md @@ -1,5 +1,5 @@ # Problem Definition -The problem is to simulate a rotating drum with the diameter **0.24 m**, the length **0.1 m** and **6** Baffles, rotating at **15 rpm**. This drum is filled with **20000** Particles.The timestep for integration is **0.00001 s**. There are 2 types of Particles in this drum each are beining inserted during simulation to fill the drum. +The problem is to simulate a rotating drum with the diameter **0.24 m**, the length **0.1 m** and **6** Baffles, rotating at **15 rpm**. This drum is filled with **20000** Particles.The timestep for integration is **0.00001 s**. There are 2 types of Particles in this drum each are being inserted during simulation to fill the drum. * **12500** Particles with **4 mm** diameter, at the rate of 12500 particles/s for 1 sec. * **7500** Particles with **5mm** diameter, at the rate of 7500 particles/s for 1 sec. From 1771704270033d7445ed8f048014427b7655881b Mon Sep 17 00:00:00 2001 From: Omid Khosravi Date: Thu, 20 Apr 2023 11:35:38 +0430 Subject: [PATCH 2/3] Update Tote Blender ReadMe # Tote Blender ReadMe * ASCII file format explanation. * Code blocks were fixed. * Particles number were changed from 20000 to 24000. --- .../sphereGranFlow/toteblender/ReadMe.md | 298 +++++++++++------- 1 file changed, 188 insertions(+), 110 deletions(-) diff --git a/tutorials/sphereGranFlow/toteblender/ReadMe.md b/tutorials/sphereGranFlow/toteblender/ReadMe.md index 5a6d13b5..203f7ae0 100644 --- a/tutorials/sphereGranFlow/toteblender/ReadMe.md +++ b/tutorials/sphereGranFlow/toteblender/ReadMe.md @@ -1,6 +1,6 @@ # Problem Definition -The problem is to simulate a double pedestal tote blender with the diameter **0.03 m** and **0.1 m** respectively, the length **0.3 m**, rotating at **28 rpm**. This blender is filled with **20000** Particles. The timestep for integration is **0.00001 s**. There is one type of Particle in this blender that are being inserted during simulation to fill the blender. -* **20000** particles with **4 mm** diameter, at the rate of 20000 particles/s for 1 sec. َAfter settling particles, this blender starts to rotate at t=**1s**. +The problem is to simulate a double pedestal tote blender with the diameter **0.03 m** and **0.1 m** respectively, the length **0.3 m**, rotating at **28 rpm**. This blender is filled with **24000** Particles. The timestep for integration is **0.00001 s**. There is one type of Particle in this blender that are being inserted during simulation to fill the blender. +* **24000** particles with **5 mm** diameter, at the rate of 24000 particles/s for 1 sec. َAfter settling particles, this blender starts to rotate at t=**1s**. For better and faster performace in simulations where the number of particles is very large, the format of the files is saved as **ASCII**. @@ -19,12 +19,14 @@ As it has been explained in the previous cases, the simulation case setup is bas ## Defining particles Then in the `caseSetup/sphereShape` the diameter and the material name of the particles are defined. ```C++ -// names of shapes +// name of shapes names (sphere1); + // diameter of shapes (m) -diameters (0.004); -// material names for shapes -materials (prop1); +diameters (0.005); + +// material name for shapes +materials (solidProperty); ``` ## Particle Insertion In this case we have a region for ordering particles. These particles are placed in this blender. For example the script for the inserted particles is shown below. @@ -37,38 +39,46 @@ in caseSetup/particleInsertion file // positions particles positionParticles { -// ordered positioning - method positionOrdered; -// maximum number of particles in the simulation - maxNumberOfParticles 40000; -// perform initial sorting based on morton code? - mortonSorting Yes; -// cylinder for positioning particles + // ordered positioning + method positionOrdered; + + // maximum number of particles in the simulation + maxNumberOfParticles 25001; + + // perform initial sorting based on morton code? + mortonSorting Yes; + + // cylinder for positioning particles cylinder { -// Coordinates of top cylinderRegion (m,m,m) - p1 (0.05 0.0 0.12); - p2 (0.05 0.0 0.22); -// radius of cylinder - radius 0.066; + // Coordinates of top cylinderRegion (m,m,m) + p1 (0.0 0.0 0.09); + + p2 (0.0 0.0 0.21); + + // radius of cylinder + radius 0.09; } positionOrderedInfo { -// minimum space between centers of particles - diameter 0.003; -// number of particles in the simulation - numPoints 20000; -// axis order for filling the space with particles - axisOrder (z y x); + // minimum space between centers of particles + diameter 0.005; + + // number of particles in the simulation + numPoints 24000; + + // axis order for filling the space with particles + axisOrder (x y z); } } ``` ## Interaction between particles - In `caseSetup/interaction` file, material names and properties and interaction parameters are defined: interaction between the particles of rotating drum. Since we are defining 1 material for simulation, the interaction matrix is 1x1 (interactions are symetric). + In `caseSetup/interaction` file, material names and properties and interaction parameters are defined: interaction between the particles of Tote Blender. Since we are defining 1 material for simulation, the interaction matrix is 1x1 (interactions are symetric). ```C++ // a list of materials names -materials (prop1); +materials (solidProperty); + // density of materials [kg/m3] densities (1000.0); @@ -76,164 +86,229 @@ contactListType sortedContactList; model { - contactForceModel nonLinearNonLimited; - rollingFrictionModel normal; + contactForceModel nonLinearNonLimited; + + rollingFrictionModel normal; + /* - Property (prop1-prop1); + Property (solidProperty-solidProperty); */ -// Young modulus [Pa] + + // Young modulus [Pa] Yeff (1.0e6); -// Shear modulus [Pa] + + // Shear modulus [Pa] Geff (0.8e6); -// Poisson's ratio [-] + + // Poisson's ratio [-] nu (0.25); -// coefficient of normal restitution + + // coefficient of normal restitution en (0.7); -// coefficient of tangential restitution + + // coefficient of tangential restitution et (1.0); -// dynamic friction + + // dynamic friction mu (0.3); -// rolling friction - mur (0.1); - + + // rolling friction + mur (0.1); } ``` ## Settings ### Geometry -In the `settings/geometryDict` file, the geometry and axis of rotation is defined for the drum. The geometry is composed of a cylinder inlet and outlet, cone shell top and down, a cylinder shell and enter and exit Gate. +In the `settings/geometryDict` file, the geometry and axis of rotation is defined for the blender. The geometry is composed of a cylinder inlet and outlet, cone shell top and down, a cylinder shell and enter and exit Gate. ```C++ surfaces { - topGate + topGate { - // type of wall + // type of wall type cylinderWall; - // begin point of cylinder axis - p1 (0.0 0.0 0.299); - // end point of cylinder axis - p2 (0.0 0.0 0.3); - // radius at p1 + + // begin point of cylinder axis + p1 (0.0 0.0 0.3); + + // end point of cylinder axis + p2 (0.0 0.0 0.301); + + // radius at p1 radius1 0.03; - // radius at p2 + + // radius at p2 radius2 0.0001; - // material of wall + + // material of wall material solidProperty; - // motion component name + + // motion component name motion axisOfRotation; } topCylinder { - // type of the wall + // type of the wall type cylinderWall; - // begin point of cylinder axis + + // begin point of cylinder axis p1 (0.0 0.0 0.28); - // end point of cylinder axis + + // end point of cylinder axis p2 (0.0 0.0 0.3); - // radius at p1 + + // radius at p1 radius1 0.03; - // radius at p2 + + // radius at p2 radius2 0.03; - // number of divisions + + // number of divisions resolution 36; - // material name of this wall - material prop1; - // motion component name + + // material name of this wall + material solidProperty; + + // motion component name motion axisOfRotation; } coneShelltop - { - // type of the wall + { + // type of the wall type cylinderWall; - // begin point of cylinder axis + + // begin point of cylinder axis p1 (0.0 0.0 0.2); - // end point of cylinder axis + + // end point of cylinder axis p2 (0.0 0.0 0.28); - // radius at p1 + + // radius at p1 radius1 0.1; - // radius at p2 + + // radius at p2 radius2 0.03; - // number of divisions + + // number of divisions resolution 36; - // material name of this wall - material prop1; - // motion component name + + // material name of this wall + material solidProperty; + + // motion component name motion axisOfRotation; } cylinderShell { - // type of the wall + // type of the wall type cylinderWall; - // begin point of cylinder axis + + // begin point of cylinder axis p1 (0.0 0.0 0.1); - // end point of cylinder axis + + // end point of cylinder axis p2 (0.0 0.0 0.2); - // radius at p1 + + // radius at p1 radius1 0.1; - // radius at p2 + + // radius at p2 radius2 0.1; - // number of divisions + + // number of divisions resolution 36; - // material name of this wall - material prop1; - // motion component name + + // material name of this wall + material solidProperty; + + // motion component name motion axisOfRotation; } coneShelldown { - // type of the wall + + // type of the wall type cylinderWall; - // begin point of cylinder axis + + // begin point of cylinder axis p1 (0.0 0.0 0.02); - // end point of cylinder axis + + // end point of cylinder axis p2 (0.0 0.0 0.1); - // radius at p1 + + // radius at p1 radius1 0.03; - // radius at p2 + + // radius at p2 radius2 0.1; - // number of divisions + + // number of divisions resolution 36; - // material name of this wall - material prop1; - // motion component name + + // material name of this wall + material solidProperty; + + // motion component name motion axisOfRotation; } - /* - This is a plane wall at the exit of silo - */ - bottomCylinder + bottomCylinder { - // type of the wall + // type of the wall type cylinderWall; - // begin point of cylinder axis + + // begin point of cylinder axis p1 (0.0 0.0 0.0); - // end point of cylinder axis + + // end point of cylinder axis p2 (0.0 0.0 0.02); - // radius at p1 + + // radius at p1 radius1 0.03; - // radius at p2 + + // radius at p2 radius2 0.03; - // number of divisions + + // number of divisions resolution 36; - // material name of this wall - material prop1; - // motion component name + + // material name of this wall + material solidProperty; + + // motion component name motion axisOfRotation; } + exitGate { - type planeWall; - p1 (-0.05 -0.05 0); - p2 (-0.05 0.05 0); - p3 ( 0.05 0.05 0); - p4 (0.05 -0.05 0); - material prop1; - motion axisOfRotation; + + // type of the wall + type cylinderWall; + + // begin point of cylinder axis + p1 (0.0 0.0 -0.001); + + // end point of cylinder axis + p2 (0.0 0.0 0.0); + + // radius at p1 + radius1 0.03; + + // radius at p2 + radius2 0.0001; + + // number of divisions + resolution 36; + + // material name of this wall + material solidProperty; + + // motion component name + motion axisOfRotation; } } @@ -247,11 +322,14 @@ rotatingAxisMotionInfo axisOfRotation { p1 (-0.1 0.0 0.15); // first point for the axis of rotation - p2 (0.1 0.0 0.15); // second point for the axis of rotation + p2 ( 0.1 0.0 0.15); // second point for the axis of rotation + omega 1.5708; // rotation speed ==> 15 rad/s - // Start time of Geometry Rotating (s) - startTime 1; - // End time of Geometry Rotating (s) + + // Start time of Geometry Rotating (s) + startTime 0.5; + + // End time of Geometry Rotating (s) endTime 9.5; } } From 5d67ae270c5807f6b9fd0da6e6225698d8f4830a Mon Sep 17 00:00:00 2001 From: PhasicFlow <113092888+PhasicFlow@users.noreply.github.com> Date: Thu, 20 Apr 2023 16:10:23 +0330 Subject: [PATCH 3/3] Update ReadMe.md --- .../sphereGranFlow/toteblender/ReadMe.md | 233 +++++++++--------- 1 file changed, 123 insertions(+), 110 deletions(-) diff --git a/tutorials/sphereGranFlow/toteblender/ReadMe.md b/tutorials/sphereGranFlow/toteblender/ReadMe.md index 203f7ae0..7b13e340 100644 --- a/tutorials/sphereGranFlow/toteblender/ReadMe.md +++ b/tutorials/sphereGranFlow/toteblender/ReadMe.md @@ -1,6 +1,6 @@ # Problem Definition -The problem is to simulate a double pedestal tote blender with the diameter **0.03 m** and **0.1 m** respectively, the length **0.3 m**, rotating at **28 rpm**. This blender is filled with **24000** Particles. The timestep for integration is **0.00001 s**. There is one type of Particle in this blender that are being inserted during simulation to fill the blender. -* **24000** particles with **5 mm** diameter, at the rate of 24000 particles/s for 1 sec. َAfter settling particles, this blender starts to rotate at t=**1s**. For better and faster performace in simulations where the number of particles is very large, the format of the files is saved as **ASCII**. +The problem is to simulate a double pedestal tote blender (mixer) with the diameter **0.03 m** and **0.1 m** respectively, the length **0.3 m**, rotating at **28 rpm**. This blender is filled with **24000** particles. The timestep for integration is **0.00001 s**. There is one type of particle in this blender. Particles are positioned before start of simulation to fill the blender. +* **24000** particles with **5 mm** diameter are positioned, in order, and let to be settled under gravity. After settling particles, this blender starts to rotate at t=**1s**. @@ -8,117 +8,46 @@ The problem is to simulate a double pedestal tote blender with the diameter **0. a view of the tote-blender while rotating
- +
+
+ particles are colored according to their velocity +
# Setting up the Case -As it has been explained in the previous cases, the simulation case setup is based on text-based scripts. Here, the simulation case setup are sotred in two folders: `caseSetup`, `setting`. (see the above folders). Unlike the previous cases, this case does not have the `stl` file. and the geometry is described in the `geometryDict` file. +As it has been explained in the previous cases, the simulation case setup is based on text-based scripts. Here, the simulation case setup files are stored into two folders: `caseSetup`, `setting` (see the above folders). Unlike the previous cases, this case does not have the `stl` file and the surfaces are defined based on the built-in utilities in phasicFlow. See next the section for more information on how we can setup the geometry and its rotation. -## Defining particles -Then in the `caseSetup/sphereShape` the diameter and the material name of the particles are defined. -```C++ -// name of shapes -names (sphere1); +## Geometry -// diameter of shapes (m) -diameters (0.005); - -// material name for shapes -materials (solidProperty); -``` -## Particle Insertion -In this case we have a region for ordering particles. These particles are placed in this blender. For example the script for the inserted particles is shown below. - -
-in caseSetup/particleInsertion file -
+### Defining rotation axis +In file `settings/geometryDict` the information of rotating axis and speed of rotation are defined. The rotation of this blender starts at time=**0.5 s** and ends at time=**9.5 s**. ```C++ -// positions particles -positionParticles +// information for rotatingAxisMotion motion model +rotatingAxisMotionInfo { - // ordered positioning - method positionOrdered; - - // maximum number of particles in the simulation - maxNumberOfParticles 25001; - - // perform initial sorting based on morton code? - mortonSorting Yes; - - // cylinder for positioning particles - cylinder + axisOfRotation { - // Coordinates of top cylinderRegion (m,m,m) - p1 (0.0 0.0 0.09); + p1 (-0.1 0.0 0.15); // first point for the axis of rotation + p2 ( 0.1 0.0 0.15); // second point for the axis of rotation - p2 (0.0 0.0 0.21); + omega 1.5708; // rotation speed ==> 15 rad/s - // radius of cylinder - radius 0.09; - } - - positionOrderedInfo - { - // minimum space between centers of particles - diameter 0.005; + // Start time of Geometry Rotating (s) + startTime 0.5; - // number of particles in the simulation - numPoints 24000; - - // axis order for filling the space with particles - axisOrder (x y z); + // End time of Geometry Rotating (s) + endTime 9.5; } } ``` - ## Interaction between particles - In `caseSetup/interaction` file, material names and properties and interaction parameters are defined: interaction between the particles of Tote Blender. Since we are defining 1 material for simulation, the interaction matrix is 1x1 (interactions are symetric). -```C++ - // a list of materials names -materials (solidProperty); -// density of materials [kg/m3] -densities (1000.0); -contactListType sortedContactList; +### Surfaces +In `settings/geometryDict` file, the surfaces and motion component of each surface are defined to form a rotating tote-blender. The geometry is composed of top and bottom cylinders, top and bottom cones, a cylindrical shell and top and bottom Gates. -model -{ - contactForceModel nonLinearNonLimited; - - rollingFrictionModel normal; - - /* - Property (solidProperty-solidProperty); - */ - - // Young modulus [Pa] - Yeff (1.0e6); - - // Shear modulus [Pa] - Geff (0.8e6); - - // Poisson's ratio [-] - nu (0.25); - - // coefficient of normal restitution - en (0.7); - - // coefficient of tangential restitution - et (1.0); - - // dynamic friction - mu (0.3); - - // rolling friction - mur (0.1); -} -``` -## Settings -### Geometry -In the `settings/geometryDict` file, the geometry and axis of rotation is defined for the blender. The geometry is composed of a cylinder inlet and outlet, cone shell top and down, a cylinder shell and enter and exit Gate. ```C++ surfaces { @@ -313,31 +242,115 @@ surfaces } ``` -### Rotating Axis Info -In this part of `geometryDict` the information of rotating axis and speed of rotation are defined. Unlike the previous cases, the rotation of this blender starts at time=**0 s**. + +## Defining particles +### Diameter and material of spheres +In the `caseSetup/sphereShape` the diameter and the material name of the particles are defined. + +
+in caseSetup/sphereShape file +
+ ```C++ -// information for rotatingAxisMotion motion model -rotatingAxisMotionInfo +// name of shapes +names (sphere1); + +// diameter of shapes (m) +diameters (0.005); + +// material name for shapes +materials (solidProperty); +``` +### Particle positioning before start of simulation +Particles are positioned before the start of simulation. The positioning can be ordered or random. Here we use ordered positioning. 24000 particles are positioned in a cylinderical region inside the tote-blender. + +
+in settings/particlesDict file +
+ +```C++ +// positions particles +positionParticles { - axisOfRotation + // ordered positioning + method positionOrdered; + + // maximum number of particles in the simulation + maxNumberOfParticles 25001; + + // perform initial sorting based on morton code? + mortonSorting Yes; + + // cylinderical region for positioning particles + cylinder { - p1 (-0.1 0.0 0.15); // first point for the axis of rotation - p2 ( 0.1 0.0 0.15); // second point for the axis of rotation + p1 (0.0 0.0 0.09); + p2 (0.0 0.0 0.21); + radius 0.09; + } + + positionOrderedInfo + { + // minimum space between centers of particles + diameter 0.005; - omega 1.5708; // rotation speed ==> 15 rad/s - - // Start time of Geometry Rotating (s) - startTime 0.5; - - // End time of Geometry Rotating (s) - endTime 9.5; + // number of particles in the simulation + numPoints 24000; + + // axis order for filling the space with particles + axisOrder (x y z); } } ``` -## Performing Simulation + + ## Interaction between particles + In `caseSetup/interaction` file, material names and properties and interaction parameters are defined. Since we are defining 1 material type in the simulation, the interaction matrix is 1x1 (interactions are symmetric). +```C++ + // a list of materials names +materials (solidProperty); + +// density of materials [kg/m3] +densities (1000.0); + +contactListType sortedContactList; + +model +{ + contactForceModel nonLinearNonLimited; + + rollingFrictionModel normal; + + /* + Property (solidProperty-solidProperty); + */ + + // Young modulus [Pa] + Yeff (1.0e6); + + // Shear modulus [Pa] + Geff (0.8e6); + + // Poisson's ratio [-] + nu (0.25); + + // coefficient of normal restitution + en (0.7); + + // coefficient of tangential restitution + et (1.0); + + // dynamic friction + mu (0.3); + + // rolling friction + mur (0.1); +} +``` + +# Performing Simulation and previewing the results To perform simulations, enter the following commands one after another in the terminal. Enter `$ particlesPhasicFlow` command to create the initial fields for particles. -Enter `$ geometryPhasicFlow` command to create the Geometry. +Enter `$ geometryPhasicFlow` command to create the geometry. At last, enter `$ sphereGranFlow` command to start the simulation. -After finishing the simulation, you can use `$ pFlowtoVTK` to convert the results into vtk format storred in ./VTK folder. \ No newline at end of file +After finishing the simulation, you can use `$ pFlowtoVTK` to convert the results into vtk format stored in ./VTK folder.