Compare commits

...

18 Commits

Author SHA1 Message Date
wanqing0421 d5b9ca4c43 remove rapid filling tutorial 2025-02-16 13:08:09 +08:00
Simboy 9ccc487a51
Merge branch 'PhasicFlow:main' into main 2025-02-16 12:38:31 +08:00
wanqing0421 ae251598a4 update rapid filling 2025-02-16 12:31:11 +08:00
HRN 2a8146c43f add operator << for Set 2025-02-15 22:03:41 +03:30
HRN fd6b3ebc60 correction for layeredSiloFilling 2025-02-15 22:02:16 +03:30
PhasicFlow 8e13c377eb
Merge pull request #169 from ramin1728/main
layeredSiloFilling is Updated.
2025-02-15 19:57:39 +03:30
ramin1728 5e272cfa1b RotaryAirLockValve is Updated. 2025-02-14 23:30:27 +03:30
ramin1728 252725863f layeredSiloFilling is Updated. 2025-02-14 23:10:46 +03:30
ramin1728 bd4e566dc2 layeredSiloFilling 2025-02-14 23:07:13 +03:30
PhasicFlow 0532c441a8
Merge pull request #167 from PhasicFlow/develop
bug correction for the time when empty is used
2025-02-14 22:55:22 +03:30
PhasicFlow 3c1d4d57ad
Merge pull request #168 from PhasicFlow/siloHemogenization
New tutorial on hemogenization silo is added
2025-02-14 22:55:09 +03:30
HRN ff2f1d41e8 New tutorial on hemogenization silo is added 2025-02-14 22:51:46 +03:30
HRN 774afd5f37 bug correction for the time when empty is used 2025-02-14 22:50:28 +03:30
PhasicFlow 191801b344
Merge pull request #165 from ramin1728/main
binarySystemOfParticles is Updated.
2025-02-14 20:42:14 +03:30
PhasicFlow 545de300ae
Merge pull request #166 from PhasicFlow/develop
edits
2025-02-14 20:40:44 +03:30
HRN 9b3c4f83b9 edits 2025-02-14 20:39:37 +03:30
ramin1728 b315d12357 conveyorBelt is Updated. 2025-02-11 23:35:58 +03:30
ramin1728 7e7184f1c5 binarySystemOfParticles is Updated. 2025-02-11 23:18:29 +03:30
47 changed files with 859 additions and 1045 deletions

View File

@ -74,7 +74,7 @@ pFlow::initialize_pFlowProcessors();
do do
{ {
//Ping;
if(! sphInsertion.insertParticles( if(! sphInsertion.insertParticles(
Control.time().currentIter(), Control.time().currentIter(),
Control.time().currentTime(), Control.time().currentTime(),
@ -90,21 +90,25 @@ pFlow::initialize_pFlowProcessors();
// set force to zero, predict, particle deletion and etc. // set force to zero, predict, particle deletion and etc.
sphParticles.beforeIteration(); sphParticles.beforeIteration();
//Ping;
sphInteraction.beforeIteration(); sphInteraction.beforeIteration();
sphInteraction.iterate(); sphInteraction.iterate();
surfGeometry.iterate(); surfGeometry.iterate();
//Ping;
sphParticles.iterate(); sphParticles.iterate();
//Ping;
sphInteraction.afterIteration(); sphInteraction.afterIteration();
//Ping;
surfGeometry.afterIteration(); surfGeometry.afterIteration();
//Ping;
sphParticles.afterIteration(); sphParticles.afterIteration();
//Ping;
}while(Control++); }while(Control++);

View File

@ -35,10 +35,14 @@ pFlow::globalDamping::globalDamping(const systemControl& control)
performDamping_ = !equal(dampingFactor_, static_cast<real>(1.0)); performDamping_ = !equal(dampingFactor_, static_cast<real>(1.0));
if( performDamping_ ) if( performDamping_ )
REPORT(2)<<"Global damping "<<Yellow_Text("is active")<< {
" and damping factor is "<<dampingFactor_<<END_REPORT; REPORT(2)<<"Global damping "<<Yellow_Text("is active")<<
else " and damping factor is "<<dampingFactor_<<END_REPORT;
REPORT(2)<<"Global damping "<<Yellow_Text("is not active")<<"."<<END_REPORT; }
else
{
REPORT(2)<<"Global damping "<<Yellow_Text("is not active")<<"."<<END_REPORT;
}
} }

View File

@ -24,6 +24,7 @@ Licence:
#include <set> #include <set>
#include "types.hpp" #include "types.hpp"
#include "iOstream.hpp"
namespace pFlow namespace pFlow
{ {
@ -34,6 +35,20 @@ using Set = std::set<Key,std::less<Key>,std::allocator<Key>>;
using wordSet = Set<word>; using wordSet = Set<word>;
template<typename key>
iOstream& operator<<(iOstream& os, const Set<key>& s)
{
os << beginListToken();
for(auto elm = s.begin(); elm!=s.end(); )
{
os<< *elm++;
if( elm!=s.end() )
os<<spaceToken();
}
os<< endListToken();
os.check(FUNCTION_NAME);
return os;
}
} }

View File

@ -36,6 +36,8 @@ bool pFlow::systemControl::readIncludeExclue(const dictionary& dict)
} }
} }
REPORT(1)<<"IncludeObject list is: "<<Green_Text(includeList_)<<END_REPORT;
if (dict.containsDataEntry("excludeObjects")) if (dict.containsDataEntry("excludeObjects"))
{ {
wordList excld = dict.getVal<wordList>("excludeObjects"); wordList excld = dict.getVal<wordList>("excludeObjects");
@ -44,6 +46,8 @@ bool pFlow::systemControl::readIncludeExclue(const dictionary& dict)
excludeList_.insert(nm); excludeList_.insert(nm);
} }
} }
REPORT(1)<<"excludeObject list is: "<<Green_Text(excludeList_)<<END_REPORT;
return true; return true;
} }

View File

@ -1,7 +1,7 @@
# Problem Definition # Problem Definition
The problem is to simulate a Rotary Air-Lock Valve. The external diameter of rotor is about 21 cm. There is one type of particle in this simulation. Particles are inserted into the inlet of the valve from t=**0** s. The problem is to simulate a Rotary Air-Lock Valve. The external diameter of rotor is about 21 cm. There is one type of particle in this simulation. Particles are inserted into the inlet of the valve from t=**0** s.
* **28000** particles with **5 mm** diameter are inserted into the valve with the rate of **4000 particles/s**. * **28000** particles with **5 mm** diameter are inserted into the valve with the rate of **4000 particles/s**.
* The rotor starts its ortation at t = 1.25 s at the rate of 2.1 rad/s. * The rotor starts its rotation at t = 1.25 s at the rate of 2.1 rad/s.
<html> <html>

View File

@ -43,19 +43,19 @@ model
Geff (0.8e6 0.8e6 // Shear modulus [Pa] Geff (0.8e6 0.8e6 // Shear modulus [Pa]
0.8e6); 0.8e6);
nu (0.25 0.25 // Poisson's ratio [-] nu (0.25 0.25 // Poisson's ratio [-]
0.25); 0.25);
en (0.7 0.8 // coefficient of normal restitution en (0.70 0.80 // coefficient of normal restitution
1.0); 1.0);
et (1.0 1.0 // coefficient of tangential restitution et (1.0 1.0 // coefficient of tangential restitution
1.0); 1.0);
mu (0.3 0.35 // dynamic friction mu (0.3 0.35 // dynamic friction
0.35); 0.35);
mur (0.1 0.1 // rolling friction mur (0.1 0.1 // rolling friction
0.1); 0.1);
} }

View File

