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
{
//Ping;
if(! sphInsertion.insertParticles(
Control.time().currentIter(),
Control.time().currentTime(),
@ -84,27 +84,31 @@ pFlow::initialize_pFlowProcessors();
"particle insertion failed in sphereDFlow solver.\n";
return 1;
}
// set force to zero
surfGeometry.beforeIteration();
// set force to zero, predict, particle deletion and etc.
sphParticles.beforeIteration();
//Ping;
sphInteraction.beforeIteration();
sphInteraction.iterate();
sphInteraction.iterate();
surfGeometry.iterate();
//Ping;
sphParticles.iterate();
//Ping;
sphInteraction.afterIteration();
//Ping;
surfGeometry.afterIteration();
//Ping;
sphParticles.afterIteration();
//Ping;
}while(Control++);

View File

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

View File

@ -24,6 +24,7 @@ Licence:
#include <set>
#include "types.hpp"
#include "iOstream.hpp"
namespace pFlow
{
@ -34,6 +35,20 @@ using Set = std::set<Key,std::less<Key>,std::allocator<Key>>;
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

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

View File

@ -1,7 +1,7 @@
# 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.
* **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>
@ -206,4 +206,4 @@ To perform simulations, enter the following commands one after another in the te
Enter `$ particlesPhasicFlow` command to create the initial fields for particles (here the simulaiton has no particle at the beginning).
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 stored in ./VTK folder.
After finishing the simulation, you can use `$ pFlowtoVTK` to convert the results into vtk format stored in ./VTK folder.

View File

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

View File

@ -6,7 +6,7 @@ objectName particleInsertion;
objectType dicrionary;
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

View File

@ -28,8 +28,8 @@ in <b>caseSetup/sphereShape</b> file
```C++
names (smallSphere largeSphere); // names of shapes
diameters (0.003 0.005); // diameter of shapes (m)
materials (prop1 prop1); // material names for shapes
diameters (0.003 0.005); // diameter of shapes (m)
materials (prop1 prop1); // material names for shapes
```
### Positioning and initial mixture
@ -44,18 +44,17 @@ in <b>settings/particlesDict</b> file
// positions particles
positionParticles
{
method ordered; // other options: random or empty
method ordered; // other options: random or empty
orderedInfo
{
diameter 0.005; // minimum space between centers of particles
numPoints 30000; // number of particles in the simulation
diameter 0.005; // minimum space between centers of particles
numPoints 30000; // number of particles in the simulation
axisOrder (z x y); // axis order for filling the space with particles
}
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)
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
These fields should always be defined for simulations with
spherical particles.
*/
These fields should always be defined for simulations with
spherical particles.
*/
defaultValue
{
@ -87,20 +86,21 @@ setFields
rotVelocity realx3 (0 0 0); // rotational velocity (rad/s)
shapeName word smallSphere; // name of the particle shape
}
selectors
{
shapeAssigne
{
selector stridedRange; // other options: box, cylinder, sphere, randomPoints
selector stridedRange; // other options: box, cylinder, sphere, randomPoints
stridedRangeInfo
{
begin 0; // begin index of points
begin 0; // begin 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
@ -139,4 +139,4 @@ Options:
--setFields-only Exectue the setFields part only. Read the pointStructure from time folder and setFields and save the result in the same time folder.
```
so, with flag `--setFields-only`, you can execute the `setFields` part of `particlesDict`. Now suppose that you have a simulation case which proceeded up to 2 seconds and for any reason you want to change some field value at time 3 s and continue the simulation from 3 s. To this end, you need to change `startTime` in settings dictionary to 3, execute `particlesPhasicFlow --setFields-only`, and start the simulation.
so, with flag `--setFields-only`, you can execute the `setFields` part of `particlesDict`. Now suppose that you have a simulation case which proceeded up to 2 seconds and for any reason you want to change some field value at time 3 s and continue the simulation from 3 s. To this end, you need to change `startTime` in settings dictionary to 3, execute `particlesPhasicFlow --setFields-only`, and start the simulation.

View File

@ -6,9 +6,9 @@ objectName interaction;
objectType dicrionary;
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;
@ -38,14 +38,14 @@ model
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
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
{
selector stridedRange; // other options: box, cylinder, sphere, randomPoints
selector stridedRange; // other options: box, cylinder, sphere, randomPoints
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
{
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
{
method ordered; // other options: random and empty
method ordered; // other options: random and empty
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
}
@ -69,6 +69,6 @@ positionParticles // positions particles
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
updateInterval 10;
updateInterval 10;
sizeRatio 1.1;
cellExtent 0.55;
cellExtent 0.55;
adjustableBox No;
adjustableBox No;
}
model
@ -46,25 +46,25 @@ model
0.8e6 0.8e6
0.8e6);
nu (0.25 0.25 0.25 // Poisson's ratio [-]
0.25 0.25
0.25);
nu (0.25 0.25 0.25 // Poisson's ratio [-]
0.25 0.25
0.25);
en (0.97 0.97 0.85 // coefficient of normal restitution
0.97 0.85
1.00);
en (0.97 0.97 0.85 // coefficient of normal restitution
0.97 0.85
1.00);
et (1.0 1.0 1.0 // coefficient of tangential restitution
1.0 1.0
1.0);
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
0.65 0.35
0.35);
mu (0.65 0.65 0.35 // dynamic friction
0.65 0.35
0.35);
mur (0.1 0.1 0.1 // rolling friction
0.1 0.1
0.1);
mur (0.1 0.1 0.1 // rolling friction
0.1 0.1
0.1);
}

View File

@ -6,7 +6,7 @@ objectName geometryDict;
objectType dictionary;
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
{
@ -54,17 +54,22 @@ surfaces
belt
{
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
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
{
type stlWall; // type of the wall
file box.stl; // file name in stl folder
material wallMat; // material name of this wall
type stlWall; // type of the 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
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
0.65 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 |
| copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */
objectName particleInsertion;
objectType dicrionary;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
objectName sphereDict;
objectType sphereShape;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
names (parType1 parType2); // names of shapes
// names of shapes
names (sphere);
diameters (0.00885 0.0089); // diameter of shapes
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"
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;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
motionModel conveyorBelt; // motion model can be rotatingAxis or stationary or vibrating
conveyorBeltInfo
motionModel rotatingAxis;
rotatingAxisInfo
{
conveyorBelt1
{
tangentVelocity (0.5 0 0);
}
// for opening the gate of silo between time 4.1 and 5.1 s
gateMotion
{
p1 (-0.04 -0.04 -0.1);
p2 (-0.04 -0.04 0.0);
omega 3.14;
startTime 4.1;
endTime 5.1;
}
}
surfaces
@ -43,7 +49,7 @@ surfaces
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
@ -52,19 +58,25 @@ surfaces
material wallMat; // material name of this wall
}
belt
{
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
}
/*
This is a plane wall at the exit of silo
*/
box
exitGate
{
type stlWall; // type of the wall
file box.stl; // file name in stl folder
material wallMat; // material name of this wall
type planeWall; // other options: cuboidWall and cylinderWall
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
updateInterval 10;
updateInterval 10;
sizeRatio 1.1;
cellExtent 0.55;
cellExtent 0.55;
adjustableBox Yes;
}
@ -46,26 +46,19 @@ model
0.8e6 0.8e6
0.8e6);
nu (0.25 0.25 0.25 // Poisson's ratio [-]
0.25 0.25
0.25);
en (0.97 0.97 0.85 // coefficient of normal restitution
0.97 0.85
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
0.65 0.35
0.35);
mur (0.1 0.1 0.1 // rolling friction
0.1 0.1
0.1);
}
nu (0.25 0.25 0.25 // Poisson's ratio [-]
0.25 0.25
0.25);
en (0.97 0.97 0.85 // coefficient of normal restitution
0.97 0.85
1.00);
mu (0.65 0.65 0.35 // dynamic friction
0.65 0.35
0.35);
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;
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
{
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)
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
}
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;
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

@ -1,65 +1,50 @@
/* -------------------------------*- C++ -*--------------------------------- *\
| phasicFlow File |
| copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */
objectName domainDict;
objectType dictionary;
/* -------------------------------*- 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
// 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);
min (-0.11 -0.11 -0.11);
max ( 0.11 0.11 0.41);
}
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;
// 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
}
}
top
{
type exit; // other options: periodic, reflective
}
rear
{
type exit; // other options: periodic, reflective
}
front
{
type exit; // other options: periodic, reflective
}
}

View File

@ -1,76 +1,55 @@
/* -------------------------------*- C++ -*--------------------------------- *\
| phasicFlow File |
| copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */
objectName geometryDict;
objectType dictionary;
/* -------------------------------*- C++ -*--------------------------------- *\
| phasicFlow File |
| copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */
objectName geometryDict;
objectType dictionary;
fileFormat ASCII;
/*---------------------------------------------------------------------------*/
motionModel stationary; // motion model can be rotatingAxis or stationary or vibrating
motionModel stationary; // motion model can be rotatingAxis, stationary, or vibrating
stationaryInfo
{
// No additional information needed for stationary motion model
}
surfaces
{
cylinderShell
{
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
}
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
}
}
cylinderShell
{
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
}
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 the silo that plugs the exit.
*/
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
These fields should always be defined for simulations with
spherical particles.
*/
@ -20,7 +18,7 @@ setFields
{
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)
@ -31,17 +29,8 @@ setFields
{}
}
positionParticles // positions particles
positionParticles
{
method empty; // other options: ordered and random
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
}
method empty; // empty simulation
}

View File

@ -1,42 +1,36 @@
/* -------------------------------*- C++ -*--------------------------------- *\
| phasicFlow File |
| copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */
objectName settingsDict;
objectType dictionary;
fileFormat ASCII;
/* -------------------------------*- C++ -*--------------------------------- *\
| phasicFlow File |
| copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */
objectName settingsDict;
objectType dictionary;
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.
// overrides the default behavior
includeObjects (diameter);
// overrides the default behavior
includeObjects (diameter mass);
// 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
writeFormat ascii; // data writting format (ascii or binary)
timersReport Yes; // report timers
timersReportInterval 0.01; // time interval for reporting timers
integrationMethod AdamsBashforth2; // integration method
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),
position_
(
"empty",maxNumberOfParticles(), 0, RESERVE()
"empty",1, 0, RESERVE()
)
{
}

View File

@ -21,29 +21,63 @@ Licence:
#include "error.hpp"
#include "dictionary.hpp"
#include "positionFile.hpp"
#include "streams.hpp"
// #include "token.hpp"
#include "fileSystem.hpp"
#include "iFstream.hpp"
#include "oFstream.hpp"
bool pFlow::positionFile::positionPointsFile()
{
std::cout << "Reading user defined position file....";
REPORT(0) << "Reading user defined position file....";
position_.clear();
// ToDo: read position data from file.
std::ifstream inFile(fileName_);
inFile >> numPoints_;
// Read position data from file.
iFstream is(fileName_);
realx3 tempPoint;
for(int i = 0; i < numPoints_; i++)
{
inFile >> tempPoint.x_ >> tempPoint.y_ >> tempPoint.z_;
token tok;
while (!is.eof() || !is.bad())
{
// 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);
}
std::cout << "Done!" << std::endl;
REPORT(0) << "Done!" << END_REPORT;
return true;
}
@ -63,15 +97,15 @@ pFlow::positionFile::positionFile
(
poDict_.getVal<word>("name")
),
numPoints_
commaSeparated_
(
poDict_.getVal<uint64>("numPoints")
poDict_.getValOrSet("commaSeparated", Logical("Yes"))
),
position_
(
"position",
max(maxNumberOfParticles(), numPoints_),
numPoints_ ,
max(maxNumberOfParticles(), position_.size()),
0,
RESERVE()
)
{

View File

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

View File

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

View File

@ -32,45 +32,10 @@ pFlow::realx3Vector pFlow::positionParticles::sortByMortonCode(
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;
return position;
}
pFlow::positionParticles::positionParticles
(
systemControl& control,
@ -78,12 +43,8 @@ pFlow::positionParticles::positionParticles
)
:
regionType_(dict.getValOrSet<word>("regionType", "domain")),
maxNumberOfParticles_(dict.getValOrSet(
"maxNumberOfParticles",
static_cast<uint32>(10000))),
mortonSorting_(dict.getValOrSet("mortonSorting", Logical("Yes")))
{
if( regionType_ != "domain" )
{
pRegion_ = peakableRegion::create(
@ -92,7 +53,7 @@ pFlow::positionParticles::positionParticles
}
else
{
fileDictionary domainDict
fileDictionary domainDictionary
(
objectFile
{
@ -103,12 +64,10 @@ pFlow::positionParticles::positionParticles
},
&control.settings()
);
pRegion_ = peakableRegion::create(regionType_,domainDict.subDict("globalBox"));
pRegion_ = peakableRegion::create("box", domainDictionary.subDict("globalBox"));
}
}
pFlow::realx3Vector pFlow::positionParticles::getFinalPosition()
{
if(mortonSorting_)
@ -130,10 +89,8 @@ pFlow::uniquePtr<pFlow::positionParticles>
const dictionary & dict
)
{
word method = dict.getVal<word>("method");
if( dictionaryvCtorSelector_.search(method) )
{
return dictionaryvCtorSelector_[method] (control, dict);

View File

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

View File

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