diff --git a/tutorials/sphereGranFlow/layeredSiloFilling/caseSetup/interaction b/tutorials/sphereGranFlow/layeredSiloFilling/caseSetup/interaction new file mode 100755 index 00000000..3b80d6ac --- /dev/null +++ b/tutorials/sphereGranFlow/layeredSiloFilling/caseSetup/interaction @@ -0,0 +1,72 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ + +objectName interaction; +objectType dicrionary; + +materials (lightMat heavyMat wallMat); // a list of materials names +densities (1000 1500.0 2500); // density of materials [kg/m3] + +contactListType sortedContactList; + +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); + + et (1.0 1.0 1.0 // coefficient of tangential restitution + 1.0 1.0 + 1.0); + + 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); + +} + +contactSearch +{ + method NBS; // method for broad search particle-particle + wallMapping cellsSimple; // method for broad search particle-wall + + NBSInfo + { + updateFrequency 10; // each 20 timesteps, update neighbor list + sizeRatio 1.1; // bounding box size to particle diameter (max) + } + + cellsSimpleInfo + { + updateFrequency 10; // each 20 timesteps, update neighbor list + cellExtent 0.6; // bounding box for particle-wall search (> 0.5) + } + +} \ No newline at end of file diff --git a/tutorials/sphereGranFlow/layeredSiloFilling/caseSetup/particleInsertion b/tutorials/sphereGranFlow/layeredSiloFilling/caseSetup/particleInsertion new file mode 100755 index 00000000..97cf663d --- /dev/null +++ b/tutorials/sphereGranFlow/layeredSiloFilling/caseSetup/particleInsertion @@ -0,0 +1,152 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ + +objectName particleInsertion; +objectType dicrionary; + + +active yes; // is insertion active? + +collisionCheck No; // not implemented for yes + +/* +five layers of particles are packed one-by-one using 5 insertion steps. +*/ + +layer0 +{ + type cylinderRegion; // type of insertion region + rate 15000; // insertion rate (particles/s) + startTime 0; // (s) + endTime 0.5; // (s) + interval 0.025; //s + + cylinderRegionInfo + { + 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 + { + lightSphere 1; // mixture composition of inserted particles + + } +} + +layer1 +{ + type cylinderRegion; + rate 15000; // (particles/s) + startTime 0.7; // (s) + endTime 1.2; // (s) + interval 0.025; //s + + cylinderRegionInfo + { + 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 + { + heavySphere 1; // only heavySphere + + } +} + +layer2 +{ + type cylinderRegion; + rate 15000; // (particles/s) + startTime 1.4; // (s) + endTime 1.9; // (s) + interval 0.025; //s + + cylinderRegionInfo + { + 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 +{ + type cylinderRegion; + rate 15000; // (particles/s) + startTime 2.1; // (s) + endTime 2.6; // (s) + interval 0.025; //s + + cylinderRegionInfo + { + 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 +{ + type cylinderRegion; + rate 15000; // (particles/s) + startTime 2.8; // (s) + endTime 3.3; // (s) + interval 0.025; //s + + cylinderRegionInfo + { + 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; + + } +} + diff --git a/tutorials/sphereGranFlow/layeredSiloFilling/caseSetup/sphereShape b/tutorials/sphereGranFlow/layeredSiloFilling/caseSetup/sphereShape new file mode 100755 index 00000000..db80a19f --- /dev/null +++ b/tutorials/sphereGranFlow/layeredSiloFilling/caseSetup/sphereShape @@ -0,0 +1,11 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ + +objectName sphereDict; +objectType sphereShape; + +names (lightSphere heavySphere); // names of shapes +diameters (0.007 0.007); // diameter of shapes +materials (lightMat heavyMat); // material names for shapes diff --git a/tutorials/sphereGranFlow/layeredSiloFilling/cleanThisCase b/tutorials/sphereGranFlow/layeredSiloFilling/cleanThisCase new file mode 100755 index 00000000..8a0ab919 --- /dev/null +++ b/tutorials/sphereGranFlow/layeredSiloFilling/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/layeredSiloFilling/runThisCase b/tutorials/sphereGranFlow/layeredSiloFilling/runThisCase new file mode 100755 index 00000000..c48d71fe --- /dev/null +++ b/tutorials/sphereGranFlow/layeredSiloFilling/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/layeredSiloFilling/settings/geometryDict b/tutorials/sphereGranFlow/layeredSiloFilling/settings/geometryDict new file mode 100644 index 00000000..b3d427d3 --- /dev/null +++ b/tutorials/sphereGranFlow/layeredSiloFilling/settings/geometryDict @@ -0,0 +1,51 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ + +objectName geometryDict; +objectType dictionary; + +// motion model: all surfaces are fixed +motionModel fixedWall; + +surfaces +{ + + cylinderShell + { + type cylinderWall; // type of the wall + 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; // type of the wall + 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.02; // 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; + p1 (-0.02 -0.02 -0.1); + p2 ( 0.02 -0.02 -0.1); + p3 ( 0.02 0.02 -0.1); + p4 (-0.02 0.02 -0.1); + material wallMat; + } + +} + diff --git a/tutorials/sphereGranFlow/layeredSiloFilling/settings/particlesDict b/tutorials/sphereGranFlow/layeredSiloFilling/settings/particlesDict new file mode 100644 index 00000000..fa3edaf3 --- /dev/null +++ b/tutorials/sphereGranFlow/layeredSiloFilling/settings/particlesDict @@ -0,0 +1,31 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ + +objectName particlesDict; +objectType dictionary; + +setFields +{ + defaultValue + { + velocity realx3 (0 0 0); // linear velocity (m/s) + acceleration realx3 (0 0 0); // linear acceleration (m/s2) + rotVelocity realx3 (0 0 0); // rotational velocity (rad/s) + shapeName word lightSphere; // name of the particle shape + } + + selectors + {} +} + +// positions particles +positionParticles +{ + method empty; // creates the required fields with zero particles (empty). + + maxNumberOfParticles 50000; // maximum number of particles in the simulation + mortonSorting Yes; // perform initial sorting based on morton code? + +} diff --git a/tutorials/sphereGranFlow/layeredSiloFilling/settings/settingsDict b/tutorials/sphereGranFlow/layeredSiloFilling/settings/settingsDict new file mode 100644 index 00000000..eb08a1d3 --- /dev/null +++ b/tutorials/sphereGranFlow/layeredSiloFilling/settings/settingsDict @@ -0,0 +1,36 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName settingsDict; +objectType dictionary;; + +run layerdSiloFilling; + +dt 0.00001; // time step for integration (s) + +startTime 0; // start time for simulation + +endTime 5; // end time for simulation + +saveInterval 0.05; // time interval for saving the simulation + +timePrecision 6; // maximum number of digits for time folder + +g (0 0 -9.8); // gravity vector (m/s2) + +/* + Simulation domain + every particles that goes outside this domain is deleted. +*/ +domain +{ + min (-0.1 -0.1 -0.1); + max ( 0.1 0.1 0.40); +} + +integrationMethod AdamsBashforth3; // integration method + +timersReport Yes; // report timers? + +timersReportInterval 0.01; // time interval for reporting timers