From 018770a1f139c534e760f51fcdda598d440b9c16 Mon Sep 17 00:00:00 2001 From: ramin1728 Date: Sat, 28 Dec 2024 13:31:17 +0330 Subject: [PATCH 1/4] updated V1.0 RotaryDrumWithBaffle --- .../caseSetup/interaction | 99 +++++++-------- .../caseSetup/particleInsertion | 97 +++++++-------- .../RotatingDrumWithBaffles/caseSetup/shapes | 13 ++ .../settings/domainDict | 64 ++++++++++ .../settings/geometryDict | 117 +++++++++--------- .../settings/particlesDict | 98 ++++++++++++--- .../settings/settingsDict | 42 +++---- 7 files changed, 323 insertions(+), 207 deletions(-) create mode 100644 tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/shapes create mode 100755 tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/domainDict 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 From 0d5f8a98a2cc032c254b497fe485817c6c8b0a76 Mon Sep 17 00:00:00 2001 From: ramin1728 Date: Sat, 28 Dec 2024 13:46:09 +0330 Subject: [PATCH 2/4] updated V1.0 screwConveyor --- .../screwConveyor/caseSetup/interaction | 68 +++++++-------- .../screwConveyor/caseSetup/particleInsertion | 38 +++++---- .../screwConveyor/caseSetup/shapes | 13 +++ .../screwConveyor/settings/domainDict | 64 ++++++++++++++ .../screwConveyor/settings/geometryDict | 50 ++++++----- .../screwConveyor/settings/particlesDict | 85 +++++++++++++------ .../screwConveyor/settings/settingsDict | 34 ++++---- 7 files changed, 236 insertions(+), 116 deletions(-) create mode 100755 tutorials/sphereGranFlow/screwConveyor/caseSetup/shapes create mode 100755 tutorials/sphereGranFlow/screwConveyor/settings/domainDict diff --git a/tutorials/sphereGranFlow/screwConveyor/caseSetup/interaction b/tutorials/sphereGranFlow/screwConveyor/caseSetup/interaction index 3aed0a68..6835299c 100755 --- a/tutorials/sphereGranFlow/screwConveyor/caseSetup/interaction +++ b/tutorials/sphereGranFlow/screwConveyor/caseSetup/interaction @@ -6,49 +6,45 @@ objectName interaction; objectType dicrionary; fileFormat ASCII; /*---------------------------------------------------------------------------*/ +materials (prop1); // a list of materials names -materials (prop1); // a list of materials names -densities (1000.0); // density of materials [kg/m3] +densities (1000.0); // density of materials [kg/m3] contactListType sortedContactList; -model -{ - contactForceModel nonLinearNonLimited; - rollingFrictionModel normal; - - Yeff (1.0e6); // Young modulus [Pa] - - Geff (0.8e6); // Shear modulus [Pa] - - nu (0.25); // Poisson's ratio [-] - - en (0.7); // coefficient of normal restitution - - et (1.0); // coefficient of tangential restitution - - mu (0.3); // dynamic friction - - mur (0.1); // rolling friction - -} - - contactSearch { - method NBS; // method for broad search particle-particle - wallMapping cellMapping; // method for broad search particle-wall + method NBS; // method for broad search + + updateInterval 10; - NBSInfo - { - updateFrequency 10; // each 20 timesteps, update neighbor list - sizeRatio 1.1; // bounding box size to particle diameter (max) - } + sizeRatio 1.1; - cellMappingInfo - { - updateFrequency 10; // each 20 timesteps, update neighbor list - cellExtent 0.6; // bounding box for particle-wall search (> 0.5) - } + cellExtent 0.55; + adjustableBox Yes; } + +model +{ + contactForceModel nonLinearNonLimited; + + rollingFrictionModel normal; + + Yeff (1.0e6); // Young modulus [Pa] + + Geff (0.8e6); // Shear modulus [Pa] + + nu (0.25); // Poisson's ratio [-] + + en (0.7); // coefficient of normal restitution + + et (1.0); // coefficient of tangential restitution + + mu (0.3); // dynamic friction + + mur (0.1); // rolling friction +} + + + diff --git a/tutorials/sphereGranFlow/screwConveyor/caseSetup/particleInsertion b/tutorials/sphereGranFlow/screwConveyor/caseSetup/particleInsertion index bab05611..1a2b40e7 100755 --- a/tutorials/sphereGranFlow/screwConveyor/caseSetup/particleInsertion +++ b/tutorials/sphereGranFlow/screwConveyor/caseSetup/particleInsertion @@ -6,39 +6,45 @@ objectName particleInsertion; objectType dicrionary; fileFormat ASCII; /*---------------------------------------------------------------------------*/ +active Yes; // is insertion active -> Yes or No - -active yes; // is insertion active? - -collisionCheck No; // not implemented for yes +checkForCollision No; // is checked -> Yes or No /* -five layers of particles are packed one-by-one using 5 insertion steps. + five layers of particles are packed one-by-one using 5 insertion steps */ layer0 { - type cylinderRegion; // type of insertion region - rate 5000; // insertion rate (particles/s) - startTime 0; // (s) - endTime 100; // (s) - interval 0.03; //s + timeControl simulationTime; - cylinderRegionInfo + regionType cylinder; // type of insertion region + + rate 5000; // Particles Insertion Rate (particles/s) + + startTime 0; // Start time of LightParticles insertion (s) + + endTime 100; // End time of LightParticles insertion (s) + + insertionInterval 0.03; // Time Interval of LightParticles insertion (s) + + cylinderInfo { - radius 0.09; // radius of cylinder (m) - p1 (0.22 0.73 0.25); // (m,m,m) - p2 (0.22 0.742 0.25); // (m,m,m) + p1 (0.22 0.730 0.25); // Bottom of cylinderRegion(m,m,m) + + p2 (0.22 0.742 0.25); // Top of cylinderRegion (m,m,m) + + radius 0.09; // radius of cylinder (m) } setFields { - velocity realx3 (0.0 -0.6 -0); // initial velocity of inserted particles + velocity realx3 (0.0 -0.6 -0); // initial velocity of inserted particles } mixture { - sphere1 1; // mixture composition of inserted particles + sphere1 1; // mixture composition of inserted particles } } diff --git a/tutorials/sphereGranFlow/screwConveyor/caseSetup/shapes b/tutorials/sphereGranFlow/screwConveyor/caseSetup/shapes new file mode 100755 index 00000000..ba8339e0 --- /dev/null +++ b/tutorials/sphereGranFlow/screwConveyor/caseSetup/shapes @@ -0,0 +1,13 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName sphereDict; +objectType sphereShape; +fileFormat ASCII; +/*---------------------------------------------------------------------------*/ +names (sphere1); // names of shapes + +diameters (0.01); // diameter of shapes + +materials (prop1); // material names for shapes diff --git a/tutorials/sphereGranFlow/screwConveyor/settings/domainDict b/tutorials/sphereGranFlow/screwConveyor/settings/domainDict new file mode 100755 index 00000000..c0b10394 --- /dev/null +++ b/tutorials/sphereGranFlow/screwConveyor/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.0 -0.06 0.001); // lower corner point of the box + + max (1.2 1 0.5); // 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/screwConveyor/settings/geometryDict b/tutorials/sphereGranFlow/screwConveyor/settings/geometryDict index 1d339289..373bfc3c 100644 --- a/tutorials/sphereGranFlow/screwConveyor/settings/geometryDict +++ b/tutorials/sphereGranFlow/screwConveyor/settings/geometryDict @@ -6,40 +6,48 @@ objectName geometryDict; objectType dictionary; fileFormat ASCII; /*---------------------------------------------------------------------------*/ +motionModel rotatingAxis; // motion model: rotating object around an axis -// motion model: rotating object around an axis -motionModel rotatingAxisMotion; +rotatingAxisInfo +{ + rotAxis + { + p1 (1.09635 0.2010556 0.22313511); // first point for the axis of rotation + + p2 (0.0957492 0.201556 0.22313511); // second point for the axis of rotation + + omega 3; // rotation speed (rad/s) + + startTime 5; // Start time of Geometry Rotating + + endTime 30; // End time of Geometry Rotating + } +} surfaces { helix { - type stlWall; // type of the wall - file helix.stl; // file name in stl folder - material prop1; // material name of this wall - motion rotAxis; // motion component name + type stlWall; // type of the wall + + file helix.stl; // file name in stl folder + + material prop1; // material name of this wall + + motion rotAxis; // motion component name } shell { - type stlWall; // type of the wall - file shell.stl; // file name in stl folder - material prop1; // material name of this wall - motion none; // motion component name - } + type stlWall; // type of the wall -} + file shell.stl; // file name in stl folder + material prop1; // material name of this wall -rotatingAxisMotionInfo -{ - rotAxis - { - p1 (1.09635 0.2010556 0.22313511); // first point for the axis of rotation - p2 (0.0957492 0.201556 0.22313511); // second point for the axis of rotation - omega 3; // rotation speed (rad/s) - startTime 5; - endTime 30; + motion none; // motion component name } } + + diff --git a/tutorials/sphereGranFlow/screwConveyor/settings/particlesDict b/tutorials/sphereGranFlow/screwConveyor/settings/particlesDict index f5c954f1..e00b9a83 100644 --- a/tutorials/sphereGranFlow/screwConveyor/settings/particlesDict +++ b/tutorials/sphereGranFlow/screwConveyor/settings/particlesDict @@ -6,35 +6,72 @@ objectName particlesDict; objectType dictionary; fileFormat ASCII; /*---------------------------------------------------------------------------*/ - - -// 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 - -} - 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 sphere1; + 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 sphere1; // name of the particle shape } selectors - {} + { + shapeAssigne + { + selector stridedRange; // other options: box, cylinder, sphere, randomPoints + + stridedRangeInfo + { + begin 0; // begin index of points + + end 5000; // 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 + } + } + } } + +positionParticles // positions particles +{ + method ordered; // other options: random and empty + + mortonSorting Yes; // perform initial sorting based on morton code? + + orderedInfo + { + diameter 0.01; // minimum space between centers of particles + + numPoints 5000; // 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 1); // upper corner point of the box + } +} + diff --git a/tutorials/sphereGranFlow/screwConveyor/settings/settingsDict b/tutorials/sphereGranFlow/screwConveyor/settings/settingsDict index 410fcd2b..f3fb82a7 100644 --- a/tutorials/sphereGranFlow/screwConveyor/settings/settingsDict +++ b/tutorials/sphereGranFlow/screwConveyor/settings/settingsDict @@ -6,33 +6,29 @@ objectName settingsDict; objectType dictionary; fileFormat ASCII; /*---------------------------------------------------------------------------*/ +run screwConveyor; -run layerdSiloFilling; +dt 0.0001; // time step for integration (s) -dt 0.0001; // time step for integration (s) +startTime 0; // start time for simulation -startTime 0; // start time for simulation +endTime 20; // end time for simulation -endTime 20; // end time for simulation +saveInterval 0.05; // time interval for saving the simulation -saveInterval 0.05; // time interval for saving the simulation +timePrecision 6; // maximum number of digits for time folder -timePrecision 6; // maximum number of digits for time folder +g (0 -9.8 0); // gravity vector (m/s2) -g (0 -9.8 0); // gravity vector (m/s2) +includeObjects (diameter); // save necessary (i.e., required) data on disk -/* - Simulation domain - every particles that goes outside this domain is deleted. -*/ -domain -{ - min (0.0 -0.06 0.001); - max (1.2 1 0.5); -} +// exclude unnecessary data from saving on disk +excludeObjects (rVelocity.dy1 pStructPosition.dy1 pStructVelocity.dy1); -integrationMethod AdamsBashforth3; // integration method +integrationMethod AdamsBashforth2; // integration method -timersReport Yes; // report timers? +writeFormat ascii; // data writting format (ascii or binary) -timersReportInterval 0.01; // time interval for reporting timers +timersReport Yes; // report timers (Yes or No) + +timersReportInterval 0.01; // time interval for reporting timers From 31ebc5963cbc28982e028ac254ba6f97bcb8669e Mon Sep 17 00:00:00 2001 From: ramin1728 Date: Sat, 28 Dec 2024 14:09:09 +0330 Subject: [PATCH 3/4] updated V1.0 toteblender --- .../toteblender/caseSetup/interaction | 89 +++---- .../toteblender/caseSetup/particleInsertion | 7 +- .../toteblender/caseSetup/shapes | 13 + .../toteblender/settings/domainDict | 64 +++++ .../toteblender/settings/geometryDict | 247 +++++++----------- .../toteblender/settings/particlesDict | 98 +++---- .../toteblender/settings/settingsDict | 45 ++-- 7 files changed, 272 insertions(+), 291 deletions(-) create mode 100644 tutorials/sphereGranFlow/toteblender/caseSetup/shapes create mode 100755 tutorials/sphereGranFlow/toteblender/settings/domainDict diff --git a/tutorials/sphereGranFlow/toteblender/caseSetup/interaction b/tutorials/sphereGranFlow/toteblender/caseSetup/interaction index 36ff43c5..203a501b 100644 --- a/tutorials/sphereGranFlow/toteblender/caseSetup/interaction +++ b/tutorials/sphereGranFlow/toteblender/caseSetup/interaction @@ -6,72 +6,47 @@ objectName interaction; objectType dicrionary; fileFormat ASCII; /*---------------------------------------------------------------------------*/ +materials (solidProperty); // a list of materials names -// a list of materials names -materials (solidProperty); - -// density of materials [kg/m3] -densities (1000.0); +densities (1000.0); // density of materials [kg/m3] contactListType sortedContactList; -model -{ - contactForceModel nonLinearNonLimited; - - rollingFrictionModel normal; - - /* - Property (solidProperty-solidProperty); - */ - - // 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 NBS; // method for broad search + + updateInterval 10; - // method for broad search particle-particle - method NBS; + sizeRatio 1.1; - // method for broad search particle-wall - wallMapping cellMapping; + cellExtent 0.55; - NBSInfo - { - // each 20 timesteps, update neighbor list - updateFrequency 20; + adjustableBox Yes; +} + +model +{ + contactForceModel nonLinearNonLimited; + + rollingFrictionModel normal; - // bounding box size to particle diameter (max) - sizeRatio 1.1; - } + /* + Property (solidProperty-solidProperty) + */ + + Yeff (1.0e6); // Young modulus [Pa] - cellMappingInfo - { - // each 20 timesteps, update neighbor list - updateFrequency 20; - - // bounding box for particle-wall search (> 0.5) - cellExtent 0.7; - } + Geff (0.8e6); // Shear modulus [Pa] + + nu (0.25); // Poisson's ratio [-] + + en (0.7); // coefficient of normal restitution + + et (1.0); // coefficient of tangential restitution + + mu (0.3); // dynamic friction + + mur (0.1); // rolling friction +} -} \ No newline at end of file diff --git a/tutorials/sphereGranFlow/toteblender/caseSetup/particleInsertion b/tutorials/sphereGranFlow/toteblender/caseSetup/particleInsertion index d8e3f87f..cabe23da 100644 --- a/tutorials/sphereGranFlow/toteblender/caseSetup/particleInsertion +++ b/tutorials/sphereGranFlow/toteblender/caseSetup/particleInsertion @@ -6,11 +6,8 @@ objectName particleInsertion; objectType dicrionary; fileFormat ASCII; /*---------------------------------------------------------------------------*/ +active No; // is insertion active -> Yes or No -// is insertion active? -active no; - -// not implemented for yes -collisionCheck No; +collisionCheck No; // is checked -> Yes or No diff --git a/tutorials/sphereGranFlow/toteblender/caseSetup/shapes b/tutorials/sphereGranFlow/toteblender/caseSetup/shapes new file mode 100644 index 00000000..5e154455 --- /dev/null +++ b/tutorials/sphereGranFlow/toteblender/caseSetup/shapes @@ -0,0 +1,13 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName sphereDict; +objectType sphereShape; +fileFormat ASCII; +/*---------------------------------------------------------------------------*/ +names (sphere1); // name of shapes + +diameters (0.005); // diameter of shapes (m) + +materials (solidProperty); // material name for shapes \ No newline at end of file diff --git a/tutorials/sphereGranFlow/toteblender/settings/domainDict b/tutorials/sphereGranFlow/toteblender/settings/domainDict new file mode 100755 index 00000000..ac9b1774 --- /dev/null +++ b/tutorials/sphereGranFlow/toteblender/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.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; +} + +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/toteblender/settings/geometryDict b/tutorials/sphereGranFlow/toteblender/settings/geometryDict index 9fbd80b3..37a7b1db 100644 --- a/tutorials/sphereGranFlow/toteblender/settings/geometryDict +++ b/tutorials/sphereGranFlow/toteblender/settings/geometryDict @@ -6,217 +6,154 @@ objectName geometryDict; objectType dictionary; fileFormat ASCII; /*---------------------------------------------------------------------------*/ +motionModel rotatingAxis; // motion model: rotating object around an axis -// motion model: rotating object around an axis -motionModel rotatingAxisMotion; - -// information for rotatingAxisMotion motion model -rotatingAxisMotionInfo +rotatingAxisInfo // information for rotatingAxisMotion motion model { axisOfRotation { - 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 + 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 1.5708; // rotation speed ==> 15 rad/s + omega 1.5708; // rotation speed ==> 15 rad/s + + startTime 0.5; // Start time of Geometry Rotating (s) - // Start time of Geometry Rotating (s) - startTime 0.5; - - // End time of Geometry Rotating (s) - endTime 9.5; + endTime 9.5; // End time of Geometry Rotating (s) } } surfaces { - topGate { - // type of wall - type cylinderWall; + type cylinderWall; // type of wall - // begin point of cylinder axis - p1 (0.0 0.0 0.3); + p1 (0.0 0.0 0.3); // begin point of cylinder axis - // end point of cylinder axis - p2 (0.0 0.0 0.301); + p2 (0.0 0.0 0.301); // end point of cylinder axis - // radius at p1 - radius1 0.03; + radius1 0.03; // radius at p1 - // radius at p2 - radius2 0.0001; + radius2 0.0001; // radius at p2 - // material of wall - material solidProperty; + material solidProperty; // material of wall - // motion component name - motion axisOfRotation; + motion axisOfRotation; // motion component name } topCylinder { - // type of the wall - type cylinderWall; + type cylinderWall; // type of the wall + + p1 (0.0 0.0 0.28); // begin point of cylinder axis - // begin point of cylinder axis - p1 (0.0 0.0 0.28); + p2 (0.0 0.0 0.3); // end point of cylinder axis + + radius1 0.03; // radius at p1 + + radius2 0.03; // radius at p2 + + resolution 36; // number of divisions - // end point of cylinder axis - p2 (0.0 0.0 0.3); + material solidProperty; // material name of this wall - // radius at p1 - radius1 0.03; - - // radius at p2 - radius2 0.03; - - // number of divisions - resolution 36; - - // material name of this wall - material solidProperty; - - // motion component name - motion axisOfRotation; + motion axisOfRotation; // motion component name } coneShelltop { - // type of the wall - type cylinderWall; + type cylinderWall; // type of the wall - // begin point of cylinder axis - p1 (0.0 0.0 0.2); + p1 (0.0 0.0 0.2); // begin point of cylinder axis - // end point of cylinder axis - p2 (0.0 0.0 0.28); + p2 (0.0 0.0 0.28); // end point of cylinder axis - // radius at p1 - radius1 0.1; - - // radius at p2 - radius2 0.03; - - // number of divisions - resolution 36; - - // material name of this wall - material solidProperty; - - // motion component name - motion axisOfRotation; + radius1 0.1; // radius at p1 + + radius2 0.03; // radius at p2 + + resolution 36; // number of divisions + + material solidProperty; // material name of this wall + + motion axisOfRotation; // motion component name } cylinderShell { - // type of the wall - type cylinderWall; + type cylinderWall; // type of the wall + + p1 (0.0 0.0 0.1); // begin point of cylinder axis - // 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 solidProperty; - - // motion component name - motion axisOfRotation; + p2 (0.0 0.0 0.2); // end point of cylinder axis + + radius1 0.1; // radius at p1 + + radius2 0.1; // radius at p2 + + resolution 36; // number of divisions + + material solidProperty; // material name of this wall + + motion axisOfRotation; // motion component name } coneShelldown { + type cylinderWall; // type of the wall - // type of the wall - type cylinderWall; + p1 (0.0 0.0 0.02); // begin point of cylinder axis + + p2 (0.0 0.0 0.1); // end point of cylinder axis - // begin point of cylinder axis - p1 (0.0 0.0 0.02); + radius1 0.03; // radius at p1 - // 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 solidProperty; - - // motion component name - motion axisOfRotation; + radius2 0.1; // radius at p2 + + resolution 36; // number of divisions + + material solidProperty; // material name of this wall + + motion axisOfRotation; // motion component name } bottomCylinder { - // type of the wall - type cylinderWall; + type cylinderWall; // type of the wall - // begin point of cylinder axis - p1 (0.0 0.0 0.0); + p1 (0.0 0.0 0.0); // begin point of cylinder axis + + p2 (0.0 0.0 0.02); // end point of cylinder axis - // 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 solidProperty; - - // motion component name - motion axisOfRotation; + radius1 0.03; // radius at p1 + + radius2 0.03; // radius at p2 + + resolution 36; // number of divisions + + material solidProperty; // material name of this wall + + motion axisOfRotation; // motion component name } exitGate { + type cylinderWall; // type of the wall - // type of the wall - type cylinderWall; + p1 (0.0 0.0 -0.001); // begin point of cylinder axis + + p2 (0.0 0.0 0.0); // end point of cylinder axis - // begin point of cylinder axis - p1 (0.0 0.0 -0.001); - - // end point of cylinder axis - p2 (0.0 0.0 0.0); - - // radius at p1 - radius1 0.03; - - // radius at p2 - radius2 0.0001; - - // number of divisions - resolution 36; - - // material name of this wall - material solidProperty; - - // motion component name - motion axisOfRotation; - } + radius1 0.03; // radius at p1 + + radius2 0.0001; // radius at p2 + + resolution 36; // number of divisions + + material solidProperty; // material name of this wall + motion axisOfRotation; // motion component name + } } diff --git a/tutorials/sphereGranFlow/toteblender/settings/particlesDict b/tutorials/sphereGranFlow/toteblender/settings/particlesDict index c0e1b189..01fecb85 100644 --- a/tutorials/sphereGranFlow/toteblender/settings/particlesDict +++ b/tutorials/sphereGranFlow/toteblender/settings/particlesDict @@ -6,66 +6,74 @@ 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. + + 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 sphere1; + { + 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 sphere1; // name of the particle shape } selectors - {} + { + shapeAssigne + { + selector stridedRange; // other options: box, cylinder, sphere, randomPoints + + stridedRangeInfo + { + begin 0; // begin index of points + + end 24000; // 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 { - // ordered positioning - method positionOrdered; + + method ordered; // ordered positioning - // maximum number of particles in the simulation - maxNumberOfParticles 25001; - - // perform initial sorting based on morton code? - mortonSorting Yes; - - // cylinder for positioning particles - cylinder - { - // Coordinates of top cylinderRegion (m,m,m) - p1 (0.0 0.0 0.09); - - p2 (0.0 0.0 0.21); - - // radius of cylinder - radius 0.09; - } + mortonSorting Yes; // perform initial sorting based on morton code? - positionOrderedInfo + orderedInfo { - // minimum space between centers of particles - diameter 0.005; - - // number of particles in the simulation - numPoints 24000; + diameter 0.005; // minimum space between centers of particles + + numPoints 24000; // number of particles in the simulation + + axisOrder (x y z); // axis order for filling the space with particles + } + + regionType cylinder; // other options: cylinder and sphere - // axis order for filling the space with particles - axisOrder (x y z); + 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 } } diff --git a/tutorials/sphereGranFlow/toteblender/settings/settingsDict b/tutorials/sphereGranFlow/toteblender/settings/settingsDict index 224eb9a3..0977f56b 100644 --- a/tutorials/sphereGranFlow/toteblender/settings/settingsDict +++ b/tutorials/sphereGranFlow/toteblender/settings/settingsDict @@ -3,45 +3,32 @@ | copyright: www.cemf.ir | \* ------------------------------------------------------------------------- */ objectName settingsDict; -objectType dictionary;; -fileFormat ASCII; +objectType dictionary; +fileFormat ASCII; /*---------------------------------------------------------------------------*/ +run toteblender; -run toteBlender; +dt 0.00004; // time step for integration (s) -// time step for integration (s) -dt 0.00004; +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 3; // maximum number of digits for time folder -// maximum number of digits for time folder -timePrecision 3; +g (0 0 -9.8); // gravity vector (m/s2) -// gravity vector (m/s2) -g (0 0 -9.8); +includeObjects (diameter); // save necessary (i.e., required) data on disk -/* Simulation domain */ -/* every particles that goes outside this domain is deleted. */ -domain -{ - min (-0.3 -0.3 -0.3); - max (0.5 0.5 0.5); -} +// exclude unnecessary data from saving on disk +excludeObjects (rVelocity.dy1 pStructPosition.dy1 pStructVelocity.dy1); -// integration method -integrationMethod AdamsMoulton4; +integrationMethod AdamsBashforth2; // integration method -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.02; \ No newline at end of file +timersReportInterval 0.02; // time interval for reporting timers From c02027f5d26ec0504321f2c9adaa649895a861eb Mon Sep 17 00:00:00 2001 From: ramin1728 Date: Sat, 28 Dec 2024 14:58:28 +0330 Subject: [PATCH 4/4] updated V1.0 V-blender --- .../V-blender/caseSetup/interaction | 79 ++++++--------- .../V-blender/caseSetup/particleInsertion | 89 ++++++++--------- .../caseSetup/{sphereShape => shapes} | 10 +- .../V-blender/settings/domainDict | 64 +++++++++++++ .../V-blender/settings/geometryDict | 60 +++++------- .../V-blender/settings/particlesDict | 95 ++++++++++++------- .../V-blender/settings/settingsDict | 42 +++----- 7 files changed, 235 insertions(+), 204 deletions(-) rename tutorials/sphereGranFlow/V-blender/caseSetup/{sphereShape => shapes} (68%) create mode 100755 tutorials/sphereGranFlow/V-blender/settings/domainDict diff --git a/tutorials/sphereGranFlow/V-blender/caseSetup/interaction b/tutorials/sphereGranFlow/V-blender/caseSetup/interaction index 709fe23e..1e9b4447 100644 --- a/tutorials/sphereGranFlow/V-blender/caseSetup/interaction +++ b/tutorials/sphereGranFlow/V-blender/caseSetup/interaction @@ -6,70 +6,49 @@ objectName interaction; objectType dicrionary; fileFormat ASCII; /*---------------------------------------------------------------------------*/ +materials (wallMat lightMat); // a list of materials names -// a list of materials names -materials (wallMat lightMat); - -// density of materials [kg/m3] -densities (1000 1000); +densities (1000 1000); // density of materials [kg/m3] contactListType sortedContactList; +contactSearch +{ + method NBS; // method for broad search + + updateInterval 10; + + sizeRatio 1.1; + + cellExtent 0.55; + + adjustableBox Yes; +} + model { - contactForceModel nonLinearNonLimited; - rollingFrictionModel normal; + contactForceModel nonLinearNonLimited; - // Young modulus [Pa] + rollingFrictionModel normal; + + Yeff (1.0e6 1.0e6 - 1.0e6); + 1.0e6); // Young modulus [Pa] - // Shear modulus [Pa] Geff (0.8e6 0.8e6 - 0.8e6); + 0.8e6); // Shear modulus [Pa] - // Poisson's ratio [-] - nu (0.25 0.25 - 0.25); + nu (0.25 0.25 + 0.25); // Poisson's ratio [-] - // coefficient of normal restitution - en (0.97 0.85 - 0.97); + en (0.97 0.85 + 0.97); // coefficient of normal restitution - // dynamic friction - mu (0.65 0.35 - 0.65); + mu (0.65 0.35 + 0.65); // dynamic friction - // rolling friction - mur (0.1 0.1 - 0.1); + mur (0.1 0.1 + 0.1); // rolling friction } -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; - } - -} diff --git a/tutorials/sphereGranFlow/V-blender/caseSetup/particleInsertion b/tutorials/sphereGranFlow/V-blender/caseSetup/particleInsertion index 682830c5..a26ff8ac 100644 --- a/tutorials/sphereGranFlow/V-blender/caseSetup/particleInsertion +++ b/tutorials/sphereGranFlow/V-blender/caseSetup/particleInsertion @@ -6,97 +6,86 @@ 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 tho insertion steps. + Two layers of particles are packed one-by-one using tho insertion steps */ rightregion { - // type of insertion region - type cylinderRegion; + timeControl simulationTime; + + regionType cylinder; // type of insertion region - // insertion rate (particles/s) - rate 10000; + rate 10000; // Particles Insertion Rate (particles/s) - // start time of small particles insertion (s) - startTime 0.0; + startTime 0.0; // start time of small particles insertion (s) - // end time of small particles insertion (s) - endTime 1; + endTime 1; // end time of small particles insertion (s) - // time interval of small particles insertion (s) - interval 0.025; + insertionInterval 0.025; // time interval of small particles insertion (s) - cylinderRegionInfo + cylinderInfo { - // radius of cylinder (m) - radius 0.1; - - // coordinates of center of both ends of the insertion cylinder on - // the right side of the V-blender (m,m,m) + /* coordinates of center of both ends of the insertion + + cylinder on the right side of the V-blender (m,m,m) */ + p1 (0.0950615 0.12 0.5011585); + p2 (0.1150615 0.12 0.4811585); + + radius 0.1; // radius of cylinder (m) } setFields { - // initial velocity of inserted particles - velocity realx3 (1.2 0.0 -1.2); + velocity realx3 (1.2 0.0 -1.2); // initial velocity of inserted particles } mixture { - // first layer of inserted particles - smallSphere 1; - + smallSphere 1; // first layer of inserted particles } } leftregion { - // type of insertion region - type cylinderRegion; + timeControl simulationTime; - // insertion rate (particles/s) - rate 10000; + regionType cylinder; // type of insertion region - // start time of large particles insertion (s) - startTime 1.5; + rate 10000; // Particles Insertion Rate (particles/s) - // end time of large particles insertion (s) - endTime 2.5; + startTime 1.5; // start time of large particles insertion (s) - // time interval of large particles insertion (s) - interval 0.025; + endTime 2.5; // end time of large particles insertion (s) + + insertionInterval 0.025; // time interval of large particles insertion (s) - cylinderRegionInfo + cylinderInfo { - // radius of cylinder (m) - radius 0.1; - - // coordinates of center of both ends of the insertion cylinder on - // the left side of the V-blender (m,m,m) - p1 ( 0.7562545 0.12 0.50079); - p2 ( 0.7362545 0.12 0.48079); + /* coordinates of center of both ends of the insertion + + cylinder on the left side of the V-blender (m,m,m) */ + + p1 ( 0.7562545 0.12 0.50079); + + p2 ( 0.7362545 0.12 0.48079); + + radius 0.1; // radius of cylinder (m) } setFields { - // initial velocity of inserted particles - velocity realx3 (-1.2 0.0 -1.2); + velocity realx3 (-1.2 0.0 -1.2); // initial velocity of inserted particles } mixture { - // second layer of inserted particles - largeSphere 1; - + largeSphere 1; // second layer of inserted particles } } diff --git a/tutorials/sphereGranFlow/V-blender/caseSetup/sphereShape b/tutorials/sphereGranFlow/V-blender/caseSetup/shapes similarity index 68% rename from tutorials/sphereGranFlow/V-blender/caseSetup/sphereShape rename to tutorials/sphereGranFlow/V-blender/caseSetup/shapes index 71a9880d..85ad682a 100644 --- a/tutorials/sphereGranFlow/V-blender/caseSetup/sphereShape +++ b/tutorials/sphereGranFlow/V-blender/caseSetup/shapes @@ -6,12 +6,8 @@ objectName sphereDict; objectType sphereShape; fileFormat ASCII; /*---------------------------------------------------------------------------*/ +names (smallSphere largeSphere); // names of particles -// names of particles -names (smallSphere largeSphere); +diameters (0.01 0.0101); // diameter of particles -// diameter of particles -diameters (0.01 0.0101); - -// material names for particles -materials (lightMat lightMat); +materials (lightMat lightMat); // material names for particles diff --git a/tutorials/sphereGranFlow/V-blender/settings/domainDict b/tutorials/sphereGranFlow/V-blender/settings/domainDict new file mode 100755 index 00000000..8595d381 --- /dev/null +++ b/tutorials/sphereGranFlow/V-blender/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.1 -0.4 0); // lower corner point of the box + + max (0.86 0.6 0.6); // 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/V-blender/settings/geometryDict b/tutorials/sphereGranFlow/V-blender/settings/geometryDict index bbb9bfea..a1f42d1a 100644 --- a/tutorials/sphereGranFlow/V-blender/settings/geometryDict +++ b/tutorials/sphereGranFlow/V-blender/settings/geometryDict @@ -6,49 +6,37 @@ objectName geometryDict; objectType dictionary; fileFormat ASCII; /*---------------------------------------------------------------------------*/ +motionModel rotatingAxis; // motion model: rotating object around an axis -// motion model: rotating object around an axis -motionModel rotatingAxisMotion; +rotatingAxisInfo // information for rotatingAxis motion model +{ + rotAxis + { + p1 (0.128228 0.116446 0.297901); // first point for the axis of rotation + + p2 (0.722596 0.116459 0.297901); // second point for the axis of rotation + + omega 3.14; // rotation speed (rad/s) + + startTime 3; // start time of rotation + + endTime 10; // end time of rotation + } +} surfaces { - body - { - // type of the wall - type stlWall; + { + type stlWall; // type of the wall - // file name in stl folder - file body.stl; + file body.stl; // file name in stl folder - // material name of this wall - material wallMat; + material wallMat; // material name of this wall - // motion component name - motion rotAxis; - } - - -} - -// information for rotatingAxisMotion motion model -rotatingAxisMotionInfo -{ - rotAxis - { - // first point for the axis of rotation - p1 (0.128228 0.116446 0.297901); - - // second point for the axis of rotation - p2 (0.722596 0.116459 0.297901); - - // rotation speed (rad/s) - omega 3.14; - - // start time of rotation - startTime 3; - - // end time of rotation - endTime 10; + motion otAxis; // motion component name } } + + + diff --git a/tutorials/sphereGranFlow/V-blender/settings/particlesDict b/tutorials/sphereGranFlow/V-blender/settings/particlesDict index b00e2252..87a433c5 100644 --- a/tutorials/sphereGranFlow/V-blender/settings/particlesDict +++ b/tutorials/sphereGranFlow/V-blender/settings/particlesDict @@ -6,43 +6,74 @@ 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. - */ + /* + Default value for fields defined for 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; - } + These fields should always be defined for simulations with - selectors - {} + 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 smallSphere; // name of the particle shape + } + + selectors + { + shapeAssigne + { + selector stridedRange; // other options: box, cylinder, sphere, randomPoints + + stridedRangeInfo + { + begin 0; // begin index of points + + end 24000; // 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 { - // no particle is initially in the simulation - method empty; - - // maximum number of particles in the simulation - maxNumberOfParticles 25000; - // perform initial sorting based on morton code? - mortonSorting Yes; -} + method ordered; // ordered positioning + + mortonSorting Yes; // perform initial sorting based on morton code? + + orderedInfo + { + diameter 0.0101; // minimum space between centers of particles + + numPoints 25000; // number of particles in the simulation + + axisOrder (x y z); // axis order for filling the space with particles + } + + regionType cylinder; // other options: cylinder 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 + } +} \ No newline at end of file diff --git a/tutorials/sphereGranFlow/V-blender/settings/settingsDict b/tutorials/sphereGranFlow/V-blender/settings/settingsDict index 4dab1980..916b4e53 100644 --- a/tutorials/sphereGranFlow/V-blender/settings/settingsDict +++ b/tutorials/sphereGranFlow/V-blender/settings/settingsDict @@ -6,45 +6,29 @@ objectName settingsDict; objectType dictionary; fileFormat ASCII; /*---------------------------------------------------------------------------*/ - run rotatingVblender; -// time step for integration (s) -dt 0.00001; +dt 0.00001; // time step for integration (s) -// start time for simulation -startTime 0; +startTime 0; // start time for simulation -// end time for simulation -endTime 10; +endTime 10; // end time for simulation -// time interval for saving the simulation -saveInterval 0.05; +saveInterval 0.05; // time interval for saving the simulation -// maximum number of digits for time folder -timePrecision 6; +timePrecision 6; // maximum number of digits for time folder -// gravity vector (m/s2) -g (0 0 -9.8); +g (0 0 -9.8); // gravity vector (m/s2) -/* - Simulation domain - every particles that goes outside this domain is deleted. -*/ +includeObjects (diameter); // save necessary (i.e., required) data on disk -domain -{ - min (-0.1 -0.4 0); - max (0.86 0.6 0.6); -} +// exclude unnecessary data from saving on disk +excludeObjects (rVelocity.dy1 pStructPosition.dy1 pStructVelocity.dy1); -// integration method -integrationMethod AdamsBashforth2; +integrationMethod AdamsBashforth2; // integration method -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