@ -6,7 +6,7 @@ objectName particleInsertion;
objectType dicrionary; objectType dicrionary;
fileFormat ASCII; fileFormat ASCII;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
active yes; // is insertion active -> yes or no active yes; // is insertion active -> yes or no
checkForCollision No; // is checked -> yes or no checkForCollision No; // is checked -> yes or no

View File

@ -28,8 +28,8 @@ in <b>caseSetup/sphereShape</b> file
```C++ ```C++
names (smallSphere largeSphere); // names of shapes names (smallSphere largeSphere); // names of shapes
diameters (0.003 0.005); // diameter of shapes (m) diameters (0.003 0.005); // diameter of shapes (m)
materials (prop1 prop1); // material names for shapes materials (prop1 prop1); // material names for shapes
``` ```
### Positioning and initial mixture ### Positioning and initial mixture
@ -44,18 +44,17 @@ in <b>settings/particlesDict</b> file
// positions particles // positions particles
positionParticles positionParticles
{ {
method ordered; // other options: random or empty method ordered; // other options: random or empty
orderedInfo orderedInfo
{ {
diameter 0.005; // minimum space between centers of particles diameter 0.005; // minimum space between centers of particles
numPoints 30000; // number of particles in the simulation numPoints 30000; // number of particles in the simulation
axisOrder (z x y); // axis order for filling the space with particles axisOrder (z x y); // axis order for filling the space with particles
} }
regionType cylinder; // other options: box and sphere regionType cylinder; // other options: box and sphere
cylinder // cylinder region for positioning particles cylinder // cylinder region for positioning particles
{ {
p1 (0.0 0.0 0.003); // begin point of cylinder axis (m m m) p1 (0.0 0.0 0.003); // begin point of cylinder axis (m m m)
p2 (0.0 0.0 0.097); // end point of cylinder axis (m m m) p2 (0.0 0.0 0.097); // end point of cylinder axis (m m m)
@ -76,9 +75,9 @@ setFields
{ {
/* /*
Default value for fields defined for particles Default value for fields defined for particles
These fields should always be defined for simulations with These fields should always be defined for simulations with
spherical particles. spherical particles.
*/ */
defaultValue defaultValue
{ {
@ -92,15 +91,16 @@ setFields
{ {
shapeAssigne shapeAssigne
{ {
selector stridedRange; // other options: box, cylinder, sphere, randomPoints selector stridedRange; // other options: box, cylinder, sphere, randomPoints
stridedRangeInfo stridedRangeInfo
{ {
begin 0; // begin index of points begin 0; // begin index of points
end 30000; // end index of points end 30000; // end index of points
stride 3; // stride for selector stride 3; // stride for selector
} }
fieldValue // fields that the selector is applied to
fieldValue // fields that the selector is applied to
{ {
/* /*
sets shapeName of the selected points to largeSphere sets shapeName of the selected points to largeSphere

View File

@ -6,9 +6,9 @@ objectName interaction;
objectType dicrionary; objectType dicrionary;
fileFormat ASCII; fileFormat ASCII;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
materials (prop1); // properties of material materials (prop1); // properties of material
densities (1000.0); // density of materials [kg/m3] densities (1000.0); // density of materials [kg/m3]
contactListType sortedContactList; contactListType sortedContactList;
@ -38,14 +38,14 @@ model
Geff (0.8e6); // Shear modulus [Pa] Geff (0.8e6); // Shear modulus [Pa]
nu (0.25); // Poisson's ratio [-] nu (0.25); // Poisson's ratio [-]
en (0.7); // coefficient of normal restitution en (0.7); // coefficient of normal restitution
et (1.0); // coefficient of tangential restitution et (1.0); // coefficient of tangential restitution
mu (0.3); // dynamic friction mu (0.3); // dynamic friction
mur (0.1); // rolling friction mur (0.1); // rolling friction
} }

View File

View File

@ -26,19 +26,19 @@ surfaces
{ {
type cylinderWall; // other options: cuboidWall and planeWall type cylinderWall; // other options: cuboidWall and planeWall
p1 (0.0 0.0 0.0); // begin point of cylinder axis p1 (0.0 0.0 0.0); // begin point of cylinder axis
p2 (0.0 0.0 0.1); // end point of cylinder axis p2 (0.0 0.0 0.1); // end point of cylinder axis
radius1 0.12; // radius at p1 radius1 0.12; // radius at p1
radius2 0.12; // radius at p2 radius2 0.12; // radius at p2
resolution 24; // number of divisions resolution 24; // number of divisions
material prop1; // material name of this wall material prop1; // material name of this wall
motion rotAxis; // motion component name motion rotAxis; // motion component name
} }
/* /*

View File

@ -29,20 +29,20 @@ setFields
{ {
shapeAssigne shapeAssigne
{ {
selector stridedRange; // other options: box, cylinder, sphere, randomPoints selector stridedRange; // other options: box, cylinder, sphere, randomPoints
stridedRangeInfo stridedRangeInfo
{ {
begin 0; // begin index of points begin 0; // begin index of points
end 30000; // end index of points end 30000; // end index of points
stride 3; // stride for selector stride 3; // stride for selector
} }
fieldValue // fields that the selector is applied to fieldValue // fields that the selector is applied to
{ {
shapeName word largeSphere; // sets shapeName of the selected points to largeSphere shapeName word largeSphere; // sets shapeName of the selected points to largeSphere
} }
} }
} }
@ -50,13 +50,13 @@ setFields
positionParticles // positions particles positionParticles // positions particles
{ {
method ordered; // other options: random and empty method ordered; // other options: random and empty
orderedInfo orderedInfo
{ {
diameter 0.005; // diameter of particles diameter 0.005; // diameter of particles
numPoints 30000; // number of particles in the simulation numPoints 30000; // number of particles in the simulation
axisOrder (z x y); // axis order for filling the space with particles axisOrder (z x y); // axis order for filling the space with particles
} }
@ -69,6 +69,6 @@ positionParticles // positions particles
p2 (0.0 0.0 0.097); // end point of cylinder axis p2 (0.0 0.0 0.097); // end point of cylinder axis
radius 0.117; // radius of cylinder radius 0.117; // radius of cylinder
} }
} }

View File

@ -16,13 +16,13 @@ contactSearch
{ {
method NBS; // method for broad search particle-particle method NBS; // method for broad search particle-particle
updateInterval 10; updateInterval 10;
sizeRatio 1.1; sizeRatio 1.1;
cellExtent 0.55; cellExtent 0.55;
adjustableBox No; adjustableBox No;
} }
model model
@ -46,25 +46,25 @@ model
0.8e6 0.8e6 0.8e6 0.8e6
0.8e6); 0.8e6);
nu (0.25 0.25 0.25 // Poisson's ratio [-] nu (0.25 0.25 0.25 // Poisson's ratio [-]
0.25 0.25 0.25 0.25
0.25); 0.25);
en (0.97 0.97 0.85 // coefficient of normal restitution en (0.97 0.97 0.85 // coefficient of normal restitution
0.97 0.85 0.97 0.85
1.00); 1.00);
et (1.0 1.0 1.0 // coefficient of tangential restitution et (1.0 1.0 1.0 // coefficient of tangential restitution
1.0 1.0 1.0 1.0
1.0); 1.0);
mu (0.65 0.65 0.35 // dynamic friction mu (0.65 0.65 0.35 // dynamic friction
0.65 0.35 0.65 0.35
0.35); 0.35);
mur (0.1 0.1 0.1 // rolling friction mur (0.1 0.1 0.1 // rolling friction
0.1 0.1 0.1 0.1
0.1); 0.1);
} }

View File

@ -6,7 +6,7 @@ objectName geometryDict;
objectType dictionary; objectType dictionary;
fileFormat ASCII; fileFormat ASCII;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
motionModel conveyorBelt; // motion model can be rotatingAxis or stationary or vibrating motionModel conveyorBelt; // motion model can be rotatingAxis or stationary or vibrating
conveyorBeltInfo conveyorBeltInfo
{ {
@ -54,17 +54,22 @@ surfaces
belt belt
{ {
type stlWall; // type of the wall type stlWall; // type of the wall
file belt.stl; // file name in stl folder
material wallMat; // material name of this wall file belt.stl; // file name in stl folder
motion conveyorBelt1; // motion component name
material wallMat; // material name of this wall
motion conveyorBelt1; // motion component name
} }
box box
{ {
type stlWall; // type of the wall type stlWall; // type of the wall
file box.stl; // file name in stl folder
material wallMat; // material name of this wall file box.stl; // file name in stl folder
material wallMat; // material name of this wall
} }
} }

View File

@ -0,0 +1,16 @@
# Simulating a simple homogenization silo using periodic boundary
## Problem
A homogenization silo is used to mix particles inside a silo using the circulation of particles. A pneumatic conveying system is used to carry particles at the exit and re-enter them from the top. Here, we use a `periodic` boundary to simulate the action of the pneumatic conveyor system for circulating particles. Particles that are exiting from the bottom are re-entered from top using this boundary (`periodic`).
<div align ="center">
<b>
A view of homogenization silo
</b>
<img src="./homoSilo.jpeg" style="width: 400px;">
</div>
***

View File

@ -54,10 +54,6 @@ model
0.97 0.85 0.97 0.85
1.00); 1.00);
et (1.0 1.0 1.0 // coefficient of tangential restitution
1.0 1.0
1.0);
mu (0.65 0.65 0.35 // dynamic friction mu (0.65 0.65 0.35 // dynamic friction
0.65 0.35 0.65 0.35
0.35); 0.35);

View File

@ -0,0 +1,214 @@
/* -------------------------------*- C++ -*--------------------------------- *\
| phasicFlow File |
| copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */
objectName particleInsertion;
objectType dicrionary;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
active Yes; // is insertion active -> yes or no
/*
one layers of particles are packed
*/
layer0
{
timeControl simulationTime;
regionType cylinder; // type of insertion region
rate 5100; // insertion rate (particles/s)
startTime 0; // (s)
endTime 0.5; // (s)
insertionInterval 0.025; // s
cylinderInfo
{
radius 0.09; // radius of cylinder (m)
p1 (0.0 0.0 0.1); // (m,m,m)
p2 (0.0 0.0 0.11); // (m,m,m)
}
setFields
{
velocity realx3 (0.0 0.0 -0.6); // initial velocity of inserted particles
}
mixture
{
parType1 1; // mixture composition of inserted particles
}
}
layer1
{
timeControl simulationTime;
regionType cylinder; // type of insertion region
rate 5100; // insertion rate (particles/s)
startTime 0.7; // (s)
endTime 1.2; // (s)
insertionInterval 0.025; // s
cylinderInfo
{
radius 0.09;
p1 (0.0 0.0 0.16 ); // (m,m,m)
p2 (0.0 0.0 0.17); // (m,m,m)
}
setFields
{
velocity realx3 (0.0 0.0 -0.6);
}
mixture
{
parType2 1; // only parType2
}
}
layer2
{
timeControl simulationTime;
regionType cylinder; // type of insertion region
rate 5100; // insertion rate (particles/s)
startTime 1.4; // (s)
endTime 1.9; // (s)
insertionInterval 0.025; // s
cylinderInfo
{
radius 0.09;
p1 ( 0.0 0.0 0.2 ); // (m,m,m)
p2 ( 0.0 0.0 0.21); // (m,m,m)
}
setFields
{
velocity realx3 (0.0 0.0 -0.6);
}
mixture
{
lightSphere 1; // only lightSphere
}
}
layer3
{
timeControl simulationTime;
regionType cylinder; // type of insertion region
rate 5100; // insertion rate (particles/s)
startTime 2.1; // (s)
endTime 2.6; // (s)
insertionInterval 0.025; // s
cylinderInfo
{
radius 0.09;
p1 ( 0.0 0.0 0.28 ); // (m,m,m)
p2 ( 0.0 0.0 0.29); // (m,m,m)
}
setFields
{
velocity realx3 (0.0 0.0 -0.6);
}
mixture
{
heavySphere 1;
}
}
layer4
{
timeControl simulationTime;
regionType cylinder; // type of insertion region
rate 5100; // insertion rate (particles/s)
startTime 2.8; // (s)
endTime 3.3; // (s)
insertionInterval 0.025; // s
cylinderInfo
{
radius 0.09;
p1 ( 0.0 0.0 0.37 ); // (m,m,m)
p2 ( 0.0 0.0 0.38); // (m,m,m)
}
setFields
{
velocity realx3 (0.0 0.0 -0.6);
}
mixture
{
lightSphere 1;
}
}
layer5
{
timeControl simulationTime;
regionType cylinder; // type of insertion region
rate 5100; // insertion rate (particles/s)
startTime 3.4; // (s)
endTime 3.9; // (s)
insertionInterval 0.025; // s
cylinderInfo
{
radius 0.09;
p1 ( 0.0 0.0 0.38 ); // (m,m,m)
p2 ( 0.0 0.0 0.39); // (m,m,m)
}
setFields
{
velocity realx3 (0.0 0.0 -0.6);
}
mixture
{
heavySphere 1;
}
}

View File

@ -2,18 +2,14 @@
| phasicFlow File | | phasicFlow File |
| copyright: www.cemf.ir | | copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */ \* ------------------------------------------------------------------------- */
objectName particleInsertion;
objectType dicrionary;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
objectName sphereDict; objectName sphereDict;
objectType sphereShape; objectType sphereShape;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
names (parType1 parType2); // names of shapes
// names of shapes diameters (0.00885 0.0089); // diameter of shapes
names (sphere);
materials (lightMat heavyMat); // material names for shapes
// diameter of shapes
diameters (0.005);
// material names for shapes
materials (sphereMat);

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

View File

@ -15,7 +15,10 @@ echo "3) Running the case"
echo "<--------------------------------------------------------------------->\n" echo "<--------------------------------------------------------------------->\n"
sphereGranFlow sphereGranFlow
echo "\n<--------------------------------------------------------------------->"
echo "4) Converting to vtk"
echo "<--------------------------------------------------------------------->\n"
pFlowToVTK --fields diameter velocity id --binary
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------

View File

@ -0,0 +1,52 @@
/* -------------------------------*- C++ -*--------------------------------- *\
| phasicFlow File |
| copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */
objectName domainDict;
objectType dictionary;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
// Simulation domain: every particles that goes outside this domain will be deleted
globalBox
{
min (-0.11 -0.11 -0.15);
max ( 0.11 0.11 0.4);
}
boundaries
{
left
{
type exit;
}
right
{
type exit;
}
bottom
{
type exit;
}
top
{
type exit;
}
rear
{
type periodic;
}
front
{
type periodic;
}
}

View File

@ -6,14 +6,20 @@ objectName geometryDict;
objectType dictionary; objectType dictionary;
fileFormat ASCII; fileFormat ASCII;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
motionModel conveyorBelt; // motion model can be rotatingAxis or stationary or vibrating
conveyorBeltInfo motionModel rotatingAxis;
rotatingAxisInfo
{ {
conveyorBelt1 // for opening the gate of silo between time 4.1 and 5.1 s
{ gateMotion
tangentVelocity (0.5 0 0); {
} p1 (-0.04 -0.04 -0.1);
p2 (-0.04 -0.04 0.0);
omega 3.14;
startTime 4.1;
endTime 5.1;
}
} }
surfaces surfaces
@ -43,7 +49,7 @@ surfaces
p2 (0.0 0.0 0.0); // end point of cylinder axis p2 (0.0 0.0 0.0); // end point of cylinder axis
radius1 0.02; // radius at p1 radius1 0.04; // radius at p1
radius2 0.1; // radius at p2 radius2 0.1; // radius at p2
@ -52,19 +58,25 @@ surfaces
material wallMat; // material name of this wall material wallMat; // material name of this wall
} }
belt /*
{ This is a plane wall at the exit of silo
type stlWall; // type of the wall */
file belt.stl; // file name in stl folder
material wallMat; // material name of this wall
motion conveyorBelt1; // motion component name
}
box exitGate
{ {
type stlWall; // type of the wall type planeWall; // other options: cuboidWall and cylinderWall
file box.stl; // file name in stl folder
material wallMat; // material name of this wall p1 (-0.04 -0.04 -0.1); // first point of the wall
p2 ( 0.04 -0.04 -0.1); // second point of the wall
p3 ( 0.04 0.04 -0.1); // third point of the wall
p4 (-0.04 0.04 -0.1); // fourth point of the wall
material wallMat; // material name of the wall
motion gateMotion;
} }
} }

View File

@ -0,0 +1,36 @@
/* -------------------------------*- C++ -*--------------------------------- *\
| phasicFlow File |
| copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */
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
{
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 parType1; // name of the particle shape
}
selectors
{}
}
positionParticles
{
method empty; // empty simulation
}

View File

@ -0,0 +1,41 @@
/* -------------------------------*- C++ -*--------------------------------- *\
| phasicFlow File |
| copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */
objectName settingsDict;
objectType dictionary;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
run homogenizationSilo;
dt 0.00001; // time step for integration (s)
startTime 0.0; // start time for simulation
endTime 20; // end time for simulation
saveInterval 0.05; // time interval for saving the simulation
timePrecision 4; // maximum number of digits for time folder
g (0 0 -9.8); // gravity vector (m/s2)
// overrides the default behavior
includeObjects (diameter);
// exclude unnecessary data from saving on disk
excludeObjects (rVelocity.dy1 rVelocity.dy2 rVelocity.dy3
pStructPosition.dy1 pStructPosition.dy2 pStructPosition.dy3
pStructVelocity.dy1 pStructVelocity.dy2 pStructVelocity.dy3);
integrationMethod AdamsBashforth4; // integration method
writeFormat binary; // data writting format (ascii or binary)
timersReport Yes; // report timers
timersReportInterval 0.1; // time interval for reporting timers

View File

@ -16,11 +16,11 @@ contactSearch
{ {
method NBS; // method for broad search particle-particle method NBS; // method for broad search particle-particle
updateInterval 10; updateInterval 10;
sizeRatio 1.1; sizeRatio 1.1;
cellExtent 0.55; cellExtent 0.55;
adjustableBox Yes; adjustableBox Yes;
} }
@ -46,26 +46,19 @@ model
0.8e6 0.8e6 0.8e6 0.8e6
0.8e6); 0.8e6);
nu (0.25 0.25 0.25 // Poisson's ratio [-] nu (0.25 0.25 0.25 // Poisson's ratio [-]
0.25 0.25 0.25 0.25
0.25); 0.25);
en (0.97 0.97 0.85 // coefficient of normal restitution en (0.97 0.97 0.85 // coefficient of normal restitution
0.97 0.85 0.97 0.85
1.00); 1.00);
et (1.0 1.0 1.0 // coefficient of tangential restitution mu (0.65 0.65 0.35 // dynamic friction
1.0 1.0 0.65 0.35
1.0); 0.35);
mu (0.65 0.65 0.35 // dynamic friction mur (0.1 0.1 0.1 // rolling friction
0.65 0.35 0.1 0.1
0.35); 0.1);
mur (0.1 0.1 0.1 // rolling friction
0.1 0.1
0.1);
} }

