diff --git a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/interaction b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/interaction index fc7dc5a1..b42c5147 100644 --- a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/interaction +++ b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/interaction @@ -6,73 +6,62 @@ objectName interaction; objectType dicrionary; fileFormat ASCII; /*---------------------------------------------------------------------------*/ +materials (lightMat heavyMat wallMat); // a list of materials names -// a list of materials names -materials (lightMat heavyMat wallMat); -// density of materials [kg/m3] -densities (1000 1500 2500); +densities (1000 1500 2500); // density of materials [kg/m3] -contactListType sortedContactList; +contactListType sortedContactList; + +contactSearch +{ + method NBS; // method for broad search + + updateInterval 10; + + sizeRatio 1.1; + + cellExtent 0.55; + + adjustableBox Yes; +} model { - contactForceModel nonLinearLimited; - rollingFrictionModel normal; + contactForceModel nonLinearLimited; + + rollingFrictionModel normal; /* - Property (lightMat-lightMat lightMat-heavyMat lightMat-wallMat - heavyMat-heavyMat heavyMat-wallMat - wallMat-wallMat ); + 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] + 1.0e6); // Young 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); -} -contactSearch -{ -// method for broad search particle-particle - method NBS; -// method for broad search particle-wall - wallMapping cellMapping; + 0.8e6); // Shear modulus [Pa] - NBSInfo - { - // each 20 timesteps, update neighbor list - updateFrequency 10; - // bounding box size to particle diameter (max) - sizeRatio 1.1; - } + nu (0.25 0.25 0.25 + 0.25 0.25 + 0.25); // Poisson's ratio [-] - cellMappingInfo - { - // each 20 timesteps, update neighbor list - updateFrequency 10; - // bounding box for particle-wall search (> 0.5) - cellExtent 0.6; - } + en (0.97 0.97 0.85 + 0.97 0.85 + 1.00); // coefficient of normal restitution + + et (1.0 1.0 1.0 + 1.0 1.0 + 1.0); // coefficient of tangential restitution + + mu (0.65 0.65 0.35 + 0.65 0.35 + 0.35); // dynamic friction + + mur (0.1 0.1 0.1 + 0.1 0.1 + 0.1); // rolling friction } diff --git a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/particleInsertion b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/particleInsertion index 86ecbdd9..e839f1ac 100644 --- a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/particleInsertion +++ b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/particleInsertion @@ -6,82 +6,81 @@ objectName particleInsertion; objectType dicrionary; fileFormat ASCII; /*---------------------------------------------------------------------------*/ +active Yes; // is insertion active -> Yes or No -// is insertion active? -active yes; -// not implemented for yes -collisionCheck No; +checkForCollision No; // is checked -> Yes or No /* -Two layers of particles are packed one-by-one using 1 insertion steps. + Two layers of particles are packed one-by-one using 1 insertion steps */ -// 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 +layerrightregion // Right Layer Region +{ + timeControl simulationTime; + + regionType cylinder; // type of insertion region + + rate 12500; // Right Region Particles Insertion Rate (particles/s) + + startTime 0; // Start time of LightParticles insertion (s) + + endTime 1; // End time of LightParticles insertion (s) + + insertionInterval 0.025; // Time Interval of LightParticles insertion (s) + + cylinderInfo { -// 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; + + p2 (-0.15 0.25 0.05); // + + p1 (-0.15 0.24 0.05); // Bottom of cylinderRegion (m,m,m) + + radius 0.035; // radius of cylinder (m) } setFields { -// initial velocity of inserted particles - velocity realx3 (0.0 -0.6 0.0); + velocity realx3 (0.0 -0.6 0.0); // initial velocity of inserted particles } mixture { -// mixture composition of inserted particles - smallSphere 1; + smallSphere 1; // mixture composition of inserted particles } } -// Left Layer Region - layerleftregion -{ - type cylinderRegion; -//Left Region Particles Insertion Rate (particles/s) - rate 7500; -// 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 +layerleftregion // Left Layer Region +{ + timeControl simulationTime; + + regionType cylinder; // type of insertion region + + rate 7500; // Left Region Particles Insertion Rate (particles/s) + + startTime 0; // Start time of LightParticles insertion (s) + + endTime 1; // End time of LightParticles insertion (s) + + insertionInterval 0.025; // Time Interval of LightParticles insertion (s) + + cylinderInfo { -// Coordinates of cylinderRegion (m,m,m) - p2 (-0.23 0.25 0.05); - p1 (-0.23 0.24 0.05); -// radius of cylinder (m) - radius 0.035; + p2 (-0.23 0.25 0.05); // Top of cylinderRegion (m,m,m) + + p1 (-0.23 0.24 0.05); // Bottom of cylinderRegion (m,m,m) + + radius 0.035; // radius of cylinder (m) } setFields { - velocity realx3 (0.0 -0.6 0.0); + velocity realx3 (0.0 -0.6 0.0); // initial velocity of inserted particles } mixture { - largeSphere 1; // only heavySphere - + largeSphere 1; // only heavySphere } } diff --git a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/shapes b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/shapes new file mode 100644 index 00000000..ab894074 --- /dev/null +++ b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/shapes @@ -0,0 +1,13 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName sphereDict; +objectType sphereShape; +fileFormat ASCII; +/*---------------------------------------------------------------------------*/ +names (smallSphere largeSphere); // names of shapes + +diameters (0.004 0.005); // diameter of shapes (m) + +materials (lightMat heavyMat); // material names for shapes diff --git a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/domainDict b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/domainDict new file mode 100755 index 00000000..1dbe91fa --- /dev/null +++ b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/domainDict @@ -0,0 +1,64 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName domainDict; +objectType dictionary; +fileFormat ASCII; +/*---------------------------------------------------------------------------*/ +globalBox // Simulation domain: every particles that goes outside this domain will be deleted +{ + min (-0.328 0.095 -0.025); // lower corner point of the box + + max (-0.068 0.355 0.125); // upper corner point of the box +} + +decomposition +{ + direction z; +} + +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 + } + + right + { + type exit; // other options: periodict, reflective + } + + bottom + { + type exit; // other options: periodict, reflective + } + + top + { + type exit; // other options: periodict, reflective + } + + rear + { + type exit; // other options: periodict, reflective + } + + front + { + type exit; // other options: periodict, reflective + } +} diff --git a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/geometryDict b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/geometryDict index 5485c307..cec4324a 100644 --- a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/geometryDict +++ b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/geometryDict @@ -6,74 +6,77 @@ objectName geometryDict; objectType dictionary; fileFormat ASCII; /*---------------------------------------------------------------------------*/ +motionModel rotatingAxis; -// motion model: all surfaces are fixed -motionModel rotatingAxisMotion; +rotatingAxisInfo +{ + rotAxis + { + p1 (-0.1974 0.2269 0); // first point for the axis of rotation + + p2 (-0.1974 0.2269 0.1); // second point for the axis of rotation + + omega 2.38733; // rotation speed (rad/s) => 15 rpm + + startTime 2; // Start time of Geometry Rotating + + endTime 9.5; // End time of Geometry Rotating + } +} 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; + type stlWall; // type of the wall + + file Body.stl; // file name in stl folder + + material wallMat; // material name of this wall + + motion rotAxis; // motion component name } - /* This is a Cylinder Wall at the rear of cylinder */ + + /* + 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; + type cylinderWall; // type of the wall + + p1 (-0.1974 0.2269 -0.001); // first point for the axis of rotation + + p2 (-0.1974 0.2269 0.0); // second point for the axis of rotation + + radius1 0.0001; // Radius of p1 + + radius2 0.12; // Radius of p2 + + material wallMat; // material name of the wall + + motion rotAxis; // motion component name } - /* This a cylinder Wall at the front of Cylinder */ + + /* + 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; - } -} - // information for rotatingAxisMotion motion model -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; + type cylinderWall; // type of the wall + + p1 (-0.1974 0.2269 0.0989); // first point for the axis of rotation + + p2 (-0.1974 0.2269 0.0990); // second point for the axis of rotation + + radius1 0.0001; // Radius of p1 + + radius2 0.12; // Radius of p2 + + material wallMat; // material name of the wall + + motion rotAxis; // motion component name } } + diff --git a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/particlesDict b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/particlesDict index c28b8ad0..21113b1b 100644 --- a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/particlesDict +++ b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/particlesDict @@ -6,33 +6,95 @@ 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 { - // linear velocity (m/s) - velocity realx3 (0 0 0); - // linear acceleration (m/s2) - acceleration realx3 (0 0 0); - // rotational velocity (rad/s) - rVelocity realx3 (0 0 0); - // name of the particle shape - shapeName word smallSphere; + 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 smallSphere; // name of the particle shape } selectors - {} + { + shapeAssigne + { + selector stridedRange; // other options: box, cylinder, sphere, randomPoints + + stridedRangeInfo + { + begin 0; // begin index of points + + end 20000; // end index of points + + stride 3; // stride for selector + } + + fieldValue // fields that the selector is applied to + { + shapeName word sphere1; // sets shapeName of the selected points to largeSphere + } + } + } } -// positions particles -positionParticles +positionParticles // positions particles { - // creates the required spaces with zero particles (empty). - method empty; - // maximum number of particles in the simulation - maxNumberOfParticles 20050; - // perform initial sorting based on morton code? - mortonSorting Yes; + 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 + + numPoints 20000; // number of particles in the simulation + + axisOrder (z y x); // axis order for filling the space with particles + } + + regionType box; // other options: cylinder and sphere + + boxInfo // box information for positioning particles + { + min (-0.08 -0.08 0.015); // lower corner point of the box + + max ( 0.08 0.08 0.2); // upper corner point of the box + } } + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/settingsDict b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/settingsDict index 2fffee5b..f3b480f0 100644 --- a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/settingsDict +++ b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/settingsDict @@ -6,43 +6,29 @@ objectName settingsDict; objectType dictionary; fileFormat ASCII; /*---------------------------------------------------------------------------*/ +run RotatingDrumwithBaffles; -run RotatingDrumwithBaffles; +dt 0.00001; // time step for integration (s) -// time step for integration (s) -dt 0.00001; +startTime 0; // start time for simulation -// start time for simulation -startTime 0; +endTime 10; // end time for simulation -// end time for simulation -endTime 10; +saveInterval 0.05; // time interval for saving the simulation -// time interval for saving the simulation -saveInterval 0.05; +timePrecision 6; // maximum number of digits for time folder -// maximum number of digits for time folder -timePrecision 6; +g (0 -9.8 0); // gravity vector (m/s2) -// gravity vector (m/s2) -g (0 -9.8 0); +includeObjects (diameter); // save necessary (i.e., required) data on disk -/*Simulation domain*/ -/* Every particles that goes outside this domain is deleted.*/ -domain -{ - min (-0.328 0.095 -0.025); - max (-0.068 0.355 0.125); -} +// exclude unnecessary data from saving on disk +excludeObjects (rVelocity.dy1 pStructPosition.dy1 pStructVelocity.dy1); -// integration method -integrationMethod AdamsBashforth3; +integrationMethod AdamsBashforth2; // integration method -// binary or ascii for saving data -writeFormat ascii; +writeFormat ascii; // data writting format (ascii or binary) -// report timers? -timersReport Yes; +timersReport Yes; // report timers (Yes or No) -// time interval for reporting timers -timersReportInterval 0.01; +timersReportInterval 0.01; // time interval for reporting timers