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")<< REPORT(2)<<"Global damping "<<Yellow_Text("is active")<<
" and damping factor is "<<dampingFactor_<<END_REPORT; " and damping factor is "<<dampingFactor_<<END_REPORT;
}
else else
{
REPORT(2)<<"Global damping "<<Yellow_Text("is not active")<<"."<<END_REPORT; 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

@ -46,7 +46,7 @@ model
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

View File

@ -45,7 +45,6 @@ in <b>settings/particlesDict</b> file
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
@ -100,6 +99,7 @@ setFields
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
{ {
/* /*

View File

View File

@ -55,15 +55,20 @@ surfaces
belt belt
{ {
type stlWall; // type of the wall type stlWall; // type of the wall
file belt.stl; // file name in stl folder file belt.stl; // file name in stl folder
material wallMat; // material name of this wall material wallMat; // material name of this wall
motion conveyorBelt1; // motion component name 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 file box.stl; // file name in stl folder
material wallMat; // material name of this wall 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,13 +6,19 @@ 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;
} }
} }
@ -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
*/
exitGate
{ {
type stlWall; // type of the wall type planeWall; // other options: cuboidWall and cylinderWall
file belt.stl; // file name in stl folder
material wallMat; // material name of this wall
motion conveyorBelt1; // motion component name
}
box p1 (-0.04 -0.04 -0.1); // first point of the wall
{
type stlWall; // type of the wall p2 ( 0.04 -0.04 -0.1); // second point of the wall
file box.stl; // file name in stl folder
material wallMat; // material name of this 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

@ -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);
@ -66,6 +62,3 @@ model
0.1 0.1 0.1 0.1
0.1); 0.1);
} }

View File

@ -6,34 +6,26 @@ 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 regionType cylinder; // type of insertion region
rate 15000; // insertion rate (particles/s) rate 15000; // insertion rate (particles/s)
startTime 0; // (s) startTime 0; // (s)
endTime 0.5; // (s) endTime 0.5; // (s)
insertionInterval 0.025; // s insertionInterval 0.025; // s
cylinderInfo cylinderInfo
{ {
radius 0.09; // radius of cylinder (m) radius 0.09; // radius of cylinder (m)
p1 (0.0 0.0 0.1); // (m,m,m) p1 (0.0 0.0 0.1); // (m,m,m)
p2 (0.0 0.0 0.11); // (m,m,m) p2 (0.0 0.0 0.11); // (m,m,m)
} }
@ -48,7 +40,138 @@ layer0
} }
} }
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

@ -2,64 +2,49 @@
| phasicFlow File | | phasicFlow File |
| copyright: www.cemf.ir | | copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */ \* ------------------------------------------------------------------------- */
objectName domainDict; objectName domainDict;
objectType dictionary; objectType dictionary;
fileFormat ASCII; 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); min (-0.11 -0.11 -0.11);
max ( 0.11 0.11 0.41); max ( 0.11 0.11 0.41);
} }
boundaries 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 left
{ {
type exit; // other options: periodict, reflective type exit; // other options: periodic, reflective
} }
right right
{ {
type exit; // other options: periodict, reflective type exit; // other options: periodic, reflective
} }
bottom bottom
{ {
type exit; // other options: periodict, reflective type exit; // other options: periodic, reflective
} }
top top
{ {
type exit; // other options: periodict, reflective type exit; // other options: periodic, reflective
} }
rear rear
{ {
type exit; // other options: periodict, reflective type exit; // other options: periodic, reflective
} }
front front
{ {
type exit; // other options: periodict, reflective type exit; // other options: periodic, reflective
} }
} }

View File

@ -2,15 +2,18 @@
| phasicFlow File | | phasicFlow File |
| copyright: www.cemf.ir | | copyright: www.cemf.ir |
\* ------------------------------------------------------------------------- */ \* ------------------------------------------------------------------------- */
objectName geometryDict; objectName geometryDict;
objectType dictionary; 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
@ -18,59 +21,35 @@ 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 p1 (0.0 0.0 0.0); // begin point of cylinder axis
p2 (0.0 0.0 0.4); // end point of cylinder axis p2 (0.0 0.0 0.4); // end point of cylinder axis
radius1 0.1; // radius at p1 radius1 0.1; // radius at p1
radius2 0.1; // radius at p2 radius2 0.1; // radius at p2
resolution 36; // number of divisions resolution 36; // number of divisions
material wallMat; // material name of this wall material wallMat; // material name of this wall
} }
coneShell coneShell
{ {
type cylinderWall; // other options: cuboidWall and planeWall type cylinderWall; // other options: cuboidWall and planeWall
p1 (0.0 0.0 -0.1); // begin point of cylinder axis p1 (0.0 0.0 -0.1); // begin point of cylinder axis
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.02; // radius at p1
radius2 0.1; // radius at p2 radius2 0.1; // radius at p2
resolution 36; // number of divisions resolution 36; // number of divisions
material wallMat; // material name of this wall material wallMat; // material name of this wall
} }
/* /*
This is a plane wall at the exit of silo This is a plane wall at the exit of the silo that plugs the exit.
*/ */
exitGate exitGate
{ {
type planeWall; // other options: cuboidWall and cylinderWall type planeWall; // other options: cuboidWall and cylinderWall
p1 (-0.02 -0.02 -0.1); // first point of the wall p1 (-0.02 -0.02 -0.1); // first point of the wall
p2 ( 0.02 -0.02 -0.1); // second 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 p3 ( 0.02 0.02 -0.1); // third point of the wall
p4 (-0.02 0.02 -0.1); // fourth point of the wall p4 (-0.02 0.02 -0.1); // fourth point of the wall
material wallMat; // material name 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

@ -6,7 +6,7 @@ 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)
@ -18,25 +18,19 @@ saveInterval 0.05; // time interval for saving the simula
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) writeFormat ascii; // data writing format (ascii or binary)
timersReport Yes; // report timers timersReport Yes; // report timers
timersReportInterval 0.01; // time interval for reporting 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,7 +146,7 @@ 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()
) )