View File

@ -6,49 +6,172 @@ objectName particleInsertion;
objectType dicrionary; objectType dicrionary;
fileFormat ASCII; fileFormat ASCII;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
active Yes; // is insertion active -> yes or no
checkForCollision No; // is checked -> yes or no // is insertion active -> yes or no
active Yes;
/* /*
one layers of particles are packed six layers of particles are packed
*/ */
layer0 layer0
{ {
timeControl simulationTime; timeControl simulationTime;
regionType cylinder; // type of insertion region
rate 15000; // insertion rate (particles/s)
startTime 0; // (s)
endTime 0.5; // (s)
insertionInterval 0.025; // s
regionType cylinder; // type of insertion region cylinderInfo
{
radius 0.09; // radius of cylinder (m)
p1 (0.0 0.0 0.1); // (m,m,m)
p2 (0.0 0.0 0.11); // (m,m,m)
}
rate 15000; // insertion rate (particles/s) setFields
{
velocity realx3 (0.0 0.0 -0.6); // initial velocity of inserted particles
}
startTime 0; // (s) mixture
{
endTime 0.5; // (s) lightSphere 1; // mixture composition of inserted particles
}
insertionInterval 0.025; // s
cylinderInfo
{
radius 0.09; // radius of cylinder (m)
p1 ( 0.0 0.0 0.1 ); // (m,m,m)
p2 ( 0.0 0.0 0.11); // (m,m,m)
}
setFields
{
velocity realx3 (0.0 0.0 -0.6); // initial velocity of inserted particles
}
mixture
{
lightSphere 1; // mixture composition of inserted particles
}
} }
layer1
{
timeControl simulationTime;
regionType cylinder; // type of insertion region
rate 15000; // insertion rate (particles/s)
startTime 0.7; // (s)
endTime 1.2; // (s)
insertionInterval 0.025; // s
cylinderInfo
{
radius 0.09;
p1 (0.0 0.0 0.16 ); // (m,m,m)
p2 (0.0 0.0 0.17); // (m,m,m)
}
setFields
{
velocity realx3 (0.0 0.0 -0.6);
}
mixture
{
heavySphere 1; // only heavySphere
}
}
layer2
{
timeControl simulationTime;
regionType cylinder; // type of insertion region
rate 15000; // insertion rate (particles/s)
startTime 1.4; // (s)
endTime 1.9; // (s)
insertionInterval 0.025; // s
cylinderInfo
{
radius 0.09;
p1 ( 0.0 0.0 0.2 ); // (m,m,m)
p2 ( 0.0 0.0 0.21); // (m,m,m)
}
setFields
{
velocity realx3 (0.0 0.0 -0.6);
}
mixture
{
lightSphere 1; // only lightSphere
}
}
layer3
{
timeControl simulationTime;
regionType cylinder; // type of insertion region
rate 15000; // insertion rate (particles/s)
startTime 2.1; // (s)
endTime 2.6; // (s)
insertionInterval 0.025; // s
cylinderInfo
{
radius 0.09;
p1 ( 0.0 0.0 0.28 ); // (m,m,m)
p2 ( 0.0 0.0 0.29); // (m,m,m)
}
setFields
{
velocity realx3 (0.0 0.0 -0.6);
}
mixture
{
heavySphere 1;
}
}
layer4
{
timeControl simulationTime;
regionType cylinder; // type of insertion region
rate 15000; // insertion rate (particles/s)
startTime 2.8; // (s)
endTime 3.3; // (s)
insertionInterval 0.025; // s
cylinderInfo
{
radius 0.09;
p1 ( 0.0 0.0 0.37 ); // (m,m,m)
p2 ( 0.0 0.0 0.38); // (m,m,m)
}
setFields
{
velocity realx3 (0.0 0.0 -0.6);
}
mixture
{
lightSphere 1;
}
}
layer5
{
timeControl simulationTime;
regionType cylinder; // type of insertion region
rate 15000; // insertion rate (particles/s)
startTime 3.4; // (s)
endTime 3.9; // (s)
insertionInterval 0.025; // s
cylinderInfo
{
radius 0.09;
p1 ( 0.0 0.0 0.38); // (m,m,m)
p2 ( 0.0 0.0 0.39); // (m,m,m)
}
setFields
{
velocity realx3 (0.0 0.0 -0.6);
}
mixture
{
heavySphere 1;
}
}

