diff --git a/tutorials/sphereGranFlow/toteblender/ReadMe.md b/tutorials/sphereGranFlow/toteblender/ReadMe.md index 7b13e340..b380d97b 100644 --- a/tutorials/sphereGranFlow/toteblender/ReadMe.md +++ b/tutorials/sphereGranFlow/toteblender/ReadMe.md @@ -1,5 +1,5 @@ -# Problem Definition -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. +# Problem Definition (v-1.0) +The problem is to simulate a double pedestal blender (mixer) with diameters of 0.03 m and 0.1 m, length of 0.3 m, rotating at 28 rpm. This mixer is filled with 24000 particles. The integration time step is 0.00001 s. There is one type of particle in this mixer. Particles are positioned to fill the mixer before the simulation starts. * **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**. @@ -17,7 +17,7 @@ The problem is to simulate a double pedestal tote blender (mixer) with the diame # 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 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. +As explained in the previous cases, the simulation case setup is based on text-based scripts. Here, the simulation case setup files are stored in two folders: `caseSetup`, `setting` (see the folders above). Unlike the previous cases, this case does not have a `stl` file and the surfaces are defined based on the built-in utilities in phasicFlow. See the next section for more information on how to set up the geometry and its rotation. ## Geometry @@ -26,7 +26,7 @@ In file `settings/geometryDict` the information of rotating axis and speed of ro ```C++ // information for rotatingAxisMotion motion model -rotatingAxisMotionInfo +rotatingAxisInfo { axisOfRotation { @@ -245,10 +245,10 @@ surfaces ## Defining particles ### Diameter and material of spheres -In the `caseSetup/sphereShape` the diameter and the material name of the particles are defined. +In the `caseSetup/shapes` the diameter and the material name of the particles are defined.
-in caseSetup/sphereShape file +in caseSetup/shapes file
```C++ @@ -273,24 +273,11 @@ in settings/particlesDict file positionParticles { // 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.0 0.0 0.09); - p2 (0.0 0.0 0.21); - radius 0.09; - } - - positionOrderedInfo - { + method ordered; + // perform initial sorting based on morton code + mortonSorting Yes; + orderedInfo + { // minimum space between centers of particles diameter 0.005; @@ -299,6 +286,17 @@ positionParticles // axis order for filling the space with particles axisOrder (x y z); + } + +regionType cylinder; // other options: box and sphere + +cylinderInfo // cylinder for positioning particles + { + p1 (0.0 0.0 0.09); // Coordinates of bottom cylinderRegion (m,m,m) + + p2 (0.0 0.0 0.21); // Coordinates of top cylinderRegion (m,m,m) + + radius 0.09; // radius of cylinder } } ``` @@ -334,10 +332,7 @@ model nu (0.25); // coefficient of normal restitution - en (0.7); - - // coefficient of tangential restitution - et (1.0); + en (0.7); // dynamic friction mu (0.3); @@ -350,7 +345,7 @@ model # 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. -At last, enter `$ sphereGranFlow` command to start the simulation. -After finishing the simulation, you can use `$ pFlowtoVTK` to convert the results into vtk format stored in ./VTK folder. +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 stored in ./VTK folder. \ No newline at end of file diff --git a/tutorials/sphereGranFlow/toteblender/caseSetup/interaction b/tutorials/sphereGranFlow/toteblender/caseSetup/interaction index 203a501b..c8e5411c 100644 --- a/tutorials/sphereGranFlow/toteblender/caseSetup/interaction +++ b/tutorials/sphereGranFlow/toteblender/caseSetup/interaction @@ -6,30 +6,30 @@ objectName interaction; objectType dicrionary; fileFormat ASCII; /*---------------------------------------------------------------------------*/ -materials (solidProperty); // a list of materials names +materials (solidProperty); // a list of materials names 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; + cellExtent 0.55; - adjustableBox Yes; + adjustableBox Yes; } model { - contactForceModel nonLinearNonLimited; + contactForceModel nonLinearNonLimited; - rollingFrictionModel normal; + rollingFrictionModel normal; /* Property (solidProperty-solidProperty) @@ -39,14 +39,12 @@ model 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 + mu (0.3); // dynamic friction - mu (0.3); // dynamic friction - - mur (0.1); // rolling friction + mur (0.1); // rolling friction } diff --git a/tutorials/sphereGranFlow/toteblender/caseSetup/particleInsertion b/tutorials/sphereGranFlow/toteblender/caseSetup/particleInsertion index cabe23da..285a9c08 100644 --- a/tutorials/sphereGranFlow/toteblender/caseSetup/particleInsertion +++ b/tutorials/sphereGranFlow/toteblender/caseSetup/particleInsertion @@ -6,8 +6,7 @@ objectName particleInsertion; objectType dicrionary; fileFormat ASCII; /*---------------------------------------------------------------------------*/ -active No; // is insertion active -> Yes or No - -collisionCheck No; // is checked -> Yes or No +active No; // is insertion active -> Yes or No + diff --git a/tutorials/sphereGranFlow/toteblender/caseSetup/shapes b/tutorials/sphereGranFlow/toteblender/caseSetup/shapes index 5e154455..05261fab 100644 --- a/tutorials/sphereGranFlow/toteblender/caseSetup/shapes +++ b/tutorials/sphereGranFlow/toteblender/caseSetup/shapes @@ -6,8 +6,8 @@ objectName sphereDict; objectType sphereShape; fileFormat ASCII; /*---------------------------------------------------------------------------*/ -names (sphere1); // name of shapes +names (sphere1); // name of shapes -diameters (0.005); // diameter of shapes (m) +diameters (0.005); // diameter of shapes (m) -materials (solidProperty); // material name for shapes \ No newline at end of file +materials (solidProperty); // material name for shapes \ No newline at end of file diff --git a/tutorials/sphereGranFlow/toteblender/caseSetup/sphereShape b/tutorials/sphereGranFlow/toteblender/caseSetup/sphereShape deleted file mode 100644 index d895b1ee..00000000 --- a/tutorials/sphereGranFlow/toteblender/caseSetup/sphereShape +++ /dev/null @@ -1,17 +0,0 @@ -/* -------------------------------*- C++ -*--------------------------------- *\ -| phasicFlow File | -| copyright: www.cemf.ir | -\* ------------------------------------------------------------------------- */ -objectName sphereDict; -objectType sphereShape; -fileFormat ASCII; -/*---------------------------------------------------------------------------*/ - -// name of shapes -names (sphere1); - -// diameter of shapes (m) -diameters (0.005); - -// material name for shapes -materials (solidProperty); \ No newline at end of file diff --git a/tutorials/sphereGranFlow/toteblender/settings/domainDict b/tutorials/sphereGranFlow/toteblender/settings/domainDict index ac9b1774..857bb5fa 100755 --- a/tutorials/sphereGranFlow/toteblender/settings/domainDict +++ b/tutorials/sphereGranFlow/toteblender/settings/domainDict @@ -6,35 +6,19 @@ objectName domainDict; objectType dictionary; fileFormat ASCII; /*---------------------------------------------------------------------------*/ -globalBox // Simulation domain: every particles that goes outside this domain will be deleted + // Simulation domain: every particles that goes outside this domain will be deleted +globalBox { - min (-0.3 -0.3 -0.3); // lower corner point of the box + min (-0.3 -0.3 -0.3); // lower corner point of the box - max (0.5 0.5 0.5); // upper corner point of the box -} - -decomposition -{ - direction z; + max (0.5 0.5 0.5); // upper corner point of the box } boundaries { - - - neighborListUpdateInterval 50; /* 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 */ - - updateInterval 10; // Determines how often do you want to update the new changes in the boundary - - neighborLength 0.004; // The distance from the boundary plane within which particles are marked to be in the boundary list - left { - type exit; // other options: periodic, reflective + type exit; // other options: periodic, reflective } right diff --git a/tutorials/sphereGranFlow/toteblender/settings/geometryDict b/tutorials/sphereGranFlow/toteblender/settings/geometryDict index 37a7b1db..187f05de 100644 --- a/tutorials/sphereGranFlow/toteblender/settings/geometryDict +++ b/tutorials/sphereGranFlow/toteblender/settings/geometryDict @@ -12,15 +12,15 @@ rotatingAxisInfo // information for rotatingAxis { axisOfRotation { - p1 (-0.1 0.0 0.15); // first point for the axis of rotation + 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 + omega 1.5708; // rotation speed ==> 15 rad/s - startTime 0.5; // Start time of Geometry Rotating (s) + startTime 0.5; // Start time of Geometry Rotating (s) - endTime 9.5; // End time of Geometry Rotating (s) + endTime 9.5; // End time of Geometry Rotating (s) } } @@ -28,132 +28,132 @@ surfaces { topGate { - type cylinderWall; // type of wall + type cylinderWall; // type of wall - p1 (0.0 0.0 0.3); // begin point of cylinder axis + p1 (0.0 0.0 0.3); // begin point of cylinder axis - p2 (0.0 0.0 0.301); // end point of cylinder axis + p2 (0.0 0.0 0.301); // end point of cylinder axis - radius1 0.03; // radius at p1 + radius1 0.03; // radius at p1 - radius2 0.0001; // radius at p2 + radius2 0.0001; // radius at p2 - material solidProperty; // material of wall + material solidProperty; // material of wall - motion axisOfRotation; // motion component name + motion axisOfRotation; // motion component name } topCylinder { - type cylinderWall; // type of the wall + type cylinderWall; // type of the wall - p1 (0.0 0.0 0.28); // begin point of cylinder axis + p1 (0.0 0.0 0.28); // begin point of cylinder axis - p2 (0.0 0.0 0.3); // end point of cylinder axis + p2 (0.0 0.0 0.3); // end point of cylinder axis - radius1 0.03; // radius at p1 + radius1 0.03; // radius at p1 - radius2 0.03; // radius at p2 + radius2 0.03; // radius at p2 - resolution 36; // number of divisions + resolution 36; // number of divisions - material solidProperty; // material name of this wall + material solidProperty; // material name of this wall - motion axisOfRotation; // motion component name + motion axisOfRotation; // motion component name } coneShelltop { - type cylinderWall; // type of the wall + type cylinderWall; // type of the wall - p1 (0.0 0.0 0.2); // begin point of cylinder axis + p1 (0.0 0.0 0.2); // begin point of cylinder axis - p2 (0.0 0.0 0.28); // end point of cylinder axis + p2 (0.0 0.0 0.28); // end point of cylinder axis - radius1 0.1; // radius at p1 + radius1 0.1; // radius at p1 - radius2 0.03; // radius at p2 + radius2 0.03; // radius at p2 - resolution 36; // number of divisions + resolution 36; // number of divisions - material solidProperty; // material name of this wall + material solidProperty; // material name of this wall - motion axisOfRotation; // motion component name + motion axisOfRotation; // motion component name } cylinderShell { - type cylinderWall; // type of the wall + type cylinderWall; // type of the wall - 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.2); // end point of cylinder axis + p2 (0.0 0.0 0.2); // 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 solidProperty; // material name of this wall + material solidProperty; // material name of this wall - motion axisOfRotation; // motion component name + motion axisOfRotation; // motion component name } coneShelldown { - type cylinderWall; // type of the wall + type cylinderWall; // type of the wall - p1 (0.0 0.0 0.02); // begin point of cylinder axis + p1 (0.0 0.0 0.02); // 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.03; // radius at p1 + radius1 0.03; // 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 solidProperty; // material name of this wall + material solidProperty; // material name of this wall - motion axisOfRotation; // motion component name + motion axisOfRotation; // motion component name } bottomCylinder { - type cylinderWall; // type of the wall + type cylinderWall; // type of the wall - 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.02); // end point of cylinder axis + p2 (0.0 0.0 0.02); // end point of cylinder axis - radius1 0.03; // radius at p1 + radius1 0.03; // radius at p1 - radius2 0.03; // radius at p2 + radius2 0.03; // radius at p2 - resolution 36; // number of divisions + resolution 36; // number of divisions - material solidProperty; // material name of this wall + material solidProperty; // material name of this wall - motion axisOfRotation; // motion component name + motion axisOfRotation; // motion component name } exitGate { - type cylinderWall; // type of the wall + type cylinderWall; // type of the wall - p1 (0.0 0.0 -0.001); // begin point of cylinder axis + p1 (0.0 0.0 -0.001); // 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.03; // radius at p1 + radius1 0.03; // radius at p1 - radius2 0.0001; // radius at p2 + radius2 0.0001; // radius at p2 - resolution 36; // number of divisions + resolution 36; // number of divisions - material solidProperty; // material name of this wall + material solidProperty; // material name of this wall - motion axisOfRotation; // motion component name + motion axisOfRotation; // motion component name } } diff --git a/tutorials/sphereGranFlow/toteblender/settings/particlesDict b/tutorials/sphereGranFlow/toteblender/settings/particlesDict index 01fecb85..94c882fc 100644 --- a/tutorials/sphereGranFlow/toteblender/settings/particlesDict +++ b/tutorials/sphereGranFlow/toteblender/settings/particlesDict @@ -31,15 +31,15 @@ setFields { shapeAssigne { - selector stridedRange; // other options: box, cylinder, sphere, randomPoints + selector stridedRange; // other options: box, cylinder, sphere, randomPoints stridedRangeInfo { - begin 0; // begin index of points + begin 0; // begin index of points - end 24000; // end index of points + end 24000; // end index of points - stride 3; // stride for selector + stride 3; // stride for selector } fieldValue // fields that the selector is applied to @@ -53,27 +53,27 @@ setFields positionParticles // positions particles { - method ordered; // ordered positioning + method ordered; // other options: random and empty mortonSorting Yes; // perform initial sorting based on morton code? orderedInfo { - diameter 0.005; // minimum space between centers of particles + diameter 0.005; // minimum space between centers of particles - numPoints 24000; // number of particles in the simulation + numPoints 24000; // number of particles in the simulation - axisOrder (x y z); // axis order for filling the space with particles + axisOrder (x y z); // axis order for filling the space with particles } - regionType cylinder; // other options: cylinder and sphere + regionType cylinder; // other options: box and sphere cylinderInfo // cylinder for positioning particles { - p1 (0.0 0.0 0.09); // Coordinates of bottom cylinderRegion (m,m,m) + p1 (0.0 0.0 0.09); // Coordinates of bottom cylinderRegion (m,m,m) - p2 (0.0 0.0 0.21); // Coordinates of top cylinderRegion (m,m,m) + p2 (0.0 0.0 0.21); // Coordinates of top cylinderRegion (m,m,m) - radius 0.09; // radius of cylinder + radius 0.09; // radius of cylinder } } diff --git a/tutorials/sphereGranFlow/toteblender/settings/settingsDict b/tutorials/sphereGranFlow/toteblender/settings/settingsDict index 0977f56b..a317b7e8 100644 --- a/tutorials/sphereGranFlow/toteblender/settings/settingsDict +++ b/tutorials/sphereGranFlow/toteblender/settings/settingsDict @@ -6,29 +6,31 @@ objectName settingsDict; objectType dictionary; fileFormat ASCII; /*---------------------------------------------------------------------------*/ -run toteblender; +run toteblender; -dt 0.00004; // time step for integration (s) +dt 0.00004; // time step for integration (s) -startTime 0; // start time for simulation +startTime 0; // start time for simulation -endTime 10; // end time for simulation +endTime 10; // end time for simulation saveInterval 0.05; // time interval for saving the simulation -timePrecision 3; // maximum number of digits for time folder +timePrecision 3; // 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) -includeObjects (diameter); // save necessary (i.e., required) data on disk + +// 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 (Yes or No) +timersReport Yes; // report timers (Yes or No) -timersReportInterval 0.02; // time interval for reporting timers +timersReportInterval 0.02; // time interval for reporting timers