Compare commits

...

7 Commits

Author SHA1 Message Date
Omid Khosravi 2ccf6de8ae
Merge 99269b9682 into 12b3413306 2024-12-24 22:55:51 +08:00
Hamidreza Norouzi 12b3413306
Merge pull request #131 from ramin1728/rotatingDrumSmall
updated V1.0 rotatingDrumSmall
2024-12-24 18:08:32 +03:30
ramin1728 ebff41619e updated V1.0 rotatingDrumSmall 2024-12-24 18:03:38 +03:30
Omid Khosravi 99269b9682 Update gitignore
src files ignored
2023-03-26 19:11:40 +04:30
Omid Khosravi 5fe3304fdc tote blender commit 2023-03-26 03:08:06 +04:30
Omid Khosravi b98b97fe8c RDB second commit 2023-03-26 03:07:44 +04:30
Omid Khosravi 0de7f91013 RDB commit 2023-03-26 03:07:04 +04:30
19 changed files with 862 additions and 144 deletions

5
.gitignore vendored
View File

@ -61,3 +61,8 @@ doc/DTAGS
**/[0-9]*.[0-9][0-9][0-9][0-9][0-9][0-9][0-9] **/[0-9]*.[0-9][0-9][0-9][0-9][0-9][0-9][0-9]
**/[0-9]*.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] **/[0-9]*.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]
**/VTK **/VTK
utilities/postprocessPhasicFlow/includeMask.hpp
utilities/postprocessPhasicFlow/ProcessField.hpp
utilities/postprocessPhasicFlow/ProcessField.hpp
*.hpp
*.cpp

View File

@ -62,7 +62,7 @@ contactSearch
NBSInfo NBSInfo
{ {
// each 20 timesteps, update neighbor list // each 20 timesteps, update neighbor list
updateFrequency 10; updateFrequency 10;
// bounding box size to particle diameter (max) // bounding box size to particle diameter (max)
sizeRatio 1.1; sizeRatio 1.1;

View File

@ -14,66 +14,66 @@ surfaces
{ {
body body
{ {
// type of the wall // type of the wall
type stlWall; type stlWall;
// file name in stl folder // file name in stl folder
file Body.stl; file Body.stl;
// material name of this wall // material name of this wall
material wallMat; material wallMat;
// motion component name // motion component name
motion rotAxis; motion rotAxis;
} }
/* This is a Cylinder Wall at the rear of cylinder */ /* This is a Cylinder Wall at the rear of cylinder */
rearEnd rearEnd
{ {
// type of the wall // type of the wall
type cylinderWall; type cylinderWall;
// first point for the axis of rotation // first point for the axis of rotation
p1 (-0.1974 0.2269 -0.001); p1 (-0.1974 0.2269 -0.001);
// second point for the axis of rotation // second point for the axis of rotation
p2 (-0.1974 0.2269 0.0); p2 (-0.1974 0.2269 0.0);
// Radius of p1 // Radius of p1
radius1 0.0001; radius1 0.0001;
// Radius of p2 // Radius of p2
radius2 0.12; radius2 0.12;
// material name of the wall // material name of the wall
material wallMat; material wallMat;
// motion component name // motion component name
motion rotAxis; motion rotAxis;
} }
/* This a cylinder Wall at the front of Cylinder */ /* This a cylinder Wall at the front of Cylinder */
frontEnd frontEnd
{ {
// type of the wall // type of the wall
type cylinderWall; type cylinderWall;
// first point for the axis of rotation // first point for the axis of rotation
p1 (-0.1974 0.2269 0.0989); p1 (-0.1974 0.2269 0.0989);
// second point for the axis of rotation // second point for the axis of rotation
p2 (-0.1974 0.2269 0.0990); p2 (-0.1974 0.2269 0.0990);
// Radius of p1 // Radius of p1
radius1 0.0001; radius1 0.0001;
// Radius of p2 // Radius of p2
radius2 0.12; radius2 0.12;
// material name of the wall // material name of the wall
material wallMat; material wallMat;
// motion component name // motion component name
motion rotAxis; motion rotAxis;
} }
} }
// information for rotatingAxisMotion motion model // information for rotatingAxisMotion motion model
rotatingAxisMotionInfo rotatingAxisMotionInfo
{ {
rotAxis rotAxis
{ {
// first point for the axis of rotation // first point for the axis of rotation
p1 (-0.1974 0.2269 0); p1 (-0.1974 0.2269 0);
// second point for the axis of rotation // second point for the axis of rotation
p2 (-0.1974 0.2269 0.1); p2 (-0.1974 0.2269 0.1);
// rotation speed (rad/s) => 15 rpm // rotation speed (rad/s) => 15 rpm
omega 2.38733; omega 2.38733;
// Start time of Geometry Rotating // Start time of Geometry Rotating
startTime 2; startTime 2;
// End time of Geometry Rotating // End time of Geometry Rotating
endTime 9.5; endTime 9.5;
} }
} }

View File

@ -6,48 +6,44 @@ objectName interaction;
objectType dicrionary; objectType dicrionary;
fileFormat ASCII; 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; 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 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 sizeRatio 1.1;
{
updateFrequency 20; // each 20 timesteps, update neighbor list
sizeRatio 1.1; // bounding box size to particle diameter (max)
}
cellMappingInfo cellExtent 0.55;
{
updateFrequency 20; // each 20 timesteps, update neighbor list adjustableBox Yes;
cellExtent 0.7; // bounding box for particle-wall search (> 0.5) }
}
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
}
}