View File

@ -6,10 +6,10 @@ objectName sphereDict;
objectType sphereShape; objectType sphereShape;
fileFormat ASCII; fileFormat ASCII;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
names (lightSphere heavySphere); // names of shapes names (lightSphere heavySphere); // names of shapes
diameters (0.007 0.007); // diameter of shapes diameters (0.007 0.007); // diameter of shapes
materials (lightMat heavyMat); // material names for shapes materials (lightMat heavyMat); // material names for shapes

View File

@ -2,64 +2,49 @@
| phasicFlow File | | phasicFlow File |
| copyright: www.cemf.ir | | 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.11 -0.11 -0.11);
max ( 0.11 0.11 0.41); objectName domainDict;
objectType dictionary;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
// Simulation domain: every particle that goes outside this domain will be deleted
globalBox
{
min (-0.11 -0.11 -0.11);
max ( 0.11 0.11 0.41);
} }
boundaries boundaries
{ {
// Determines how often (how many iterations) do you want to left
{
type exit; // other options: periodic, reflective
}
// rebuild the list of particles in the neighbor list right
{
type exit; // other options: periodic, reflective
}
// of all boundaries in the simulation domain bottom
{
type exit; // other options: periodic, reflective
}
neighborListUpdateInterval 30; top
{
type exit; // other options: periodic, reflective
}
// Determines how often do you want to update the new changes in the boundary rear
{
type exit; // other options: periodic, reflective
}
updateInterval 10; front
{
// The distance from the boundary plane within which particles are marked to be in the boundary list type exit; // other options: periodic, reflective
}
neighborLength 0.004;
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

@ -2,75 +2,54 @@
| phasicFlow File | | phasicFlow File |
| copyright: www.cemf.ir | | copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */ \* ------------------------------------------------------------------------- */
objectName geometryDict;
objectType dictionary; objectName geometryDict;
objectType dictionary;
fileFormat ASCII; fileFormat ASCII;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
motionModel stationary; // motion model can be rotatingAxis or stationary or vibrating
motionModel stationary; // motion model can be rotatingAxis, stationary, or vibrating
stationaryInfo stationaryInfo
{ {
// No additional information needed for stationary motion model
} }
surfaces surfaces
{ {
cylinderShell cylinderShell
{ {
type cylinderWall; // other options: cuboidWall and planeWall type cylinderWall; // other options: cuboidWall and planeWall
p1 (0.0 0.0 0.0); // begin point of cylinder axis
p2 (0.0 0.0 0.4); // end point of cylinder axis
radius1 0.1; // radius at p1
radius2 0.1; // radius at p2
resolution 36; // number of divisions
material wallMat; // material name of this wall
}
p1 (0.0 0.0 0.0); // begin point of cylinder axis coneShell
{
type cylinderWall; // other options: cuboidWall and planeWall
p1 (0.0 0.0 -0.1); // begin point of cylinder axis
p2 (0.0 0.0 0.0); // end point of cylinder axis
radius1 0.02; // radius at p1
radius2 0.1; // radius at p2
resolution 36; // number of divisions
material wallMat; // material name of this wall
}
p2 (0.0 0.0 0.4); // end point of cylinder axis /*
This is a plane wall at the exit of the silo that plugs the exit.
radius1 0.1; // radius at p1 */
exitGate
radius2 0.1; // radius at p2 {
type planeWall; // other options: cuboidWall and cylinderWall
resolution 36; // number of divisions p1 (-0.02 -0.02 -0.1); // first point of the wall
p2 ( 0.02 -0.02 -0.1); // second point of the wall
material wallMat; // material name of this wall p3 ( 0.02 0.02 -0.1); // third point of the wall
} p4 (-0.02 0.02 -0.1); // fourth point of the wall
material wallMat; // material name of the wall
coneShell }
{
type cylinderWall; // other options: cuboidWall and planeWall
p1 (0.0 0.0 -0.1); // begin point of cylinder axis
p2 (0.0 0.0 0.0); // end point of cylinder axis
radius1 0.02; // radius at p1
radius2 0.1; // radius at p2
resolution 36; // number of divisions
material wallMat; // material name of this wall
}
/*
This is a plane wall at the exit of silo
*/
exitGate
{
type planeWall; // other options: cuboidWall and cylinderWall
p1 (-0.02 -0.02 -0.1); // first point of the wall
p2 ( 0.02 -0.02 -0.1); // second point of the wall
p3 ( 0.02 0.02 -0.1); // third point of the wall
p4 (-0.02 0.02 -0.1); // fourth point of the wall
material wallMat; // material name of the wall
}
} }

View File

@ -10,9 +10,7 @@ setFields
{ {
/* /*
Default value for fields defined for particles Default value for fields defined for particles
These fields should always be defined for simulations with These fields should always be defined for simulations with
spherical particles. spherical particles.
*/ */
@ -20,7 +18,7 @@ setFields
{ {
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) acceleration realx3 (0 0 0); // linear acceleration (m/s^2)
rVelocity realx3 (0 0 0); // rotational velocity (rad/s) rVelocity realx3 (0 0 0); // rotational velocity (rad/s)
@ -31,17 +29,8 @@ setFields
{} {}
} }
positionParticles // positions particles positionParticles
{ {
method empty; // other options: ordered and random method empty; // empty simulation
regionType box; // other options: cylinder and sphere
boxInfo // box region for positioning particles
{
min (-0.08 -0.08 0.015); // lower corner point of the box
max ( 0.08 0.08 0.098); // upper corner point of the box
}
} }

View File

@ -2,41 +2,35 @@
| phasicFlow File | | phasicFlow File |
| copyright: www.cemf.ir | | copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */ \* ------------------------------------------------------------------------- */
objectName settingsDict; objectName settingsDict;
objectType dictionary; objectType dictionary;
fileFormat ASCII; fileFormat ASCII;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
run layerdSiloFilling; run layeredSiloFilling;
dt 0.00001; // time step for integration (s) dt 0.00001; // time step for integration (s)
startTime 0.0; // start time for simulation startTime 0.0; // start time for simulation
endTime 5.0; // end time for simulation endTime 5.0; // 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 0 -9.8); // gravity vector (m/s2) g (0 0 -9.8); // gravity vector (m/s^2)
// save data objects that are not automatically saved on disk. // save data objects that are not automatically saved on disk.
// overrides the default behavior // overrides the default behavior
includeObjects (diameter mass);
includeObjects (diameter);
// exclude unnecessary data from saving on disk // exclude unnecessary data from saving on disk
excludeObjects (rVelocity.dy1 pStructPosition.dy1 pStructVelocity.dy1);
excludeObjects (rVelocity.dy1 pStructPosition.dy1 pStructVelocity.dy1); integrationMethod AdamsBashforth2; // integration method
integrationMethod AdamsBashforth2; // integration method
writeFormat ascii; // data writting format (ascii or binary)
timersReport Yes; // report timers
timersReportInterval 0.01; // time interval for reporting timers
writeFormat ascii; // data writing format (ascii or binary)
timersReport Yes; // report timers
timersReportInterval 0.05; // time interval for reporting timers

View File

@ -1,54 +0,0 @@
/* -------------------------------*- C++ -*--------------------------------- *\
| phasicFlow File |
| copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */
objectName particleInsertion;
objectType dicrionary;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
active No; // is insertion active -> yes or no
checkForCollision No; // is checked -> yes or no
/*
one layers of particles are packed
*/
layer0
{
timeControl simulationTime;
//regionType cylinder; // type of insertion region
rate 15000; // insertion rate (particles/s)
startTime 0; // (s)
endTime 0.5; // (s)
insertionInterval 0.025; // s
//cylinderInfo
//{
// radius 0.09; // radius of cylinder (m)
// p1 ( 0.0 0.0 0.1 ); // (m,m,m)
// p2 ( 0.0 0.0 0.11); // (m,m,m)
//}
setFields
{
velocity realx3 (0.0 0.0 -0.6); // initial velocity of inserted particles
}
mixture
{
lightSphere 1; // mixture composition of inserted particles
}
}

View File

@ -1,15 +0,0 @@
/* -------------------------------*- C++ -*--------------------------------- *\
| phasicFlow File |
| copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */
objectName sphereDict;
objectType sphereShape;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
names (lightSphere heavySphere); // names of shapes
diameters (0.007 0.007); // diameter of shapes
materials (lightMat heavyMat); // material names for shapes

View File

@ -1,3 +0,0 @@
2
0.049302 0.00425012 -0.0068537
0.0456989 -0.0209381 -0.00786771

View File

@ -1,65 +0,0 @@
/* -------------------------------*- 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.11 -0.11 -0.41);
max ( 0.33 0.11 0.41);
}
boundaries
{
// 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
neighborListUpdateInterval 30;
// Determines how often do you want to update the new changes in the boundary
updateInterval 10;
// The distance from the boundary plane within which particles are marked to be in the boundary list
neighborLength 0.004;
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

@ -1,58 +0,0 @@
/* -------------------------------*- C++ -*--------------------------------- *\
| phasicFlow File |
| copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */
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
{
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 lightSphere; // name of the particle shape
}
selectors
{}
}
positionParticles // positions particles
{
method file; // other options: empty, ordered and random
fileInfo
{
name dataFile; // the name of the file that contains position and particle data, the data format is ASCII. The file is located at the root case folder
numPoints 10000;
fields ( (velocity realx3) (shapeName word) ); // (optional, it could be an empty list or omitted) list of other fields/data that should be read from the file
commaSeparated No; // optional (default is No). if Yes, then fields are separated by a comma
}
regionType box; // other options: cylinder and sphere
boxInfo // box region for positioning particles
{
min (-0.08 -0.08 0.015); // lower corner point of the box
max ( 0.08 0.08 0.098); // upper corner point of the box
}
}

View File

@ -1,42 +0,0 @@
/* -------------------------------*- C++ -*--------------------------------- *\
| phasicFlow File |
| copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */
objectName settingsDict;
objectType dictionary;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
run layerdSiloFilling;
dt 0.00005; // time step for integration (s)
startTime 0.0; // start time for simulation
endTime 5.0; // end time for simulation
saveInterval 0.05; // time interval for saving the simulation
timePrecision 6; // maximum number of digits for time folder
g (0 0 -9.8); // gravity vector (m/s2)
// save data objects that are not automatically saved on disk.
// overrides the default behavior
includeObjects (diameter);
// exclude unnecessary data from saving on disk
excludeObjects (rVelocity.dy1 pStructPosition.dy1 pStructVelocity.dy1);
integrationMethod AdamsBashforth2; // integration method
writeFormat ascii; // data writting format (ascii or binary)
timersReport Yes; // report timers
timersReportInterval 0.01; // time interval for reporting timers

View File

@ -1,198 +0,0 @@
solid
facet normal -1.000000 0.000000 0.000000
outer loop
vertex -0.1 0.045 -0.145
vertex -0.1 0.05 -0.12
vertex -0.1 0.05 -0.15
endloop
endfacet
facet normal -1.000000 0.000000 0.000000
outer loop
vertex -0.1 0.045 -0.145
vertex -0.1 0.045 -0.12
vertex -0.1 0.05 -0.12
endloop
endfacet
facet normal -1.000000 0.000000 0.000000
outer loop
vertex -0.1 0.05 -0.15
vertex -0.1 -0.05 -0.15
vertex -0.1 0.045 -0.145
endloop
endfacet
facet normal -1.000000 0.000000 0.000000
outer loop
vertex -0.1 -0.05 -0.15
vertex -0.1 -0.045 -0.145
vertex -0.1 0.045 -0.145
endloop
endfacet
facet normal -1.000000 0.000000 0.000000
outer loop
vertex -0.1 -0.045 -0.145
vertex -0.1 -0.05 -0.12
vertex -0.1 -0.045 -0.12
endloop
endfacet
facet normal -1.000000 0.000000 0.000000
outer loop
vertex -0.1 -0.05 -0.15
vertex -0.1 -0.05 -0.12
vertex -0.1 -0.045 -0.145
endloop
endfacet
facet normal 0.000000 0.000000 -1.000000
outer loop
vertex -0.1 -0.05 -0.15
vertex -0.1 0.05 -0.15
vertex 0.2 0.05 -0.15
endloop
endfacet
facet normal 0.000000 0.000000 -1.000000
outer loop
vertex -0.1 -0.05 -0.15
vertex 0.2 0.05 -0.15
vertex 0.2 -0.05 -0.15
endloop
endfacet
facet normal 1.000000 0.000000 0.000000
outer loop
vertex 0.2 0.05 -0.12
vertex 0.2 0.045 -0.145
vertex 0.2 0.05 -0.15
endloop
endfacet
facet normal 1.000000 -0.000000 0.000000
outer loop
vertex 0.2 0.045 -0.12
vertex 0.2 0.045 -0.145
vertex 0.2 0.05 -0.12
endloop
endfacet
facet normal 1.000000 0.000000 0.000000
outer loop
vertex 0.2 -0.05 -0.15
vertex 0.2 0.05 -0.15
vertex 0.2 0.045 -0.145
endloop
endfacet
facet normal 1.000000 -0.000000 0.000000
outer loop
vertex 0.2 -0.045 -0.145
vertex 0.2 -0.05 -0.15
vertex 0.2 0.045 -0.145
endloop
endfacet
facet normal 1.000000 -0.000000 0.000000
outer loop
vertex 0.2 -0.05 -0.12
vertex 0.2 -0.045 -0.145
vertex 0.2 -0.045 -0.12
endloop
endfacet
facet normal 1.000000 0.000000 0.000000
outer loop
vertex 0.2 -0.05 -0.12
vertex 0.2 -0.05 -0.15
vertex 0.2 -0.045 -0.145
endloop
endfacet
facet normal 0.000000 -1.000000 0.000000
outer loop
vertex -0.1 -0.05 -0.15
vertex 0.2 -0.05 -0.15
vertex 0.2 -0.05 -0.12
endloop
endfacet
facet normal 0.000000 -1.000000 0.000000
outer loop
vertex -0.1 -0.05 -0.15
vertex 0.2 -0.05 -0.12
vertex -0.1 -0.05 -0.12
endloop
endfacet
facet normal 0.000000 1.000000 0.000000
outer loop
vertex 0.2 0.05 -0.12
vertex -0.1 0.05 -0.15
vertex -0.1 0.05 -0.12
endloop
endfacet
facet normal 0.000000 1.000000 -0.000000
outer loop
vertex 0.2 0.05 -0.15
vertex -0.1 0.05 -0.15
vertex 0.2 0.05 -0.12
endloop
endfacet
facet normal 0.000000 0.000000 1.000000
outer loop
vertex -0.1 -0.05 -0.12
vertex 0.2 -0.05 -0.12
vertex 0.2 -0.045 -0.12
endloop
endfacet
facet normal -0.000000 0.000000 1.000000
outer loop
vertex -0.1 -0.045 -0.12
vertex -0.1 -0.05 -0.12
vertex 0.2 -0.045 -0.12
endloop
endfacet
facet normal 0.000000 0.000000 1.000000
outer loop
vertex -0.1 0.045 -0.12
vertex 0.2 0.045 -0.12
vertex 0.2 0.05 -0.12
endloop
endfacet
facet normal -0.000000 0.000000 1.000000
outer loop
vertex -0.1 0.05 -0.12
vertex -0.1 0.045 -0.12
vertex 0.2 0.05 -0.12
endloop
endfacet
facet normal 0.000000 -1.000000 0.000000
outer loop
vertex -0.1 0.045 -0.145
vertex 0.2 0.045 -0.145
vertex 0.2 0.045 -0.12
endloop
endfacet
facet normal 0.000000 -1.000000 0.000000
outer loop
vertex -0.1 0.045 -0.145
vertex 0.2 0.045 -0.12
vertex -0.1 0.045 -0.12
endloop
endfacet
facet normal 0.000000 0.000000 1.000000
outer loop
vertex -0.1 -0.045 -0.145
vertex 0.2 -0.045 -0.145
vertex 0.2 0.045 -0.145
endloop
endfacet
facet normal -0.000000 0.000000 1.000000
outer loop
vertex -0.1 0.045 -0.145
vertex -0.1 -0.045 -0.145
vertex 0.2 0.045 -0.145
endloop
endfacet
facet normal 0.000000 1.000000 -0.000000
outer loop
vertex 0.2 -0.045 -0.145
vertex -0.1 -0.045 -0.12
vertex 0.2 -0.045 -0.12
endloop
endfacet
facet normal 0.000000 1.000000 0.000000
outer loop
vertex 0.2 -0.045 -0.145
vertex -0.1 -0.045 -0.145
vertex -0.1 -0.045 -0.12
endloop
endfacet
endsolid

View File

@ -1,198 +0,0 @@
solid
facet normal -1.000000 0.000000 0.000000
outer loop
vertex 0.182 -0.073 -0.18
vertex 0.182 0.069 -0.18
vertex 0.182 0.069 -0.28
endloop
endfacet
facet normal -1.000000 0.000000 0.000000
outer loop
vertex 0.182 -0.073 -0.18
vertex 0.182 0.069 -0.28
vertex 0.182 -0.073 -0.28
endloop
endfacet
facet normal -0.000000 -1.000000 0.000000
outer loop
vertex 0.323 -0.073 -0.18
vertex 0.182 -0.073 -0.18
vertex 0.182 -0.073 -0.28
endloop
endfacet
facet normal 0.000000 -1.000000 -0.000000
outer loop
vertex 0.323 -0.073 -0.18
vertex 0.182 -0.073 -0.28
vertex 0.323 -0.073 -0.28
endloop
endfacet
facet normal 1.000000 0.000000 0.000000
outer loop
vertex 0.323 0.069 -0.18
vertex 0.323 -0.073 -0.18
vertex 0.323 -0.073 -0.28
endloop
endfacet
facet normal 1.000000 0.000000 0.000000
outer loop
vertex 0.323 0.069 -0.18
vertex 0.323 -0.073 -0.28
vertex 0.323 0.069 -0.28
endloop
endfacet
facet normal 0.000000 1.000000 0.000000
outer loop
vertex 0.182 0.069 -0.28
vertex 0.323 0.069 -0.18
vertex 0.323 0.069 -0.28
endloop
endfacet
facet normal -0.000000 1.000000 0.000000
outer loop
vertex 0.182 0.069 -0.18
vertex 0.323 0.069 -0.18
vertex 0.182 0.069 -0.28
endloop
endfacet
facet normal 0.000000 0.000000 -1.000000
outer loop
vertex 0.182 0.069 -0.28
vertex 0.323 0.069 -0.28
vertex 0.182 -0.073 -0.28
endloop
endfacet
facet normal 0.000000 0.000000 -1.000000
outer loop
vertex 0.182 -0.073 -0.28
vertex 0.323 0.069 -0.28
vertex 0.323 -0.073 -0.28
endloop
endfacet
facet normal 0.000000 0.000000 1.000000
outer loop
vertex 0.323 -0.073 -0.18
vertex 0.318 -0.068 -0.18
vertex 0.187 -0.068 -0.18
endloop
endfacet
facet normal 0.000000 0.000000 1.000000
outer loop
vertex 0.323 -0.073 -0.18
vertex 0.187 -0.068 -0.18
vertex 0.182 -0.073 -0.18
endloop
endfacet
facet normal 0.000000 0.000000 1.000000
outer loop
vertex 0.187 0.064 -0.18
vertex 0.182 0.069 -0.18
vertex 0.182 -0.073 -0.18
endloop
endfacet
facet normal 0.000000 0.000000 1.000000
outer loop
vertex 0.187 0.064 -0.18
vertex 0.182 -0.073 -0.18
vertex 0.187 -0.068 -0.18
endloop
endfacet
facet normal 0.000000 0.000000 1.000000
outer loop
vertex 0.318 0.064 -0.18
vertex 0.318 -0.068 -0.18
vertex 0.323 -0.073 -0.18
endloop
endfacet
facet normal 0.000000 0.000000 1.000000
outer loop
vertex 0.323 0.069 -0.18
vertex 0.318 0.064 -0.18
vertex 0.323 -0.073 -0.18
endloop
endfacet
facet normal 0.000000 0.000000 1.000000
outer loop
vertex 0.323 0.069 -0.18
vertex 0.182 0.069 -0.18
vertex 0.187 0.064 -0.18
endloop
endfacet
facet normal 0.000000 0.000000 1.000000
outer loop
vertex 0.323 0.069 -0.18
vertex 0.187 0.064 -0.18
vertex 0.318 0.064 -0.18
endloop
endfacet
facet normal 1.000000 0.000000 0.000000
outer loop
vertex 0.187 0.064 -0.18
vertex 0.187 -0.068 -0.18
vertex 0.187 0.064 -0.275
endloop
endfacet
facet normal 1.000000 0.000000 0.000000
outer loop
vertex 0.187 0.064 -0.275
vertex 0.187 -0.068 -0.18
vertex 0.187 -0.068 -0.275
endloop
endfacet
facet normal -0.000000 1.000000 0.000000
outer loop
vertex 0.187 -0.068 -0.18
vertex 0.318 -0.068 -0.18
vertex 0.187 -0.068 -0.275
endloop
endfacet
facet normal 0.000000 1.000000 0.000000
outer loop
vertex 0.187 -0.068 -0.275
vertex 0.318 -0.068 -0.18
vertex 0.318 -0.068 -0.275
endloop
endfacet
facet normal -1.000000 0.000000 0.000000
outer loop
vertex 0.318 -0.068 -0.18
vertex 0.318 0.064 -0.18
vertex 0.318 -0.068 -0.275
endloop
endfacet
facet normal -1.000000 0.000000 0.000000
outer loop
vertex 0.318 -0.068 -0.275
vertex 0.318 0.064 -0.18
vertex 0.318 0.064 -0.275
endloop
endfacet
facet normal -0.000000 -1.000000 -0.000000
outer loop
vertex 0.318 0.064 -0.18
vertex 0.187 0.064 -0.18
vertex 0.318 0.064 -0.275
endloop
endfacet
facet normal 0.000000 -1.000000 0.000000
outer loop
vertex 0.318 0.064 -0.275
vertex 0.187 0.064 -0.18
vertex 0.187 0.064 -0.275
endloop
endfacet
facet normal 0.000000 0.000000 1.000000
outer loop
vertex 0.318 0.064 -0.275
vertex 0.187 0.064 -0.275
vertex 0.187 -0.068 -0.275
endloop
endfacet
facet normal 0.000000 0.000000 1.000000
outer loop
vertex 0.318 0.064 -0.275
vertex 0.187 -0.068 -0.275
vertex 0.318 -0.068 -0.275
endloop
endfacet
endsolid

View File

@ -30,7 +30,7 @@ pFlow::empty::empty(
positionParticles(control, dict), positionParticles(control, dict),
position_ position_
( (
"empty",maxNumberOfParticles(), 0, RESERVE() "empty",1, 0, RESERVE()
) )
{ {
} }

View File

@ -21,29 +21,63 @@ Licence:
#include "error.hpp" #include "error.hpp"
#include "dictionary.hpp" #include "dictionary.hpp"
#include "positionFile.hpp" #include "positionFile.hpp"
#include "streams.hpp"
// #include "token.hpp"
#include "fileSystem.hpp"
#include "iFstream.hpp" #include "iFstream.hpp"
#include "oFstream.hpp"
bool pFlow::positionFile::positionPointsFile() bool pFlow::positionFile::positionPointsFile()
{ {
std::cout << "Reading user defined position file...."; REPORT(0) << "Reading user defined position file....";
position_.clear(); position_.clear();
// ToDo: read position data from file. // Read position data from file.
iFstream is(fileName_);
std::ifstream inFile(fileName_);
inFile >> numPoints_;
realx3 tempPoint; realx3 tempPoint;
for(int i = 0; i < numPoints_; i++) token tok;
while (!is.eof() || !is.bad())
{ {
inFile >> tempPoint.x_ >> tempPoint.y_ >> tempPoint.z_; // read position x
is >> tempPoint.x_;
if(commaSeparated_)
{
is >> tok;
if(tok.type() != token::COMMA)
{
fatalErrorInFunction << "Error datafile format, the data not comma separated!";
return false;
}
}
// read position y
is >> tempPoint.y_;
if(commaSeparated_)
{
is >> tok;
if(tok.type() != token::COMMA)
{
fatalErrorInFunction << "Error datafile format, the data not comma separated!";
return false;
}
}
// read position z
is >> tempPoint.z_;
// insert position data to vector
position_.push_back(tempPoint); position_.push_back(tempPoint);
} }
std::cout << "Done!" << std::endl; REPORT(0) << "Done!" << END_REPORT;
return true; return true;
} }
@ -63,15 +97,15 @@ pFlow::positionFile::positionFile
( (
poDict_.getVal<word>("name") poDict_.getVal<word>("name")
), ),
numPoints_ commaSeparated_
( (
poDict_.getVal<uint64>("numPoints") poDict_.getValOrSet("commaSeparated", Logical("Yes"))
), ),
position_ position_
( (
"position", "position",
max(maxNumberOfParticles(), numPoints_), max(maxNumberOfParticles(), position_.size()),
numPoints_ , 0,
RESERVE() RESERVE()
) )
{ {

View File

@ -35,12 +35,14 @@ private:
dictionary poDict_; dictionary poDict_;
word fileName_; // word fileName_;
uint32 numPoints_; fileSystem fileName_;
realx3Vector position_; realx3Vector position_;
Logical commaSeparated_;
bool positionPointsFile(); bool positionPointsFile();
public: public:
@ -77,6 +79,11 @@ public:
return 0; return 0;
} }
// bool commaSeparated()const
// {
// return commaSeparated_();
// }
// - const access to position // - const access to position
const realx3Vector& position()const final const realx3Vector& position()const final
{ {
@ -88,8 +95,6 @@ public:
{ {
return position_; return position_;
} }
}; };

View File

@ -146,8 +146,8 @@ pFlow::positionOrdered::positionOrdered
position_ position_
( (
"positionOrdered", "positionOrdered",
max(maxNumberOfParticles(), numPoints_), numPoints_,
numPoints_ , numPoints_,
RESERVE() RESERVE()
) )
{ {

View File

@ -32,45 +32,10 @@ pFlow::realx3Vector pFlow::positionParticles::sortByMortonCode(
uint64 index; uint64 index;
}; };
/*realx3 minP = min(position);
realx3 maxP = max(position);
real cellsize = maxDiameter();
cells<uint64> allCells( box(minP, maxP), cellsize);
Vector<indexMorton> indMor(position.size(),RESERVE());
indMor.clear();
uint64 ind=0;
for(const auto& p:position)
{
auto cellInd = allCells.pointIndex(p);
indMor.push_back(
{ xyzToMortonCode64(cellInd.x(), cellInd.y(), cellInd.z()),
ind++});
}
INFORMATION<<"Performing morton sorting."<<END_INFO;
std::sort(
indMor.begin(),
indMor.end(),
[]( const indexMorton &lhs, const indexMorton &rhs){
return lhs.morton < rhs.morton; } );
realx3Vector sortedPos(position.capacity(), RESERVE());
sortedPos.clear();
for(auto& ind:indMor)
{
sortedPos.push_back( position[ind.index] );
}*/
WARNING<<"Morton sorting is inactive!"<<END_WARNING; WARNING<<"Morton sorting is inactive!"<<END_WARNING;
return position; return position;
} }
pFlow::positionParticles::positionParticles pFlow::positionParticles::positionParticles
( (
systemControl& control, systemControl& control,
@ -78,12 +43,8 @@ pFlow::positionParticles::positionParticles
) )
: :
regionType_(dict.getValOrSet<word>("regionType", "domain")), regionType_(dict.getValOrSet<word>("regionType", "domain")),
maxNumberOfParticles_(dict.getValOrSet(
"maxNumberOfParticles",
static_cast<uint32>(10000))),
mortonSorting_(dict.getValOrSet("mortonSorting", Logical("Yes"))) mortonSorting_(dict.getValOrSet("mortonSorting", Logical("Yes")))
{ {
if( regionType_ != "domain" ) if( regionType_ != "domain" )
{ {
pRegion_ = peakableRegion::create( pRegion_ = peakableRegion::create(
@ -92,7 +53,7 @@ pFlow::positionParticles::positionParticles
} }
else else
{ {
fileDictionary domainDict fileDictionary domainDictionary
( (
objectFile objectFile
{ {
@ -103,12 +64,10 @@ pFlow::positionParticles::positionParticles
}, },
&control.settings() &control.settings()
); );
pRegion_ = peakableRegion::create(regionType_,domainDict.subDict("globalBox")); pRegion_ = peakableRegion::create("box", domainDictionary.subDict("globalBox"));
} }
} }
pFlow::realx3Vector pFlow::positionParticles::getFinalPosition() pFlow::realx3Vector pFlow::positionParticles::getFinalPosition()
{ {
if(mortonSorting_) if(mortonSorting_)
@ -130,10 +89,8 @@ pFlow::uniquePtr<pFlow::positionParticles>
const dictionary & dict const dictionary & dict
) )
{ {
word method = dict.getVal<word>("method"); word method = dict.getVal<word>("method");
if( dictionaryvCtorSelector_.search(method) ) if( dictionaryvCtorSelector_.search(method) )
{ {
return dictionaryvCtorSelector_[method] (control, dict); return dictionaryvCtorSelector_[method] (control, dict);

View File

@ -40,12 +40,8 @@ private:
word regionType_; word regionType_;
uint32 maxNumberOfParticles_ = 10000;
Logical mortonSorting_; Logical mortonSorting_;
realx3Vector sortByMortonCode(const realx3Vector& position)const; realx3Vector sortByMortonCode(const realx3Vector& position)const;
protected: protected:
@ -83,12 +79,6 @@ public:
return mortonSorting_(); return mortonSorting_();
} }
inline
auto maxNumberOfParticles()const
{
return maxNumberOfParticles_;
}
virtual uint32 numPoints()const = 0; virtual uint32 numPoints()const = 0;
virtual uint32 size()const = 0; virtual uint32 size()const = 0;

View File

@ -122,14 +122,14 @@ pFlow::positionRandom::positionRandom
position_ position_
( (
"position", "position",
maxNumberOfParticles(), 1,
0, 0,
RESERVE() RESERVE()
), ),
diameters_ diameters_
( (
"diameters", "diameters",
maxNumberOfParticles(), 1,
0, 0,
RESERVE() RESERVE()
) )