diff --git a/.gitignore b/.gitignore index 65101b440..41f2b1754 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,8 @@ test*/** **/[0-9]*.[0-9][0-9][0-9][0-9][0-9][0-9][0-9] **/[0-9]*.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] **/VTK +utilities/postprocessPhasicFlow/includeMask.hpp +utilities/postprocessPhasicFlow/ProcessField.hpp +utilities/postprocessPhasicFlow/ProcessField.hpp +*.hpp +*.cpp diff --git a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/ReadMe.md b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/ReadMe.md new file mode 100644 index 000000000..8815cb83f --- /dev/null +++ b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/ReadMe.md @@ -0,0 +1,192 @@ +# 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 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. + + + +
+ a view of the drum while rotating +
+
+ +
+ + + +# 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 three folders: `caseSetup`, `setting` and `stl` (see the above folders). + +## Defining small and large particles +Then in the `caseSetup/sphereShape` the diameter and the material name of the particles are defined. Two sizes are defined: 4 and 5 mm. +```C++ +// names of shapes +names (smallSphere largeSphere); +// diameter of shapes (m) +diameters (0.004 0.005); +// material names for shapes +materials (lightMat heavyMat); +``` + + +## Particle Insertion +In this case we have two region for inserting our particles. In the both region we define rate of insertion, start and end time of insertion, information for the volume of the space throught which particles are being inserted. The insertion phase in the simulation is performed between times 0 and 1 seconds. +For example, for the insertion region for inserting light particles is shown below. + +
+in caseSetup/particleInsertion file +
+ + +```C++ +// Right Layer Region +layerrightregion +{ +// type of insertion region + type cylinderRegion; +// insertion rate (particles/s) + rate 12500; +// Start time of LightParticles insertion (s) + startTime 0; +// End time of LightParticles insertion (s) + endTime 1; +// Time Interval of LightParticles insertion (s) + interval 0.025; + + cylinderRegionInfo + { +// Coordinates of cylinderRegion (m,m,m) + p2 (-0.15 0.25 0.05); + p1 (-0.15 0.24 0.05); +// radius of cylinder (m) + radius 0.035; + } +} +``` +## Interaction between particles and walls +In `caseSetup/interaction` file, material names and properties and interaction parameters are defined: interaction between the particles and the shell of rotating drum. Since we are defining 3 materials for simulation, the interaction matrix is 3x3, while we are only required to enter upper-triangle elements (interactions are symetric). + +```C++ +// a list of materials names +materials (lightMat heavyMat wallMat); +// density of materials [kg/m3] +densities (1000 1500 2500); + + /* + Property (lightMat-lightMat lightMat-heavyMat lightMat-wallMat + heavyMat-heavyMat heavyMat-wallMat + wallMat-wallMat ); + */ +// Young modulus [Pa] + Yeff (1.0e6 1.0e6 1.0e6 + 1.0e6 1.0e6 + 1.0e6); +// Shear modulus [Pa] + Geff (0.8e6 0.8e6 0.8e6 + 0.8e6 0.8e6 + 0.8e6); +// Poisson's ratio [-] + nu (0.25 0.25 0.25 + 0.25 0.25 + 0.25); +// coefficient of normal restitution + en (0.97 0.97 0.85 + 0.97 0.85 + 1.00); +// coefficient of tangential restitution + et (1.0 1.0 1.0 + 1.0 1.0 + 1.0); +// dynamic friction + mu (0.65 0.65 0.35 + 0.65 0.35 + 0.35); +// rolling friction + mur (0.1 0.1 0.1 + 0.1 0.1 + 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 body, front and rear ends. + +```C++ +surfaces +{ + body + { + // type of the wall + type stlWall; + // file name in stl folder + file Body.stl; + // material name of this wall + material wallMat; + // motion component name + motion rotAxis; + } + /* This is a Cylinder Wall at the rear of cylinder */ + rearEnd + { + // type of the wall + type cylinderWall; + // first point for the axis of rotation + p1 (-0.1974 0.2269 -0.001); + // second point for the axis of rotation + p2 (-0.1974 0.2269 0.0); + // Radius of p1 + radius1 0.0001; + // Radius of p2 + radius2 0.12; + // material name of the wall + material wallMat; + // motion component name + motion rotAxis; + } + /* This a cylinder Wall at the front of Cylinder */ + frontEnd + { + // type of the wall + type cylinderWall; + // first point for the axis of rotation + p1 (-0.1974 0.2269 0.0989); + // second point for the axis of rotation + p2 (-0.1974 0.2269 0.0990); + // Radius of p1 + radius1 0.0001; + // Radius of p2 + radius2 0.12; + // material name of the wall + material wallMat; + // motion component name + motion rotAxis; + } +} +``` +### Rotating Axis Info +In this part of `geometryDict` the information of rotating axis and speed of rotation are defined. The start of rotation is at 2 s. The first 2 seconds of simulation is for allowing particles to settle donw in the drum. + +```C++ +rotatingAxisMotionInfo +{ + rotAxis + { + // first point for the axis of rotation + p1 (-0.1974 0.2269 0); + // second point for the axis of rotation + p2 (-0.1974 0.2269 0.1); + // rotation speed (rad/s) => 15 rpm + omega 2.38733; + // Start time of Geometry Rotating + startTime 2; + // End time of Geometry Rotating + endTime 9.5; + } +} +``` +## Performing Simulation +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. +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. diff --git a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/ReadMe.txt b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/ReadMe.txt deleted file mode 100644 index 1b04c6185..000000000 --- a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/ReadMe.txt +++ /dev/null @@ -1,10 +0,0 @@ -To run this case please follow the below Steps: -1- Open a terminal in the RotatingDrumWithBaffles -2- Enter the code ./runThisCase to run the Case -3- After finishing the run time please type pFlowtoVTK to convert data to VTK format -4- After Post-Producting and viewing the case please enter ./cleanThisCase to delete data - - -For more questions please contact: -omidava.khosravi@gmail.com -<3 diff --git a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/interaction b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/interaction index f01b3196e..ea9ae28d1 100644 --- a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/interaction +++ b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/interaction @@ -60,7 +60,7 @@ contactSearch NBSInfo { - // each 20 timesteps, update neighbor list + // each 20 timesteps, update neighbor list updateFrequency 10; // bounding box size to particle diameter (max) sizeRatio 1.1; diff --git a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/particleInsertion b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/particleInsertion index 8a16d732a..68712a029 100644 --- a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/particleInsertion +++ b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/particleInsertion @@ -47,7 +47,7 @@ Two layers of particles are packed one-by-one using 1 insertion steps. mixture { // mixture composition of inserted particles - lightSphere 1; + smallSphere 1; } } // Left Layer Region @@ -79,7 +79,7 @@ Two layers of particles are packed one-by-one using 1 insertion steps. mixture { - heavySphere 1; // only heavySphere + largeSphere 1; // only heavySphere } } diff --git a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/sphereShape b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/sphereShape index 1b94f4f0d..714e1b9a5 100644 --- a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/sphereShape +++ b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/sphereShape @@ -6,7 +6,7 @@ objectName sphereDict; objectType sphereShape; /*---------------------------------------------------------------------------*/ // names of shapes -names (lightSphere heavySphere); +names (smallSphere largeSphere); // diameter of shapes (m) diameters (0.004 0.005); // material names for shapes diff --git a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/geometryDict b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/geometryDict index 5da00ec30..4b6e1d56e 100644 --- a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/geometryDict +++ b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/geometryDict @@ -13,66 +13,66 @@ surfaces { body { - // type of the wall +// type of the wall type stlWall; - // file name in stl folder +// file name in stl folder file Body.stl; - // material name of this wall +// material name of this wall material wallMat; - // motion component name +// motion component name motion rotAxis; } /* This is a Cylinder Wall at the rear of cylinder */ - CylinderRear1 + rearEnd { - // type of the wall +// type of the wall type cylinderWall; - // first point for the axis of rotation +// first point for the axis of rotation p1 (-0.1974 0.2269 -0.001); - // second point for the axis of rotation +// second point for the axis of rotation p2 (-0.1974 0.2269 0.0); - // Radius of p1 +// Radius of p1 radius1 0.0001; - // Radius of p2 +// Radius of p2 radius2 0.12; - // material name of the wall +// material name of the wall material wallMat; - // motion component name +// motion component name motion rotAxis; } /* This a cylinder Wall at the front of Cylinder */ - CylinderFront2 + frontEnd { - // type of the wall +// type of the wall type cylinderWall; - // first point for the axis of rotation +// first point for the axis of rotation p1 (-0.1974 0.2269 0.0989); - // second point for the axis of rotation +// second point for the axis of rotation p2 (-0.1974 0.2269 0.0990); - // Radius of p1 +// Radius of p1 radius1 0.0001; - // Radius of p2 +// Radius of p2 radius2 0.12; - // material name of the wall +// material name of the wall material wallMat; - // motion component name +// motion component name motion rotAxis; } } - // information for rotatingAxisMotion motion model +// information for rotatingAxisMotion motion model rotatingAxisMotionInfo { rotAxis { - // first point for the axis of rotation +// first point for the axis of rotation p1 (-0.1974 0.2269 0); - // second point for the axis of rotation +// second point for the axis of rotation p2 (-0.1974 0.2269 0.1); - // rotation speed (rad/s) => 15 rpm +// rotation speed (rad/s) => 15 rpm omega 2.38733; - // Start time of Geometry Rotating +// Start time of Geometry Rotating startTime 2; - // End time of Geometry Rotating +// End time of Geometry Rotating endTime 9.5; } } diff --git a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/particlesDict b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/particlesDict index a7f58c615..4be2a5c36 100644 --- a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/particlesDict +++ b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/particlesDict @@ -16,7 +16,7 @@ setFields // rotational velocity (rad/s) rotVelocity realx3 (0 0 0); // name of the particle shape - shapeName word lightSphere; + shapeName word smallSphere; } selectors diff --git a/tutorials/sphereGranFlow/toteBlender/ReadMe.md b/tutorials/sphereGranFlow/toteBlender/ReadMe.md new file mode 100644 index 000000000..4a9ff9bf0 --- /dev/null +++ b/tutorials/sphereGranFlow/toteBlender/ReadMe.md @@ -0,0 +1,244 @@ +# 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 drum. +* **20000** particles with **4 mm** diameter, at the rate of 20000 particles/s for 1 sec. + + + +
+ a view of the tote-blender while rotating +
+
+ +
+ + + +# 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. + +## Defining particles +Then in the `caseSetup/sphereShape` the diameter and the material name of the particles are defined. +```C++ +// names of shapes +names (sphere1); +// diameter of shapes (m) +diameters (0.004); +// material names for shapes +materials (prop1); +``` +## 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 +
+ +```C++ +// 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; +// box for positioning particles + box + { +// lower corner point of the box + min (-0.06 -0.06 0.08); +// upper corner point of the box + max (0.06 0.06 0.18); + } +``` + ## 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). +```C++ + // a list of materials names +materials (prop1); +// density of materials [kg/m3] +densities (1000.0); + +contactListType sortedContactList; + +model +{ + contactForceModel nonLinearNonLimited; + rollingFrictionModel normal; + /* + Property (prop1-prop1); + */ +// 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 drum. 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 +{ + enterGate + { + // type of wall + type planeWall; + // coords of wall + p1 (-0.05 -0.05 0.3); + p2 (-0.05 0.05 0.3); + p3 ( 0.05 0.05 0.3); + p4 (0.05 -0.05 0.3); + // material of wall + material prop1; + // motion component name + motion rotAxis; + } + + cylinderinlet + { + // type of the wall + type cylinderWall; + // begin point of cylinder axis + p1 (0.0 0.0 0.28); + // end point of cylinder axis + p2 (0.0 0.0 0.3); + // radius at p1 + radius1 0.03; + // radius at p2 + radius2 0.03; + // number of divisions + resolution 36; + // material name of this wall + material prop1; + // motion component name + motion rotAxis; + } + + coneShelltop + { + // type of the wall + type cylinderWall; + // begin point of cylinder axis + p1 (0.0 0.0 0.2); + // end point of cylinder axis + p2 (0.0 0.0 0.28); + // radius at p1 + radius1 0.1; + // radius at p2 + radius2 0.03; + // number of divisions + resolution 36; + // material name of this wall + material prop1; + // motion component name + motion rotAxis; + } + + cylinderShell + { + // type of the wall + type cylinderWall; + // begin point of cylinder axis + p1 (0.0 0.0 0.1); + // end point of cylinder axis + p2 (0.0 0.0 0.2); + // radius at p1 + radius1 0.1; + // radius at p2 + radius2 0.1; + // number of divisions + resolution 36; + // material name of this wall + material prop1; + // motion component name + motion rotAxis; + } + + coneShelldown + { + // type of the wall + type cylinderWall; + // begin point of cylinder axis + p1 (0.0 0.0 0.02); + // end point of cylinder axis + p2 (0.0 0.0 0.1); + // radius at p1 + radius1 0.03; + // radius at p2 + radius2 0.1; + // number of divisions + resolution 36; + // material name of this wall + material prop1; + // motion component name + motion rotAxis; + } + /* + This is a plane wall at the exit of silo + */ + + cylinderoutlet + { + // type of the wall + type cylinderWall; + // begin point of cylinder axis + p1 (0.0 0.0 0.0); + // end point of cylinder axis + p2 (0.0 0.0 0.02); + // radius at p1 + radius1 0.03; + // radius at p2 + radius2 0.03; + // number of divisions + resolution 36; + // material name of this wall + material prop1; + // motion component name + motion rotAxis; + } + 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 rotAxis; + } + +} +``` +### 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**. +```C++ +rotatingAxisMotionInfo +{ + rotAxis + { + 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 + omega 3; // rotation speed (rad/s) + } +} +``` +## Performing Simulation +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. +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 diff --git a/tutorials/sphereGranFlow/toteBlender/caseSetup/interaction b/tutorials/sphereGranFlow/toteBlender/caseSetup/interaction new file mode 100644 index 000000000..f97d2f4f4 --- /dev/null +++ b/tutorials/sphereGranFlow/toteBlender/caseSetup/interaction @@ -0,0 +1,61 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName interaction; +objectType dicrionary; +/* ------------------------------------------------------------------------- */ +// a list of materials names +materials (prop1); +// density of materials [kg/m3] +densities (1000.0); + +contactListType sortedContactList; + +model +{ + contactForceModel nonLinearNonLimited; + rollingFrictionModel normal; + /* + Property (prop1-prop1); + */ +// 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); + +} +contactSearch +{ +// method for broad search particle-particle + method NBS; +// method for broad search particle-wall + wallMapping cellMapping; + + NBSInfo + { + // each 20 timesteps, update neighbor list + updateFrequency 20; + // bounding box size to particle diameter (max) + sizeRatio 1.1; + } + + cellMappingInfo + { + // each 20 timesteps, update neighbor list + updateFrequency 20; + // bounding box for particle-wall search (> 0.5) + cellExtent 0.7; + } + +} \ No newline at end of file diff --git a/tutorials/sphereGranFlow/toteBlender/caseSetup/particleInsertion b/tutorials/sphereGranFlow/toteBlender/caseSetup/particleInsertion new file mode 100644 index 000000000..d8f022c67 --- /dev/null +++ b/tutorials/sphereGranFlow/toteBlender/caseSetup/particleInsertion @@ -0,0 +1,13 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName particleInsertion; +objectType dicrionary; +/* ------------------------------------------------------------------------- */ +// is insertion active? +active no; +// not implemented for yes +collisionCheck No; + + diff --git a/tutorials/sphereGranFlow/toteBlender/caseSetup/sphereShape b/tutorials/sphereGranFlow/toteBlender/caseSetup/sphereShape new file mode 100644 index 000000000..ff2df8d19 --- /dev/null +++ b/tutorials/sphereGranFlow/toteBlender/caseSetup/sphereShape @@ -0,0 +1,13 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName sphereDict; +objectType sphereShape; +/* ------------------------------------------------------------------------- */ +// names of shapes +names (sphere1); +// diameter of shapes (m) +diameters (0.004); +// material names for shapes +materials (prop1); \ No newline at end of file diff --git a/tutorials/sphereGranFlow/toteBlender/cleanThisCase b/tutorials/sphereGranFlow/toteBlender/cleanThisCase new file mode 100644 index 000000000..8a0ab9197 --- /dev/null +++ b/tutorials/sphereGranFlow/toteBlender/cleanThisCase @@ -0,0 +1,7 @@ +#!/bin/sh +cd ${0%/*} || exit 1 # Run from this directory + +ls | grep -P "^(([0-9]+\.?[0-9]*)|(\.[0-9]+))$" | xargs -d"\n" rm -rf +rm -rf VTK + +#------------------------------------------------------------------------------ diff --git a/tutorials/sphereGranFlow/toteBlender/runThisCase b/tutorials/sphereGranFlow/toteBlender/runThisCase new file mode 100644 index 000000000..c48d71feb --- /dev/null +++ b/tutorials/sphereGranFlow/toteBlender/runThisCase @@ -0,0 +1,21 @@ +#!/bin/sh +cd ${0%/*} || exit 1 # Run from this directory +echo "\n<--------------------------------------------------------------------->" +echo "1) Creating particles" +echo "<--------------------------------------------------------------------->\n" +particlesPhasicFlow + +echo "\n<--------------------------------------------------------------------->" +echo "2) Creating geometry" +echo "<--------------------------------------------------------------------->\n" +geometryPhasicFlow + +echo "\n<--------------------------------------------------------------------->" +echo "3) Running the case" +echo "<--------------------------------------------------------------------->\n" +sphereGranFlow + + + + +#------------------------------------------------------------------------------ diff --git a/tutorials/sphereGranFlow/toteBlender/settings/geometryDict b/tutorials/sphereGranFlow/toteBlender/settings/geometryDict new file mode 100644 index 000000000..49d486bdb --- /dev/null +++ b/tutorials/sphereGranFlow/toteBlender/settings/geometryDict @@ -0,0 +1,151 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName geometryDict; +objectType dictionary; +/* ------------------------------------------------------------------------- */ +// motion model: rotating object around an axis +motionModel rotatingAxisMotion; + +surfaces +{ + enterGate + { + // type of wall + type planeWall; + // coords of wall + p1 (-0.05 -0.05 0.3); + p2 (-0.05 0.05 0.3); + p3 ( 0.05 0.05 0.3); + p4 (0.05 -0.05 0.3); + // material of wall + material prop1; + // motion component name + motion rotAxis; + } + + cylinderinlet + { + // type of the wall + type cylinderWall; + // begin point of cylinder axis + p1 (0.0 0.0 0.28); + // end point of cylinder axis + p2 (0.0 0.0 0.3); + // radius at p1 + radius1 0.03; + // radius at p2 + radius2 0.03; + // number of divisions + resolution 36; + // material name of this wall + material prop1; + // motion component name + motion rotAxis; + } + + coneShelltop + { + // type of the wall + type cylinderWall; + // begin point of cylinder axis + p1 (0.0 0.0 0.2); + // end point of cylinder axis + p2 (0.0 0.0 0.28); + // radius at p1 + radius1 0.1; + // radius at p2 + radius2 0.03; + // number of divisions + resolution 36; + // material name of this wall + material prop1; + // motion component name + motion rotAxis; + } + + cylinderShell + { + // type of the wall + type cylinderWall; + // begin point of cylinder axis + p1 (0.0 0.0 0.1); + // end point of cylinder axis + p2 (0.0 0.0 0.2); + // radius at p1 + radius1 0.1; + // radius at p2 + radius2 0.1; + // number of divisions + resolution 36; + // material name of this wall + material prop1; + // motion component name + motion rotAxis; + } + + coneShelldown + { + // type of the wall + type cylinderWall; + // begin point of cylinder axis + p1 (0.0 0.0 0.02); + // end point of cylinder axis + p2 (0.0 0.0 0.1); + // radius at p1 + radius1 0.03; + // radius at p2 + radius2 0.1; + // number of divisions + resolution 36; + // material name of this wall + material prop1; + // motion component name + motion rotAxis; + } + /* + This is a plane wall at the exit of silo + */ + + cylinderoutlet + { + // type of the wall + type cylinderWall; + // begin point of cylinder axis + p1 (0.0 0.0 0.0); + // end point of cylinder axis + p2 (0.0 0.0 0.02); + // radius at p1 + radius1 0.03; + // radius at p2 + radius2 0.03; + // number of divisions + resolution 36; + // material name of this wall + material prop1; + // motion component name + motion rotAxis; + } + 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 rotAxis; + } + +} +// information for rotatingAxisMotion motion model +rotatingAxisMotionInfo +{ + rotAxis + { + 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 + omega 3; // rotation speed (rad/s) + } +} diff --git a/tutorials/sphereGranFlow/toteBlender/settings/particlesDict b/tutorials/sphereGranFlow/toteBlender/settings/particlesDict new file mode 100644 index 000000000..49a26e760 --- /dev/null +++ b/tutorials/sphereGranFlow/toteBlender/settings/particlesDict @@ -0,0 +1,59 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName particlesDict; +objectType dictionary; +/* ------------------------------------------------------------------------- */ +setFields +{ + /* + Default value for fields defined for particles + These fields should always be defined for simulations with + spherical particles. + */ + + defaultValue + { +// linear velocity (m/s) + velocity realx3 (0 0 0); +// linear acceleration (m/s2) + acceleration realx3 (0 0 0); +// rotational velocity (rad/s) + rotVelocity realx3 (0 0 0); +// name of the particle shape + shapeName word sphere1; + } + + selectors + {} +} + +// 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; +// box for positioning particles + box + { +// lower corner point of the box + min (-0.06 -0.06 0.08); +// upper corner point of the box + max (0.06 0.06 0.18); + } + + positionOrderedInfo + { +// minimum space between centers of particles + diameter 0.004; +// number of particles in the simulation + numPoints 20000; +// axis order for filling the space with particles + axisOrder (z y x); + } +} diff --git a/tutorials/sphereGranFlow/toteBlender/settings/settingsDict b/tutorials/sphereGranFlow/toteBlender/settings/settingsDict new file mode 100644 index 000000000..28b9a552b --- /dev/null +++ b/tutorials/sphereGranFlow/toteBlender/settings/settingsDict @@ -0,0 +1,34 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName settingsDict; +objectType dictionary;; +/*---------------------------------------------------------------------------*/ +run toteBlender; +// time step for integration (s) +dt 0.00001; +// start time for simulation +startTime 0; +// end time for simulation +endTime 10; +// time interval for saving the simulation +saveInterval 0.1; +// maximum number of digits for time folder +timePrecision 6; +// gravity vector (m/s2) +g (0 0 -9.8); + +/* Simulation domain */ +/* every particles that goes outside this domain is deleted. */ +domain +{ + min (-0.5 -0.5 -0.5); + max (0.5 0.5 0.5); +} +// integration method +integrationMethod AdamsBashforth2; +// report timers? +timersReport Yes; +// time interval for reporting timers +timersReportInterval 0.01;