View File

@ -6,9 +6,8 @@ objectName particleInsertion;
objectType dicrionary; objectType dicrionary;
fileFormat ASCII; fileFormat ASCII;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
active No; // is insertion active -> Yes or No
active no; // is insertion active? collisionCheck No; // is checked -> Yes or No
collisionCheck No; // not implemented for yes

View File

@ -0,0 +1,13 @@
/* -------------------------------*- C++ -*--------------------------------- *\
| phasicFlow File |
| copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */
objectName sphereDict;
objectType sphereShape;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
names (sphere1); // names of shapes
diameters (0.004); // diameter of shapes
materials (prop1); // material names for shapes

View File

@ -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.00); // lower corner point of the box
max (0.12 0.12 0.11); // 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
}
}

View File

@ -6,66 +6,85 @@ objectName geometryDict;
objectType dictionary; objectType dictionary;
fileFormat ASCII; fileFormat ASCII;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
motionModel rotatingAxis;
// motion model: rotating object around an axis rotatingAxisInfo // information for rotatingAxisMotion motion model
motionModel rotatingAxisMotion; {
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)
}
}
surfaces surfaces
{ {
/* /*
A cylinder with begin and end radii 0.12 m and axis points at (0 0 0) A cylinder with begin and end radii 0.12 m and axis points at (0 0 0) and (0 0 0.1)
and (0 0 0.1)
*/ */
cylinder cylinder
{ {
type cylinderWall; // type of the wall type cylinderWall; // type of the wall
p1 (0.0 0.0 0.0); // begin point of cylinder axis
p2 (0.0 0.0 0.1); // end point of cylinder axis p1 (0.0 0.0 0.0); // begin point of cylinder axis
radius1 0.12; // radius at p1
radius2 0.12; // radius at p2 p2 (0.0 0.0 0.1); // end point of cylinder axis
resolution 24; // number of divisions
material prop1; // material name of this wall radius1 0.12; // radius at p1
motion rotAxis; // motion component name
radius2 0.12; // radius at p2
resolution 24; // number of divisions
material prop1; // 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 wall1
{ {
type planeWall; // type of the wall 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 p1 (-0.12 -0.12 0.0); // first point of the wall
p3 ( 0.12 0.12 0.0); // third point
p4 (-0.12 0.12 0.0); // fourth point p2 ( 0.12 -0.12 0.0); // second point
material prop1; // material name of the wall
motion rotAxis; // motion component name p3 ( 0.12 0.12 0.0); // third point
p4 (-0.12 0.12 0.0); // fourth point
material prop1; // 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 wall2
{ {
type planeWall; type planeWall; // type of the wall
p1 (-0.12 -0.12 0.1);
p2 ( 0.12 -0.12 0.1); p1 (-0.12 -0.12 0.1); // first point of the wall
p3 ( 0.12 0.12 0.1);
p4 (-0.12 0.12 0.1); p2 ( 0.12 -0.12 0.1); // second point
material prop1;
motion rotAxis; p3 ( 0.12 0.12 0.1); // third point
p4 (-0.12 0.12 0.1); // fourth point
material prop1; // 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)
}
}

View File

@ -6,45 +6,70 @@ objectName particlesDict;
objectType dictionary; objectType dictionary;
fileFormat ASCII; fileFormat ASCII;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
setFields setFields
{ {
/* /*
Default value for fields defined for particles 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 defaultValue
{ {
velocity realx3 (0 0 0); // linear velocity (m/s) 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) acceleration realx3 (0 0 0); // linear acceleration (m/s2)
shapeName word sphere1; // name of the particle shape
rVelocity realx3 (0 0 0); // rotational velocity (rad/s)
shapeName word sphere1; // name of the particle shape
} }
selectors selectors
{} {
shapeAssigne
{
selector stridedRange; // other options: box, cylinder, sphere, randomPoints
stridedRangeInfo
{
begin 0; // begin index of points
end 30000; // 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 // positions particles
positionParticles
{ {
method positionOrdered; // ordered positioning method ordered; // other options: random and empty
maxNumberOfParticles 40000; // maximum number of particles in the simulation mortonSorting Yes; // perform initial sorting based on morton code?
mortonSorting Yes; // perform initial sorting based on morton code?
box // box for positioning particles orderedInfo
{ {
min (-0.08 -0.08 0.015); // lower corner point of the box diameter 0.004; // minimum space between centers of particles
max ( 0.08 0.08 0.098); // upper corner point of the box
numPoints 30000; // number of particles in the simulation
axisOrder (z y x); // axis order for filling the space with particles
} }
positionOrderedInfo regionType box; // other options: cylinder and sphere
boxInfo // box information for positioning particles
{ {
diameter 0.004; // minimum space between centers of particles min (-0.08 -0.08 0.015); // lower corner point of the box
numPoints 30000; // number of particles in the simulation
axisOrder (z y x); // axis order for filling the space with particles max ( 0.08 0.08 0.098); // upper corner point of the box
} }
} }

View File

@ -6,35 +6,29 @@ objectName settingsDict;
objectType dictionary; objectType dictionary;
fileFormat ASCII; fileFormat ASCII;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
run rotatingDrumSmall;
run rotatingDrumSmall; 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) includeObjects (diameter); // save necessary (i.e., required) data on disk
/* // exclude unnecessary data from saving on disk
Simulation domain excludeObjects (rVelocity.dy1 pStructPosition.dy1 pStructVelocity.dy1);
every particles that goes outside this domain is deleted.
*/
domain
{
min (-0.12 -0.12 0);
max (0.12 0.12 0.11);
}
integrationMethod AdamsBashforth2; // integration method integrationMethod AdamsBashforth2; // integration method
writeFormat ascii; writeFormat ascii; // data writting format (ascii or binary)
timersReport Yes; // report timers? timersReport Yes; // report timers (Yes or No)
timersReportInterval 0.01; // time interval for reporting timers timersReportInterval 0.01; // time interval for reporting timers

View File

@ -0,0 +1,244 @@
# Problem Definition
The problem is to simulate a double pedestal tote blender with the diameter **0.03 m** and **0.1 m** respectively, the length **0.3 m**, rotating at **28 rpm**. This blender is filled with **20000** Particles. The timestep for integration is **0.00001 s**. There is one type of Particle in this blender that are being inserted during simulation to fill the drum.
* **20000** particles with **4 mm** diameter, at the rate of 20000 particles/s for 1 sec.
<html>
<body>
<div align="center"><b>
a view of the tote-blender while rotating
</div></b>
<div align="center">
<img src="sample sample sample sample", width=700px>
</div>
</body>
</html>
# Setting up the Case
As it has been explained in the previous cases, the simulation case setup is based on text-based scripts. Here, the simulation case setup are sotred in two folders: `caseSetup`, `setting`. (see the above folders). Unlike the previous cases, this case does not have the `stl` file. and the geometry is described in the `geometryDict` file.
## Defining particles
Then in the `caseSetup/sphereShape` the diameter and the material name of the particles are defined.
```C++
// names of shapes
names (sphere1);
// diameter of shapes (m)
diameters (0.004);
// material names for shapes
materials (prop1);
```
## Particle Insertion
In this case we have a region for ordering particles. These particles are placed in this blender. For example the script for the inserted particles is shown below.
<div align="center">
in <b>caseSetup/particleInsertion</b> file
</div>
```C++
// positions particles
positionParticles
{
// ordered positioning
method positionOrdered;
// maximum number of particles in the simulation
maxNumberOfParticles 40000;
// perform initial sorting based on morton code?
mortonSorting Yes;
// box for positioning particles
box
{
// lower corner point of the box
min (-0.06 -0.06 0.08);
// upper corner point of the box
max (0.06 0.06 0.18);
}
```
## Interaction between particles
In `caseSetup/interaction` file, material names and properties and interaction parameters are defined: interaction between the particles of rotating drum. Since we are defining 1 material for simulation, the interaction matrix is 1x1 (interactions are symetric).
```C++
// a list of materials names
materials (prop1);
// density of materials [kg/m3]
densities (1000.0);
contactListType sortedContactList;
model
{
contactForceModel nonLinearNonLimited;
rollingFrictionModel normal;
/*
Property (prop1-prop1);
*/
// 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);
}
```
## Settings
### Geometry
In the `settings/geometryDict` file, the geometry and axis of rotation is defined for the drum. The geometry is composed of a cylinder inlet and outlet, cone shell top and down, a cylinder shell and enter and exit Gate.
```C++
surfaces
{
enterGate
{
// type of wall
type planeWall;
// coords of wall
p1 (-0.05 -0.05 0.3);
p2 (-0.05 0.05 0.3);
p3 ( 0.05 0.05 0.3);
p4 (0.05 -0.05 0.3);
// material of wall
material prop1;
// motion component name
motion rotAxis;
}
cylinderinlet
{
// type of the wall
type cylinderWall;
// begin point of cylinder axis
p1 (0.0 0.0 0.28);
// end point of cylinder axis
p2 (0.0 0.0 0.3);
// radius at p1
radius1 0.03;
// radius at p2
radius2 0.03;
// number of divisions
resolution 36;
// material name of this wall
material prop1;
// motion component name
motion rotAxis;
}
coneShelltop
{
// type of the wall
type cylinderWall;
// begin point of cylinder axis
p1 (0.0 0.0 0.2);
// end point of cylinder axis
p2 (0.0 0.0 0.28);
// radius at p1
radius1 0.1;
// radius at p2
radius2 0.03;
// number of divisions
resolution 36;
// material name of this wall
material prop1;
// motion component name
motion rotAxis;
}
cylinderShell
{
// type of the wall
type cylinderWall;
// 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 prop1;
// motion component name
motion rotAxis;
}
coneShelldown
{
// type of the wall
type cylinderWall;
// begin point of cylinder axis
p1 (0.0 0.0 0.02);
// 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 prop1;
// motion component name
motion rotAxis;
}
/*
This is a plane wall at the exit of silo
*/
cylinderoutlet
{
// type of the wall
type cylinderWall;
// begin point of cylinder axis
p1 (0.0 0.0 0.0);
// 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 prop1;
// motion component name
motion rotAxis;
}
exitGate
{
type planeWall;
p1 (-0.05 -0.05 0);
p2 (-0.05 0.05 0);
p3 ( 0.05 0.05 0);
p4 (0.05 -0.05 0);
material prop1;
motion rotAxis;
}
}
```
### Rotating Axis Info
In this part of `geometryDict` the information of rotating axis and speed of rotation are defined. Unlike the previous cases, the rotation of this blender starts at time=**0 s**.
```C++
rotatingAxisMotionInfo
{
rotAxis
{
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 3; // rotation speed (rad/s)
}
}
```
## Performing Simulation
To perform simulations, enter the following commands one after another in the terminal.
Enter `$ particlesPhasicFlow` command to create the initial fields for particles.
Enter `$ geometryPhasicFlow` command to create the Geometry.
At last, enter `$ sphereGranFlow` command to start the simulation.
After finishing the simulation, you can use `$ pFlowtoVTK` to convert the results into vtk format storred in ./VTK folder.

View File

@ -0,0 +1,61 @@
/* -------------------------------*- C++ -*--------------------------------- *\
| phasicFlow File |
| copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */
objectName interaction;
objectType dicrionary;
/* ------------------------------------------------------------------------- */
// a list of materials names
materials (prop1);
// density of materials [kg/m3]
densities (1000.0);
contactListType sortedContactList;
model
{
contactForceModel nonLinearNonLimited;
rollingFrictionModel normal;
/*
Property (prop1-prop1);
*/
// 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 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;
}
}

View File

@ -0,0 +1,13 @@
/* -------------------------------*- C++ -*--------------------------------- *\
| phasicFlow File |
| copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */
objectName particleInsertion;
objectType dicrionary;
/* ------------------------------------------------------------------------- */
// is insertion active?
active no;
// not implemented for yes
collisionCheck No;

View File

@ -0,0 +1,13 @@
/* -------------------------------*- C++ -*--------------------------------- *\
| phasicFlow File |
| copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */
objectName sphereDict;
objectType sphereShape;
/* ------------------------------------------------------------------------- */
// names of shapes
names (sphere1);
// diameter of shapes (m)
diameters (0.004);
// material names for shapes
materials (prop1);

View File

@ -0,0 +1,7 @@
#!/bin/sh
cd ${0%/*} || exit 1 # Run from this directory
ls | grep -P "^(([0-9]+\.?[0-9]*)|(\.[0-9]+))$" | xargs -d"\n" rm -rf
rm -rf VTK
#------------------------------------------------------------------------------

View File

@ -0,0 +1,21 @@
#!/bin/sh
cd ${0%/*} || exit 1 # Run from this directory
echo "\n<--------------------------------------------------------------------->"
echo "1) Creating particles"
echo "<--------------------------------------------------------------------->\n"
particlesPhasicFlow
echo "\n<--------------------------------------------------------------------->"
echo "2) Creating geometry"
echo "<--------------------------------------------------------------------->\n"
geometryPhasicFlow
echo "\n<--------------------------------------------------------------------->"
echo "3) Running the case"
echo "<--------------------------------------------------------------------->\n"
sphereGranFlow
#------------------------------------------------------------------------------

View File

@ -0,0 +1,151 @@
/* -------------------------------*- C++ -*--------------------------------- *\
| phasicFlow File |
| copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */
objectName geometryDict;
objectType dictionary;
/* ------------------------------------------------------------------------- */
// motion model: rotating object around an axis
motionModel rotatingAxisMotion;
surfaces
{
enterGate
{
// type of wall
type planeWall;
// coords of wall
p1 (-0.05 -0.05 0.3);
p2 (-0.05 0.05 0.3);
p3 ( 0.05 0.05 0.3);
p4 (0.05 -0.05 0.3);
// material of wall
material prop1;
// motion component name
motion rotAxis;
}
cylinderinlet
{
// type of the wall
type cylinderWall;
// begin point of cylinder axis
p1 (0.0 0.0 0.28);
// end point of cylinder axis
p2 (0.0 0.0 0.3);
// radius at p1
radius1 0.03;
// radius at p2
radius2 0.03;
// number of divisions
resolution 36;
// material name of this wall
material prop1;
// motion component name
motion rotAxis;
}
coneShelltop
{
// type of the wall
type cylinderWall;
// begin point of cylinder axis
p1 (0.0 0.0 0.2);
// end point of cylinder axis
p2 (0.0 0.0 0.28);
// radius at p1
radius1 0.1;
// radius at p2
radius2 0.03;
// number of divisions
resolution 36;
// material name of this wall
material prop1;
// motion component name
motion rotAxis;
}
cylinderShell
{
// type of the wall
type cylinderWall;
// 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 prop1;
// motion component name
motion rotAxis;
}
coneShelldown
{
// type of the wall
type cylinderWall;
// begin point of cylinder axis
p1 (0.0 0.0 0.02);
// 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 prop1;
// motion component name
motion rotAxis;
}
/*
This is a plane wall at the exit of silo
*/
cylinderoutlet
{
// type of the wall
type cylinderWall;
// begin point of cylinder axis
p1 (0.0 0.0 0.0);
// 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 prop1;
// motion component name
motion rotAxis;
}
exitGate
{
type planeWall;
p1 (-0.05 -0.05 0);
p2 (-0.05 0.05 0);
p3 ( 0.05 0.05 0);
p4 (0.05 -0.05 0);
material prop1;
motion rotAxis;
}
}
// information for rotatingAxisMotion motion model
rotatingAxisMotionInfo
{
rotAxis
{
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 3; // rotation speed (rad/s)
}
}

View File

@ -0,0 +1,59 @@
/* -------------------------------*- C++ -*--------------------------------- *\
| phasicFlow File |
| copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */
objectName particlesDict;
objectType dictionary;
/* ------------------------------------------------------------------------- */
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)
rotVelocity realx3 (0 0 0);
// name of the particle shape
shapeName word sphere1;
}
selectors
{}
}
// positions particles
positionParticles
{
// ordered positioning
method positionOrdered;
// maximum number of particles in the simulation
maxNumberOfParticles 40000;
// perform initial sorting based on morton code?
mortonSorting Yes;
// box for positioning particles
box
{
// lower corner point of the box
min (-0.06 -0.06 0.08);
// upper corner point of the box
max (0.06 0.06 0.18);
}
positionOrderedInfo
{
// minimum space between centers of particles
diameter 0.004;
// number of particles in the simulation
numPoints 20000;
// axis order for filling the space with particles
axisOrder (z y x);
}
}

View File

@ -0,0 +1,34 @@
/* -------------------------------*- C++ -*--------------------------------- *\
| phasicFlow File |
| copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */
objectName settingsDict;
objectType dictionary;;
/*---------------------------------------------------------------------------*/
run toteBlender;
// time step for integration (s)
dt 0.00001;
// start time for simulation
startTime 0;
// end time for simulation
endTime 10;
// time interval for saving the simulation
saveInterval 0.1;
// maximum number of digits for time folder
timePrecision 6;
// gravity vector (m/s2)
g (0 0 -9.8);
/* Simulation domain */
/* every particles that goes outside this domain is deleted. */
domain
{
min (-0.5 -0.5 -0.5);
max (0.5 0.5 0.5);
}
// integration method
integrationMethod AdamsBashforth2;
// report timers?
timersReport Yes;
// time interval for reporting timers
timersReportInterval 0.01;