diff --git a/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/README.md b/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/README.md new file mode 100644 index 00000000..6aaa5d8f --- /dev/null +++ b/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/README.md @@ -0,0 +1,16 @@ +# Simulating a simple homogenization silo using periodic boundary + +## Problem +A homogenization silo is used to mix particles inside a silo using the circulation of particles. A pneumatic conveying system is used to carry particles at the exit and re-enter them from the top. Here, we use a `periodic` boundary to simulate the action of the pneumatic conveyor system for circulating particles. Particles that are exiting from the bottom are re-entered from top using this boundary (`periodic`). + +
+ +A view of homogenization silo + + + +
+ +*** + + diff --git a/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/caseSetup/interaction b/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/caseSetup/interaction new file mode 100755 index 00000000..f5fc4f23 --- /dev/null +++ b/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/caseSetup/interaction @@ -0,0 +1,67 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName interaction; +objectType dicrionary; +fileFormat ASCII; +/*---------------------------------------------------------------------------*/ +materials (lightMat heavyMat wallMat); // a list of materials names + +densities (1000 1500.0 2500); // density of materials [kg/m3] + +contactListType sortedContactList; + +contactSearch +{ + method NBS; // method for broad search particle-particle + + updateInterval 10; + + sizeRatio 1.1; + + cellExtent 0.55; + + adjustableBox No; +} + +model +{ + contactForceModel nonLinearLimited; + + rollingFrictionModel normal; + + /* + + Property (lightMat-lightMat lightMat-heavyMat lightMat-wallMat + heavyMat-heavyMat heavyMat-wallMat + wallMat-wallMat ); + */ + + 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] + 0.8e6 0.8e6 + 0.8e6); + + 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 + 0.97 0.85 + 1.00); + + mu (0.65 0.65 0.35 // dynamic friction + 0.65 0.35 + 0.35); + + mur (0.1 0.1 0.1 // rolling friction + 0.1 0.1 + 0.1); +} + + + diff --git a/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/caseSetup/particleInsertion b/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/caseSetup/particleInsertion new file mode 100755 index 00000000..1ab71456 --- /dev/null +++ b/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/caseSetup/particleInsertion @@ -0,0 +1,214 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName particleInsertion; +objectType dicrionary; +fileFormat ASCII; +/*---------------------------------------------------------------------------*/ + +active Yes; // is insertion active -> yes or no + +/* + one layers of particles are packed +*/ +layer0 +{ + timeControl simulationTime; + + regionType cylinder; // type of insertion region + + rate 5100; // insertion rate (particles/s) + + startTime 0; // (s) + + endTime 0.5; // (s) + + insertionInterval 0.025; // s + + cylinderInfo + { + radius 0.09; // radius of cylinder (m) + + p1 (0.0 0.0 0.1); // (m,m,m) + + p2 (0.0 0.0 0.11); // (m,m,m) + } + + setFields + { + velocity realx3 (0.0 0.0 -0.6); // initial velocity of inserted particles + } + + mixture + { + parType1 1; // mixture composition of inserted particles + } +} + +layer1 +{ + timeControl simulationTime; + + regionType cylinder; // type of insertion region + + rate 5100; // insertion rate (particles/s) + + startTime 0.7; // (s) + + endTime 1.2; // (s) + + insertionInterval 0.025; // s + + + cylinderInfo + { + radius 0.09; + p1 (0.0 0.0 0.16 ); // (m,m,m) + p2 (0.0 0.0 0.17); // (m,m,m) + } + + setFields + { + velocity realx3 (0.0 0.0 -0.6); + } + + mixture + { + parType2 1; // only parType2 + + } +} + +layer2 +{ + timeControl simulationTime; + + regionType cylinder; // type of insertion region + + rate 5100; // insertion rate (particles/s) + + startTime 1.4; // (s) + + endTime 1.9; // (s) + + insertionInterval 0.025; // s + + cylinderInfo + { + radius 0.09; + p1 ( 0.0 0.0 0.2 ); // (m,m,m) + p2 ( 0.0 0.0 0.21); // (m,m,m) + } + + setFields + { + velocity realx3 (0.0 0.0 -0.6); + } + + mixture + { + lightSphere 1; // only lightSphere + + } +} + +layer3 +{ + timeControl simulationTime; + + regionType cylinder; // type of insertion region + + rate 5100; // insertion rate (particles/s) + + startTime 2.1; // (s) + + endTime 2.6; // (s) + + insertionInterval 0.025; // s + + + cylinderInfo + { + radius 0.09; + p1 ( 0.0 0.0 0.28 ); // (m,m,m) + p2 ( 0.0 0.0 0.29); // (m,m,m) + } + + setFields + { + velocity realx3 (0.0 0.0 -0.6); + } + + mixture + { + heavySphere 1; + + } +} + +layer4 +{ + timeControl simulationTime; + + regionType cylinder; // type of insertion region + + rate 5100; // insertion rate (particles/s) + + startTime 2.8; // (s) + + endTime 3.3; // (s) + + insertionInterval 0.025; // s + + cylinderInfo + { + radius 0.09; + p1 ( 0.0 0.0 0.37 ); // (m,m,m) + p2 ( 0.0 0.0 0.38); // (m,m,m) + } + + setFields + { + velocity realx3 (0.0 0.0 -0.6); + } + + mixture + { + lightSphere 1; + + } +} + +layer5 +{ + timeControl simulationTime; + + regionType cylinder; // type of insertion region + + rate 5100; // insertion rate (particles/s) + + startTime 3.4; // (s) + + endTime 3.9; // (s) + + insertionInterval 0.025; // s + + cylinderInfo + { + radius 0.09; + p1 ( 0.0 0.0 0.38 ); // (m,m,m) + p2 ( 0.0 0.0 0.39); // (m,m,m) + } + + setFields + { + velocity realx3 (0.0 0.0 -0.6); + } + + mixture + { + heavySphere 1; + + } +} \ No newline at end of file diff --git a/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/caseSetup/shapes b/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/caseSetup/shapes new file mode 100755 index 00000000..e4215a55 --- /dev/null +++ b/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/caseSetup/shapes @@ -0,0 +1,15 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName sphereDict; +objectType sphereShape; +fileFormat ASCII; +/*---------------------------------------------------------------------------*/ +names (parType1 parType2); // names of shapes + +diameters (0.00885 0.0089); // diameter of shapes + +materials (lightMat heavyMat); // material names for shapes + + diff --git a/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/cleanThisCase b/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/cleanThisCase new file mode 100755 index 00000000..8a0ab919 --- /dev/null +++ b/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/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/homogenizationSilo-PeriodicBoundary/homoSilo.jpeg b/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/homoSilo.jpeg new file mode 100644 index 00000000..5add888b Binary files /dev/null and b/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/homoSilo.jpeg differ diff --git a/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/runThisCase b/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/runThisCase new file mode 100755 index 00000000..e774b13c --- /dev/null +++ b/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/runThisCase @@ -0,0 +1,24 @@ +#!/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 + +echo "\n<--------------------------------------------------------------------->" +echo "4) Converting to vtk" +echo "<--------------------------------------------------------------------->\n" +pFlowToVTK --fields diameter velocity id --binary + + +#------------------------------------------------------------------------------ diff --git a/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/settings/domainDict b/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/settings/domainDict new file mode 100755 index 00000000..606db9b1 --- /dev/null +++ b/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/settings/domainDict @@ -0,0 +1,52 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName domainDict; +objectType dictionary; +fileFormat ASCII; +/*---------------------------------------------------------------------------*/ + +// Simulation domain: every particles that goes outside this domain will be deleted +globalBox +{ + min (-0.11 -0.11 -0.15); + + max ( 0.11 0.11 0.4); +} + +boundaries +{ + + left + { + type exit; + } + + right + { + type exit; + } + + bottom + { + type exit; + } + + top + { + type exit; + } + + rear + { + type periodic; + } + + front + { + type periodic; + } +} + + diff --git a/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/settings/geometryDict b/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/settings/geometryDict new file mode 100755 index 00000000..b72f1c07 --- /dev/null +++ b/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/settings/geometryDict @@ -0,0 +1,87 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName geometryDict; +objectType dictionary; +fileFormat ASCII; +/*---------------------------------------------------------------------------*/ + +motionModel rotatingAxis; + +rotatingAxisInfo +{ + // for opening the gate of silo between time 4.1 and 5.1 s + gateMotion + { + p1 (-0.04 -0.04 -0.1); + p2 (-0.04 -0.04 0.0); + omega 3.14; + startTime 4.1; + endTime 5.1; + } +} + +surfaces +{ + cylinderShell + { + type cylinderWall; // other options: cuboidWall and planeWall + + p1 (0.0 0.0 0.0); // begin point of cylinder axis + + p2 (0.0 0.0 0.4); // end point of cylinder axis + + radius1 0.1; // radius at p1 + + radius2 0.1; // radius at p2 + + resolution 36; // number of divisions + + material wallMat; // material name of this wall + } + + coneShell + { + type cylinderWall; // other options: cuboidWall and planeWall + + p1 (0.0 0.0 -0.1); // begin point of cylinder axis + + p2 (0.0 0.0 0.0); // end point of cylinder axis + + radius1 0.04; // radius at p1 + + radius2 0.1; // radius at p2 + + resolution 36; // number of divisions + + material wallMat; // material name of this wall + } + + /* + This is a plane wall at the exit of silo + */ + + exitGate + { + type planeWall; // other options: cuboidWall and cylinderWall + + p1 (-0.04 -0.04 -0.1); // first point of the wall + + p2 ( 0.04 -0.04 -0.1); // second point of the wall + + p3 ( 0.04 0.04 -0.1); // third point of the wall + + p4 (-0.04 0.04 -0.1); // fourth point of the wall + + material wallMat; // material name of the wall + + motion gateMotion; + } +} + + + + + + diff --git a/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/settings/particlesDict b/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/settings/particlesDict new file mode 100755 index 00000000..a01a553e --- /dev/null +++ b/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/settings/particlesDict @@ -0,0 +1,36 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName particlesDict; +objectType dictionary; +fileFormat ASCII; +/*---------------------------------------------------------------------------*/ +setFields +{ + /* + Default value for fields defined for particles + These fields should always be defined for simulations with + spherical particles. + */ + + defaultValue + { + velocity realx3 (0 0 0); // linear velocity (m/s) + + acceleration realx3 (0 0 0); // linear acceleration (m/s2) + + rVelocity realx3 (0 0 0); // rotational velocity (rad/s) + + shapeName word parType1; // name of the particle shape + } + + selectors + {} +} + +positionParticles +{ + method empty; // empty simulation +} + diff --git a/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/settings/settingsDict b/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/settings/settingsDict new file mode 100755 index 00000000..0f119f33 --- /dev/null +++ b/tutorials/sphereGranFlow/homogenizationSilo-PeriodicBoundary/settings/settingsDict @@ -0,0 +1,41 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName settingsDict; +objectType dictionary; +fileFormat ASCII; +/*---------------------------------------------------------------------------*/ +run homogenizationSilo; + +dt 0.00001; // time step for integration (s) + +startTime 0.0; // start time for simulation + +endTime 20; // end time for simulation + +saveInterval 0.05; // time interval for saving the simulation + +timePrecision 4; // maximum number of digits for time folder + +g (0 0 -9.8); // gravity vector (m/s2) + + +// overrides the default behavior +includeObjects (diameter); + +// exclude unnecessary data from saving on disk +excludeObjects (rVelocity.dy1 rVelocity.dy2 rVelocity.dy3 + pStructPosition.dy1 pStructPosition.dy2 pStructPosition.dy3 + pStructVelocity.dy1 pStructVelocity.dy2 pStructVelocity.dy3); + +integrationMethod AdamsBashforth4; // integration method + +writeFormat binary; // data writting format (ascii or binary) + +timersReport Yes; // report timers + +timersReportInterval 0.1; // time interval for reporting timers + + +