From dae2af5354210a5dffec20cbf509c7ea07264e00 Mon Sep 17 00:00:00 2001 From: ramin1728 Date: Tue, 24 Dec 2024 18:14:19 +0330 Subject: [PATCH] updated V1.0 rotatingDrumMedium --- .../rotatingDrumMedium/caseSetup/interaction | 92 +++++++++-------- .../caseSetup/particleInsertion | 6 +- .../rotatingDrumMedium/caseSetup/shapes | 13 +++ .../rotatingDrumMedium/settings/domainDict | 64 ++++++++++++ .../rotatingDrumMedium/settings/geometryDict | 98 ++++++++++++------- .../rotatingDrumMedium/settings/particlesDict | 76 +++++++++----- .../rotatingDrumMedium/settings/settingsDict | 31 +++--- 7 files changed, 247 insertions(+), 133 deletions(-) create mode 100755 tutorials/sphereGranFlow/rotatingDrumMedium/caseSetup/shapes create mode 100755 tutorials/sphereGranFlow/rotatingDrumMedium/settings/domainDict diff --git a/tutorials/sphereGranFlow/rotatingDrumMedium/caseSetup/interaction b/tutorials/sphereGranFlow/rotatingDrumMedium/caseSetup/interaction index 3a744122..31c38686 100755 --- a/tutorials/sphereGranFlow/rotatingDrumMedium/caseSetup/interaction +++ b/tutorials/sphereGranFlow/rotatingDrumMedium/caseSetup/interaction @@ -6,60 +6,56 @@ objectName interaction; objectType dicrionary; fileFormat ASCII; /*---------------------------------------------------------------------------*/ +materials (glassMat wallMat); // a list of materials names -materials (glassMat wallMat); // a list of materials names -densities (2500.0 2500); // density of materials [kg/m3] +densities (2500.0 2500); // density of materials [kg/m3] contactListType sortedContactList; -model -{ - contactForceModel nonLinearLimited; - rollingFrictionModel normal; - - /* - Property (glassMat-glassMat glassMat-wallMat - wallMat-wallMat); - */ - - Yeff (1.0e6 1.0e6 // Young modulus [Pa] - 1.0e6); - - Geff (0.8e6 0.8e6 // Shear modulus [Pa] - 0.8e6); - - nu (0.25 0.25 // Poisson's ratio [-] - 0.25); - - en (0.97 0.85 // coefficient of normal restitution - 1.00); - - et (1.0 1.0 // coefficient of tangential restitution - 1.0); - - mu (0.65 0.65 // dynamic friction - 0.65); - - mur (0.1 0.1 // rolling friction - 0.1); - -} - 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 20; // each 20 timesteps, update neighbor list - sizeRatio 1.1; // bounding box size to particle diameter (max) - } + sizeRatio 1.1; - cellMappingInfo - { - updateFrequency 20; // each 20 timesteps, update neighbor list - cellExtent 0.6; // bounding box for particle-wall search (> 0.5) - } + cellExtent 0.55; + + adjustableBox Yes; +} + +model +{ + contactForceModel nonLinearLimited; + + rollingFrictionModel normal; + + /* + Property (glassMat-glassMat glassMat-wallMat + wallMat-wallMat); + */ + + Yeff (1.0e6 1.0e6 + 1.0e6); // Young modulus [Pa] + + Geff (0.8e6 0.8e6 + 0.8e6); // Shear modulus [Pa] + + nu (0.25 0.25 + 0.25); // Poisson's ratio [-] + + en (0.97 0.85 + 1.00); // coefficient of normal restitution + + et (1.0 1.0 + 1.0); // coefficient of tangential restitution + + mu (0.65 0.65 + 0.65); // dynamic friction + + mur (0.1 0.1 + 0.1); // rolling friction +} -} \ No newline at end of file diff --git a/tutorials/sphereGranFlow/rotatingDrumMedium/caseSetup/particleInsertion b/tutorials/sphereGranFlow/rotatingDrumMedium/caseSetup/particleInsertion index 76835952..89c11e40 100755 --- a/tutorials/sphereGranFlow/rotatingDrumMedium/caseSetup/particleInsertion +++ b/tutorials/sphereGranFlow/rotatingDrumMedium/caseSetup/particleInsertion @@ -6,9 +6,7 @@ objectName particleInsertion; objectType dicrionary; fileFormat ASCII; /*---------------------------------------------------------------------------*/ +active No; // is checked -> Yes or No -active no; // is insertion active? - -collisionCheck No; // not implemented for yes - +collisionCheck No; // is insertion active -> Yes or No diff --git a/tutorials/sphereGranFlow/rotatingDrumMedium/caseSetup/shapes b/tutorials/sphereGranFlow/rotatingDrumMedium/caseSetup/shapes new file mode 100755 index 00000000..18d70fc5 --- /dev/null +++ b/tutorials/sphereGranFlow/rotatingDrumMedium/caseSetup/shapes @@ -0,0 +1,13 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName sphereDict; +objectType sphereShape; +fileFormat ASCII; +/*---------------------------------------------------------------------------*/ +names (glassBead); // names of shapes + +diameters (0.003); // diameter of shapes + +materials (glassMat); // material names for shapes diff --git a/tutorials/sphereGranFlow/rotatingDrumMedium/settings/domainDict b/tutorials/sphereGranFlow/rotatingDrumMedium/settings/domainDict new file mode 100755 index 00000000..a6bb5701 --- /dev/null +++ b/tutorials/sphereGranFlow/rotatingDrumMedium/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.12 -0.12 0); + + max (0.12 0.12 0.36); // 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: periodict, 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/rotatingDrumMedium/settings/geometryDict b/tutorials/sphereGranFlow/rotatingDrumMedium/settings/geometryDict index b2c6fa26..0a331437 100644 --- a/tutorials/sphereGranFlow/rotatingDrumMedium/settings/geometryDict +++ b/tutorials/sphereGranFlow/rotatingDrumMedium/settings/geometryDict @@ -6,65 +6,87 @@ 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 rotatingAxisMotion motion model +{ + rotAxis + { + p1 (0.0 0.0 0.0); // first point for the axis of rotation + + p2 (0.0 0.0 1.0); // second point for the axis of rotation + + omega 1.214; // rotation speed (rad/s) => 11.6 rpm + } +} surfaces { /* - A cylinder with begin and end radii 0.12 m and axis points at (0 0 0) - and (0 0 0.36) + A cylinder with begin and end radii 0.12 m and axis points at (0 0 0) and (0 0 0.36) */ + cylinder { - type cylinderWall; // type of the wall - p1 (0.0 0.0 0.0); // begin point of cylinder axis - p2 (0.0 0.0 0.36); // end point of cylinder axis - radius1 0.12; // radius at p1 - radius2 0.12; // radius at p2 - resolution 24; // number of divisions - material wallMat; // material name of this wall - motion rotAxis; // motion component name + type cylinderWall; // type of the wall + + p1 (0.0 0.0 0.0); // begin point of cylinder axis + + p2 (0.0 0.0 0.36); // end point of cylinder axis + + radius1 0.12; // radius at p1 + + radius2 0.12; // radius at p2 + + resolution 24; // number of divisions + + material wallMat; // material name of this wall + + motion rotAxis; // motion component name } /* - This is a plane wall at the rear end of cylinder + This is a plane wall at the rear end of cylinder */ + wall1 { - type planeWall; // type of the wall - p1 (-0.12 -0.12 0.0); // first point of the wall - p2 ( 0.12 -0.12 0.0); // second point - p3 ( 0.12 0.12 0.0); // third point - p4 (-0.12 0.12 0.0); // fourth point - material wallMat; // material name of the wall - motion rotAxis; // motion component name + type planeWall; // type of the wall + + p1 (-0.12 -0.12 0.0); // first point of the wall + + p2 ( 0.12 -0.12 0.0); // second point + + p3 ( 0.12 0.12 0.0); // third point + + p4 (-0.12 0.12 0.0); // fourth point + + material wallMat; // material name of the wall + + motion rotAxis; // motion component name } /* - This is a plane wall at the front end of cylinder + This is a plane wall at the front end of cylinder */ + wall2 { - type planeWall; - p1 (-0.12 -0.12 0.36); - p2 ( 0.12 -0.12 0.36); - p3 ( 0.12 0.12 0.36); - p4 (-0.12 0.12 0.36); - material wallMat; - motion rotAxis; + type planeWall; // type of the wall + + p1 (-0.12 -0.12 0.36); // first point of the wall + + p2 ( 0.12 -0.12 0.36); // second point + + p3 ( 0.12 0.12 0.36); // third point + + p4 (-0.12 0.12 0.36); // fourth point + + material wallMat; // material name of the wall + + motion rotAxis; // motion component name } } -// information for rotatingAxisMotion motion model -rotatingAxisMotionInfo -{ - rotAxis - { - p1 (0.0 0.0 0.0); // first point for the axis of rotation - p2 (0.0 0.0 1.0); // second point for the axis of rotation - omega 1.214; // rotation speed (rad/s) => 11.6 rpm - } -} \ No newline at end of file diff --git a/tutorials/sphereGranFlow/rotatingDrumMedium/settings/particlesDict b/tutorials/sphereGranFlow/rotatingDrumMedium/settings/particlesDict index fea6c8f7..b733f6e5 100644 --- a/tutorials/sphereGranFlow/rotatingDrumMedium/settings/particlesDict +++ b/tutorials/sphereGranFlow/rotatingDrumMedium/settings/particlesDict @@ -6,53 +6,75 @@ 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 { - 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 glassBead; // name of the particle shape + 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 glassBead; // name of the particle shape } selectors - {} + { + shapeAssigne + { + selector stridedRange; // other options: box, cylinder, sphere, randomPoints + + stridedRangeInfo + { + begin 0; // begin index of points + + end 250000; // end index of points + + stride 3; // stride for selector + } + + fieldValue // fields that the selector is applied to + { + shapeName word glassBead; // sets shapeName of the selected points to largeSphere + } + } + } } -// positions particles -positionParticles +positionParticles // positions particles { - method positionOrdered; // ordered positioning + method ordered; // other options: random and empty - maxNumberOfParticles 250001; // maximum number of particles in the simulation - mortonSorting Yes; // perform initial sorting based on morton code? + //maxNumberOfParticles 250001; // maximum number of particles in the simulation - box // box for positioning particles + //mortonSorting Yes; // perform initial sorting based on morton code? + + orderedInfo { - min (-0.08 -0.08 0.0); // lower corner point of the box - max ( 0.08 0.08 0.36); // upper corner point of the box - } - - positionOrderedInfo - { - diameter 0.003; // minimum space between centers of particles - numPoints 250000; // number of particles in the simulation - axisOrder (z y x); // axis order for filling the space with particles + diameter 0.003; // minimum space between centers of particles + + numPoints 250000; // number of particles in the simulation + + axisOrder (z y x); // axis order for filling the space with particles } - positionRandomInfo + regionType cylinder; // other options: box and sphere + + cylinderInfo // cylinder information for positioning particles { - diameter 0.003; // minimum space between centers of particles - numPoints 250000; // number of particles in the simulation - maxIterations 40; // max number of contact search passes to position particles + p1 (0.0 0.003 0.0); // begin point of cylinder axis + + p2 (0.0 0.22 0.0); // end point of cylinder axis + + radius 0.117; // radius of cylinder } + } diff --git a/tutorials/sphereGranFlow/rotatingDrumMedium/settings/settingsDict b/tutorials/sphereGranFlow/rotatingDrumMedium/settings/settingsDict index aedf2a89..3a163322 100644 --- a/tutorials/sphereGranFlow/rotatingDrumMedium/settings/settingsDict +++ b/tutorials/sphereGranFlow/rotatingDrumMedium/settings/settingsDict @@ -6,35 +6,34 @@ objectName settingsDict; objectType dictionary;; fileFormat ASCII; /*---------------------------------------------------------------------------*/ - run rotatingDrumMedium; -dt 0.00001; // time step for integration (s) +dt 0.00001; // time step for integration (s) -startTime 0; // start time for simulation +startTime 0; // start time for simulation -endTime 10; // end time for simulation +endTime 10; // end time for simulation -saveInterval 0.1; // time interval for saving the simulation +saveInterval 0.1; // 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) /* Simulation domain every particles that goes outside this domain is deleted. */ -domain -{ - min (-0.12 -0.12 0); - max (0.12 0.12 0.36); -} -integrationMethod AdamsBashforth3; // integration method +includeObjects (diameter); // save necessary (i.e., required) data on disk -writeFormat binary; +// exclude unnecessary data from saving on disk +excludeObjects (rVelocity.dy1 pStructPosition.dy1 pStructVelocity.dy1); -timersReport Yes; // report timers? +integrationMethod AdamsBashforth2; // integration method -timersReportInterval 0.01; // time interval for reporting timers +writeFormat binary; // data writting format (ascii or binary) + +timersReport Yes; // report timers? + +timersReportInterval 0.01; // time interval for reporting timers