Merge branch 'main' of https://github.com/omid-khosravi/DEMphasicFlow
This commit is contained in:
commit
aca88fc13c
|
@ -27,6 +27,8 @@ bool pFlow::sphereDEMSystem::loop()
|
||||||
{
|
{
|
||||||
Control().timers().start();
|
Control().timers().start();
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
if(! insertion_().insertParticles(
|
if(! insertion_().insertParticles(
|
||||||
Control().time().currentTime(),
|
Control().time().currentTime(),
|
||||||
Control().time().dt() ) )
|
Control().time().dt() ) )
|
||||||
|
@ -35,6 +37,7 @@ bool pFlow::sphereDEMSystem::loop()
|
||||||
"particle insertion failed in sphereDFlow solver.\n";
|
"particle insertion failed in sphereDFlow solver.\n";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
geometry_->beforeIteration();
|
geometry_->beforeIteration();
|
||||||
|
|
||||||
|
@ -58,6 +61,7 @@ bool pFlow::sphereDEMSystem::loop()
|
||||||
|
|
||||||
}while(Control()++);
|
}while(Control()++);
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
pFlow::sphereDEMSystem::sphereDEMSystem(
|
pFlow::sphereDEMSystem::sphereDEMSystem(
|
||||||
|
@ -213,7 +217,7 @@ bool pFlow::sphereDEMSystem::iterate(
|
||||||
Control().time().setStopAt(upToTime);
|
Control().time().setStopAt(upToTime);
|
||||||
Control().time().setOutputToFile(timeToWrite, timeName);
|
Control().time().setOutputToFile(timeToWrite, timeName);
|
||||||
|
|
||||||
loop();
|
return loop();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -221,7 +225,7 @@ bool pFlow::sphereDEMSystem::iterate(
|
||||||
bool pFlow::sphereDEMSystem::iterate(real upToTime)
|
bool pFlow::sphereDEMSystem::iterate(real upToTime)
|
||||||
{
|
{
|
||||||
Control().time().setStopAt(upToTime);
|
Control().time().setStopAt(upToTime);
|
||||||
loop();
|
return loop();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,7 @@ Timer/Timers.cpp
|
||||||
repository/Time/Time.cpp
|
repository/Time/Time.cpp
|
||||||
repository/Time/timeControl.cpp
|
repository/Time/timeControl.cpp
|
||||||
repository/systemControl/systemControl.cpp
|
repository/systemControl/systemControl.cpp
|
||||||
|
repository/systemControl/dynamicLinkLibs.cpp
|
||||||
repository/repository/repository.cpp
|
repository/repository/repository.cpp
|
||||||
repository/IOobject/objectFile.cpp
|
repository/IOobject/objectFile.cpp
|
||||||
repository/IOobject/IOobject.cpp
|
repository/IOobject/IOobject.cpp
|
||||||
|
|
|
@ -139,10 +139,6 @@ public:
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -147,3 +147,20 @@ void pFlow::timeControl::setSaveTimeFolder(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool pFlow::timeControl::operator ++(int)
|
||||||
|
{
|
||||||
|
|
||||||
|
if( reachedStopAt() ) return false;
|
||||||
|
// increament iteration number
|
||||||
|
currentIter_++;
|
||||||
|
|
||||||
|
currentTime_ += dt_;
|
||||||
|
if(screenReport())
|
||||||
|
{
|
||||||
|
REPORT(0)<<"Time (s): "<<cyanText( currentTimeWord() )<<endREPORT;
|
||||||
|
}
|
||||||
|
// switch outputToFile_ on/off
|
||||||
|
checkForOutputToFile();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
|
@ -182,23 +182,7 @@ public:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator ++(int)
|
bool operator ++(int);
|
||||||
{
|
|
||||||
|
|
||||||
if( reachedStopAt() ) return false;
|
|
||||||
// increament iteration number
|
|
||||||
currentIter_++;
|
|
||||||
|
|
||||||
currentTime_ += dt_;
|
|
||||||
if(screenReport())
|
|
||||||
{
|
|
||||||
REPORT(0)<<"Time (s): "<<cyanText( currentTimeWord() )<<endREPORT;
|
|
||||||
}
|
|
||||||
// switch outputToFile_ on/off
|
|
||||||
checkForOutputToFile();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setSaveTimeFolder(
|
void setSaveTimeFolder(
|
||||||
bool saveToFile,
|
bool saveToFile,
|
||||||
|
|
|
@ -0,0 +1,82 @@
|
||||||
|
/*------------------------------- phasicFlow ---------------------------------
|
||||||
|
O C enter of
|
||||||
|
O O E ngineering and
|
||||||
|
O O M ultiscale modeling of
|
||||||
|
OOOOOOO F luid flow
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
Copyright (C): www.cemf.ir
|
||||||
|
email: hamid.r.norouzi AT gmail.com
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
Licence:
|
||||||
|
This file is part of phasicFlow code. It is a free software for simulating
|
||||||
|
granular and multiphase flows. You can redistribute it and/or modify it under
|
||||||
|
the terms of GNU General Public License v3 or any other later versions.
|
||||||
|
|
||||||
|
phasicFlow is distributed to help others in their research in the field of
|
||||||
|
granular and multiphase flows, but WITHOUT ANY WARRANTY; without even the
|
||||||
|
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include <dlfcn.h>
|
||||||
|
|
||||||
|
#include "dynamicLinkLibs.hpp"
|
||||||
|
#include "List.hpp"
|
||||||
|
#include "streams.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
pFlow::dynamicLinkLibs::dynamicLinkLibs(
|
||||||
|
const dictionary &dict,
|
||||||
|
word libList)
|
||||||
|
{
|
||||||
|
|
||||||
|
wordList libNames;
|
||||||
|
if(dict.containsDataEntry(libList))
|
||||||
|
{
|
||||||
|
libNames = dict.getVal<wordList>(libList);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
REPORT(1)<< "libs are "<< greenText(libNames)<<endREPORT;
|
||||||
|
|
||||||
|
for(auto libName:libNames)
|
||||||
|
{
|
||||||
|
auto* hndl = open(libName);
|
||||||
|
|
||||||
|
if(hndl)
|
||||||
|
{
|
||||||
|
libs_.insertIf(libName, hndl);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fatalExit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pFlow::dynamicLinkLibs::~dynamicLinkLibs()
|
||||||
|
{
|
||||||
|
for(auto &lib:libs_)
|
||||||
|
{
|
||||||
|
if( lib.second && dlclose(lib.second) != 0)
|
||||||
|
{
|
||||||
|
warningInFunction<< "could not close lib "<<lib.first<<endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void* pFlow::dynamicLinkLibs::open(word libName)
|
||||||
|
{
|
||||||
|
REPORT(2)<<"Loading "<< greenText(libName)<<endREPORT;
|
||||||
|
|
||||||
|
void* handle = dlopen(libName.c_str(), RTLD_LAZY|RTLD_GLOBAL);
|
||||||
|
|
||||||
|
if(!handle)
|
||||||
|
{
|
||||||
|
warningInFunction<< "could not open lib "<< libName<<endl;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return handle;
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
/*------------------------------- phasicFlow ---------------------------------
|
||||||
|
O C enter of
|
||||||
|
O O E ngineering and
|
||||||
|
O O M ultiscale modeling of
|
||||||
|
OOOOOOO F luid flow
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
Copyright (C): www.cemf.ir
|
||||||
|
email: hamid.r.norouzi AT gmail.com
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
Licence:
|
||||||
|
This file is part of phasicFlow code. It is a free software for simulating
|
||||||
|
granular and multiphase flows. You can redistribute it and/or modify it under
|
||||||
|
the terms of GNU General Public License v3 or any other later versions.
|
||||||
|
|
||||||
|
phasicFlow is distributed to help others in their research in the field of
|
||||||
|
granular and multiphase flows, but WITHOUT ANY WARRANTY; without even the
|
||||||
|
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef __dynamicLinkLibs_hpp__
|
||||||
|
#define __dynamicLinkLibs_hpp__
|
||||||
|
|
||||||
|
|
||||||
|
#include "hashMap.hpp"
|
||||||
|
#include "dictionary.hpp"
|
||||||
|
|
||||||
|
namespace pFlow
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
class dynamicLinkLibs
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
|
||||||
|
wordHashMap<void*> libs_;
|
||||||
|
|
||||||
|
void* open(word libName);
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
dynamicLinkLibs(const dictionary &dict, word libList = "libs");
|
||||||
|
|
||||||
|
~dynamicLinkLibs();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
} // pFlow
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __dynamicLinkLibs_hpp__
|
|
@ -135,6 +135,7 @@ pFlow::systemControl::systemControl
|
||||||
true
|
true
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
libs_(settingsDict_),
|
||||||
outFilePrecision_(
|
outFilePrecision_(
|
||||||
settingsDict_.getValOrSet("outFilePrecision", static_cast<size_t>(6))
|
settingsDict_.getValOrSet("outFilePrecision", static_cast<size_t>(6))
|
||||||
),
|
),
|
||||||
|
@ -205,6 +206,7 @@ pFlow::systemControl::systemControl(
|
||||||
true
|
true
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
libs_(settingsDict_),
|
||||||
Time_
|
Time_
|
||||||
(
|
(
|
||||||
this,
|
this,
|
||||||
|
@ -234,6 +236,7 @@ bool pFlow::systemControl::operator ++(int)
|
||||||
{
|
{
|
||||||
|
|
||||||
// skip writing to file for the first iteration
|
// skip writing to file for the first iteration
|
||||||
|
//output<< "time()++"<<endl;
|
||||||
auto finished = time()++;
|
auto finished = time()++;
|
||||||
|
|
||||||
writeToFileTimer_.start();
|
writeToFileTimer_.start();
|
||||||
|
@ -256,12 +259,14 @@ bool pFlow::systemControl::operator ++(int)
|
||||||
}
|
}
|
||||||
writeToFileTimer_.end();
|
writeToFileTimer_.end();
|
||||||
|
|
||||||
|
//output<< "after finalTime()"<<endl;
|
||||||
|
|
||||||
if( time().timersReportTime() &&
|
if( time().timersReportTime() &&
|
||||||
timersReport() )
|
timersReport() )
|
||||||
{
|
{
|
||||||
timers_.write(output, true);
|
timers_.write(output, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
return finished;
|
return finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ Licence:
|
||||||
#include "dictionary.hpp"
|
#include "dictionary.hpp"
|
||||||
#include "box.hpp"
|
#include "box.hpp"
|
||||||
#include "Timers.hpp"
|
#include "Timers.hpp"
|
||||||
|
#include "dynamicLinkLibs.hpp"
|
||||||
|
|
||||||
namespace pFlow
|
namespace pFlow
|
||||||
{
|
{
|
||||||
|
@ -49,6 +50,8 @@ protected:
|
||||||
// - path to top-level folder
|
// - path to top-level folder
|
||||||
const fileSystem topLevelFolder_;
|
const fileSystem topLevelFolder_;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// - settings folder repository
|
// - settings folder repository
|
||||||
repository settings_;
|
repository settings_;
|
||||||
|
|
||||||
|
@ -58,6 +61,9 @@ protected:
|
||||||
// - settingsDict fileDictionary
|
// - settingsDict fileDictionary
|
||||||
dictionary& settingsDict_;
|
dictionary& settingsDict_;
|
||||||
|
|
||||||
|
// - extra libs to be loaded
|
||||||
|
dynamicLinkLibs libs_;
|
||||||
|
|
||||||
// - precision for writing to file
|
// - precision for writing to file
|
||||||
size_t outFilePrecision_ = 6;
|
size_t outFilePrecision_ = 6;
|
||||||
|
|
||||||
|
|
|
@ -1,20 +1,43 @@
|
||||||
# Problem Definition
|
# Problem Definition
|
||||||
The problem is to simulate a Rotating Drum with **6** Baffles with the diameter **0.24m** and the length **0.1m** rotating at **15 rad/s**. This Rotating Drum is filled with **20000** Particles.The timestep for integration is **0.00001 s**. There are 2 types of Particles in this Rotating Drum:
|
The problem is to simulate a rotating drum with the diameter **0.24 m**, the length **0.1 m** and **6** Baffles, rotating at **15 rpm**. This drum is filled with **20000** Particles.The timestep for integration is **0.00001 s**. There are 2 types of Particles in this drum each are beining inserted during simulation to fill the drum.
|
||||||
* **12500** Particles with **4 mm** diameter
|
* **12500** Particles with **4 mm** diameter, at the rate of 12500 particles/s for 1 sec.
|
||||||
* **7500** Particles with **5mm** diameter
|
* **7500** Particles with **5mm** diameter, at the rate of 7500 particles/s for 1 sec.
|
||||||
|
|
||||||
<html>
|
<html>
|
||||||
<body>
|
<body>
|
||||||
<img src="https://github.com/PhasicFlow/phasicFlow/blob/media/media/MixedparticlesRDB.png", width: 400px>
|
<div align="center"><b>
|
||||||
|
a view of the drum while rotating
|
||||||
|
</div></b>
|
||||||
|
<div align="center">
|
||||||
|
<img src="https://github.com/PhasicFlow/phasicFlow/blob/media/media/MixedparticlesRDB.png", width=800px>
|
||||||
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
## Setting up the Case
|
# Setting up the Case
|
||||||
As it has been explained in the previous Cases, these Tutorials are based on text-based scripts. There are three parts in this case to study `caseSetup`, `setting` and `stl`.
|
As it has been explained in the previous cases, the simulation case setup is based on text-based scripts. Here, the simulation case setup are sotred in three folders: `caseSetup`, `setting` and `stl` (see the above folders).
|
||||||
|
|
||||||
|
## Defining small and large particles
|
||||||
|
Then in the `caseSetup/sphereShape` the diameter and the material name of the particles are defined. Two sizes are defined: 4 and 5 mm.
|
||||||
|
```C++
|
||||||
|
// names of shapes
|
||||||
|
names (smallSphere largeSphere);
|
||||||
|
// diameter of shapes (m)
|
||||||
|
diameters (0.004 0.005);
|
||||||
|
// material names for shapes
|
||||||
|
materials (lightMat heavyMat);
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## Particle Insertion
|
## Particle Insertion
|
||||||
In this case we have two region for inserting our particles. In the both region we define rate of Insertion, start and end time of Insertion, coordinates of Insertion and radius of Insertion.
|
In this case we have two region for inserting our particles. In the both region we define rate of insertion, start and end time of insertion, information for the volume of the space throught which particles are being inserted. The insertion phase in the simulation is performed between times 0 and 1 seconds.
|
||||||
An example for the Right Layer Region of insertion of Particles is shown below.
|
For example, for the insertion region for inserting light particles is shown below.
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
in <b>caseSetup/particleInsertion</b> file
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
```C++
|
```C++
|
||||||
// Right Layer Region
|
// Right Layer Region
|
||||||
layerrightregion
|
layerrightregion
|
||||||
|
@ -40,18 +63,15 @@ layerrightregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Then in the `sphereShape` the diameter and the material of our Particles are defined.
|
## Interaction between particles and walls
|
||||||
```C++
|
In `caseSetup/interaction` file, material names and properties and interaction parameters are defined: interaction between the particles and the shell of rotating drum. Since we are defining 3 materials for simulation, the interaction matrix is 3x3, while we are only required to enter upper-triangle elements (interactions are symetric).
|
||||||
// names of shapes
|
|
||||||
names (lightSphere heavySphere);
|
|
||||||
// diameter of shapes (m)
|
|
||||||
diameters (0.004 0.005);
|
|
||||||
// material names for shapes
|
|
||||||
materials (lightMat heavyMat);
|
|
||||||
```
|
|
||||||
In this Case we have two types of Particle with 4mm and 5mm diameters.
|
|
||||||
At the end of `caseSetup`, the interaction between the particles and the Shell of Rotating Drum is defined. You can see the Coefficients of the Interactions between the particles and shell of Rotating Drum in `interaction`. Because we have 3 kind of interactions between these Particles and the Drum, we need to define a 3*3 Matrix.
|
|
||||||
```C++
|
```C++
|
||||||
|
// a list of materials names
|
||||||
|
materials (lightMat heavyMat wallMat);
|
||||||
|
// density of materials [kg/m3]
|
||||||
|
densities (1000 1500 2500);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Property (lightMat-lightMat lightMat-heavyMat lightMat-wallMat
|
Property (lightMat-lightMat lightMat-heavyMat lightMat-wallMat
|
||||||
heavyMat-heavyMat heavyMat-wallMat
|
heavyMat-heavyMat heavyMat-wallMat
|
||||||
|
@ -88,30 +108,63 @@ At the end of `caseSetup`, the interaction between the particles and the Shell o
|
||||||
```
|
```
|
||||||
## Settings
|
## Settings
|
||||||
### Geometry
|
### Geometry
|
||||||
In the Settings folder the Specifications of our Rotating Drum and the information of rotating axis are brought. In this case we use two solid cylinders to keep our rotating drum isolated. This is to prevent particles, from being thrown out.
|
In the `settings/geometryDict` file, the geometry and axis of rotation is defined for the drum. The geometry is composed of a body, front and rear ends.
|
||||||
For example the codes for the rear cylinder is brought below.
|
|
||||||
```C++
|
```C++
|
||||||
/*This is a Cylinder Wall at the rear of cylinder */
|
surfaces
|
||||||
CylinderRear1
|
|
||||||
{
|
{
|
||||||
// type of the wall
|
body
|
||||||
type cylinderWall;
|
{
|
||||||
// first point for the axis of rotation
|
// type of the wall
|
||||||
p1 (-0.1974 0.2269 -0.001);
|
type stlWall;
|
||||||
// second point for the axis of rotation
|
// file name in stl folder
|
||||||
p2 (-0.1974 0.2269 0.0);
|
file Body.stl;
|
||||||
// Radius of p1
|
// material name of this wall
|
||||||
radius1 0.0001;
|
material wallMat;
|
||||||
// Radius of p2
|
// motion component name
|
||||||
radius2 0.12;
|
motion rotAxis;
|
||||||
// material name of the wall
|
}
|
||||||
material wallMat;
|
/* This is a Cylinder Wall at the rear of cylinder */
|
||||||
// motion component name
|
rearEnd
|
||||||
motion rotAxis;
|
{
|
||||||
|
// type of the wall
|
||||||
|
type cylinderWall;
|
||||||
|
// first point for the axis of rotation
|
||||||
|
p1 (-0.1974 0.2269 -0.001);
|
||||||
|
// second point for the axis of rotation
|
||||||
|
p2 (-0.1974 0.2269 0.0);
|
||||||
|
// Radius of p1
|
||||||
|
radius1 0.0001;
|
||||||
|
// Radius of p2
|
||||||
|
radius2 0.12;
|
||||||
|
// material name of the wall
|
||||||
|
material wallMat;
|
||||||
|
// motion component name
|
||||||
|
motion rotAxis;
|
||||||
|
}
|
||||||
|
/* This a cylinder Wall at the front of Cylinder */
|
||||||
|
frontEnd
|
||||||
|
{
|
||||||
|
// type of the wall
|
||||||
|
type cylinderWall;
|
||||||
|
// first point for the axis of rotation
|
||||||
|
p1 (-0.1974 0.2269 0.0989);
|
||||||
|
// second point for the axis of rotation
|
||||||
|
p2 (-0.1974 0.2269 0.0990);
|
||||||
|
// Radius of p1
|
||||||
|
radius1 0.0001;
|
||||||
|
// Radius of p2
|
||||||
|
radius2 0.12;
|
||||||
|
// material name of the wall
|
||||||
|
material wallMat;
|
||||||
|
// motion component name
|
||||||
|
motion rotAxis;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
### Rotating Axis Info
|
### Rotating Axis Info
|
||||||
In this part of `geometryDict` the information of `rotating axis` and `velocity` of this Rotating Drum is defined. Also in purpose to settle down Particles after they were inserted we use a `startTime` and `endTime` function. This shows the start time of rotation.
|
In this part of `geometryDict` the information of rotating axis and speed of rotation are defined. The start of rotation is at 2 s. The first 2 seconds of simulation is for allowing particles to settle donw in the drum.
|
||||||
|
|
||||||
```C++
|
```C++
|
||||||
rotatingAxisMotionInfo
|
rotatingAxisMotionInfo
|
||||||
{
|
{
|
||||||
|
@ -130,9 +183,10 @@ rotatingAxisMotionInfo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
## Starting Simulation
|
## Performing Simulation
|
||||||
To start Simulation we have to create our Particles at first.
|
To perform simulations, enter the following commands one after another in the terminal.
|
||||||
Enter `>particlesPhasicFlow` command to create the initial fields for particles.
|
|
||||||
Enter `>geometryPhasicFlow` command to create the Geometry.
|
Enter `$ particlesPhasicFlow` command to create the initial fields for particles.
|
||||||
At last, enter `>sphereGranFlow` command to start the simulation.
|
Enter `$ geometryPhasicFlow` command to create the Geometry.
|
||||||
After finishing the simulation, you can use `>pFlowtoVTK` to convert the results into vtk format storred in ./VTK folder.
|
At last, enter `$ sphereGranFlow` command to start the simulation.
|
||||||
|
After finishing the simulation, you can use `$ pFlowtoVTK` to convert the results into vtk format storred in ./VTK folder.
|
||||||
|
|
|
@ -47,7 +47,7 @@ Two layers of particles are packed one-by-one using 1 insertion steps.
|
||||||
mixture
|
mixture
|
||||||
{
|
{
|
||||||
// mixture composition of inserted particles
|
// mixture composition of inserted particles
|
||||||
lightSphere 1;
|
smallSphere 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Left Layer Region
|
// Left Layer Region
|
||||||
|
@ -79,7 +79,7 @@ Two layers of particles are packed one-by-one using 1 insertion steps.
|
||||||
|
|
||||||
mixture
|
mixture
|
||||||
{
|
{
|
||||||
heavySphere 1; // only heavySphere
|
largeSphere 1; // only heavySphere
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@ objectName sphereDict;
|
||||||
objectType sphereShape;
|
objectType sphereShape;
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
// names of shapes
|
// names of shapes
|
||||||
names (lightSphere heavySphere);
|
names (smallSphere largeSphere);
|
||||||
// diameter of shapes (m)
|
// diameter of shapes (m)
|
||||||
diameters (0.004 0.005);
|
diameters (0.004 0.005);
|
||||||
// material names for shapes
|
// material names for shapes
|
||||||
|
|
|
@ -23,7 +23,7 @@ surfaces
|
||||||
motion rotAxis;
|
motion rotAxis;
|
||||||
}
|
}
|
||||||
/* This is a Cylinder Wall at the rear of cylinder */
|
/* This is a Cylinder Wall at the rear of cylinder */
|
||||||
CylinderRear1
|
rearEnd
|
||||||
{
|
{
|
||||||
// type of the wall
|
// type of the wall
|
||||||
type cylinderWall;
|
type cylinderWall;
|
||||||
|
@ -41,7 +41,7 @@ surfaces
|
||||||
motion rotAxis;
|
motion rotAxis;
|
||||||
}
|
}
|
||||||
/* This a cylinder Wall at the front of Cylinder */
|
/* This a cylinder Wall at the front of Cylinder */
|
||||||
CylinderFront2
|
frontEnd
|
||||||
{
|
{
|
||||||
// type of the wall
|
// type of the wall
|
||||||
type cylinderWall;
|
type cylinderWall;
|
||||||
|
|
|
@ -16,7 +16,7 @@ setFields
|
||||||
// rotational velocity (rad/s)
|
// rotational velocity (rad/s)
|
||||||
rotVelocity realx3 (0 0 0);
|
rotVelocity realx3 (0 0 0);
|
||||||
// name of the particle shape
|
// name of the particle shape
|
||||||
shapeName word lightSphere;
|
shapeName word smallSphere;
|
||||||
}
|
}
|
||||||
|
|
||||||
selectors
|
selectors
|
||||||
|
|
|
@ -1,8 +1,13 @@
|
||||||
|
|
||||||
set(SourceFiles
|
set(SourceFiles
|
||||||
vtkFile.cpp
|
|
||||||
readFromTimeFolder.cpp
|
readFromTimeFolder.cpp
|
||||||
readControlDict.cpp
|
readControlDict.cpp
|
||||||
|
vtkFile/vtkFile.cpp
|
||||||
|
geometryPhasicFlow/Wall/Wall.cpp
|
||||||
|
geometryPhasicFlow/planeWall/planeWall.cpp
|
||||||
|
geometryPhasicFlow/stlWall/stlWall.cpp
|
||||||
|
geometryPhasicFlow/cylinderWall/cylinderWall.cpp
|
||||||
|
geometryPhasicFlow/cuboidWall/cuboidWall.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
set(link_libs Kokkos::kokkos phasicFlow Particles Geometry)
|
set(link_libs Kokkos::kokkos phasicFlow Particles Geometry)
|
||||||
|
|
|
@ -22,9 +22,9 @@ Licence:
|
||||||
#ifndef __Wall_hpp__
|
#ifndef __Wall_hpp__
|
||||||
#define __Wall_hpp__
|
#define __Wall_hpp__
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#include "virtualConstructor.hpp"
|
#include "virtualConstructor.hpp"
|
||||||
#include "Vectors.hpp"
|
|
||||||
#include "dictionary.hpp"
|
#include "dictionary.hpp"
|
||||||
|
|
||||||
namespace pFlow
|
namespace pFlow
|
||||||
|
@ -42,7 +42,7 @@ class Wall
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
realx3x3Vector triangles_;
|
std::vector<realx3x3> triangles_;
|
||||||
|
|
||||||
word name_;
|
word name_;
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ public:
|
||||||
//// - Methods
|
//// - Methods
|
||||||
|
|
||||||
// -
|
// -
|
||||||
const realx3x3Vector& triangles()const
|
const auto& triangles()const
|
||||||
{
|
{
|
||||||
return triangles_;
|
return triangles_;
|
||||||
}
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
#include "cylinderWall.hpp"
|
#include "cylinderWall.hpp"
|
||||||
|
#include "Vectors.hpp"
|
||||||
#include "line.hpp"
|
#include "line.hpp"
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,6 @@
|
||||||
|
|
||||||
set(source_files
|
set(source_files
|
||||||
geometryPhasicFlow.cpp
|
geometryPhasicFlow.cpp
|
||||||
Wall/Wall.cpp
|
|
||||||
planeWall/planeWall.cpp
|
|
||||||
stlWall/stlWall.cpp
|
|
||||||
cylinderWall/cylinderWall.cpp
|
|
||||||
cuboidWall/cuboidWall.cpp
|
|
||||||
)
|
)
|
||||||
set(link_lib phasicFlow Geometry Kokkos::kokkos Utilities)
|
set(link_lib phasicFlow Geometry Kokkos::kokkos Utilities)
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@ Licence:
|
||||||
|
|
||||||
#include "systemControl.hpp"
|
#include "systemControl.hpp"
|
||||||
#include "Wall.hpp"
|
#include "Wall.hpp"
|
||||||
|
#include "Vectors.hpp"
|
||||||
#include "multiTriSurface.hpp"
|
#include "multiTriSurface.hpp"
|
||||||
#include "geometryMotion.hpp"
|
#include "geometryMotion.hpp"
|
||||||
#include "commandLine.hpp"
|
#include "commandLine.hpp"
|
||||||
|
@ -34,6 +35,7 @@ using pFlow::objectFile;
|
||||||
using pFlow::wordVector;
|
using pFlow::wordVector;
|
||||||
using pFlow::Wall;
|
using pFlow::Wall;
|
||||||
using pFlow::geometry;
|
using pFlow::geometry;
|
||||||
|
using pFlow::realx3x3Vector;
|
||||||
using pFlow::multiTriSurface;
|
using pFlow::multiTriSurface;
|
||||||
using pFlow::commandLine;
|
using pFlow::commandLine;
|
||||||
|
|
||||||
|
@ -92,7 +94,9 @@ int main( int argc, char* argv[] )
|
||||||
auto& wall = wallPtr();
|
auto& wall = wallPtr();
|
||||||
REPORT(1)<<"wall type is "<<greenText(wall.typeName())<<'\n'<<endREPORT;
|
REPORT(1)<<"wall type is "<<greenText(wall.typeName())<<'\n'<<endREPORT;
|
||||||
|
|
||||||
surface.addTriSurface(wall.name(), wall.triangles());
|
realx3x3Vector trinalges(wall.name());
|
||||||
|
trinalges = wall.triangles();
|
||||||
|
surface.addTriSurface(wall.name(), trinalges);
|
||||||
materials.push_back(wall.materialName());
|
materials.push_back(wall.materialName());
|
||||||
motion.push_back(wall.motionName());
|
motion.push_back(wall.motionName());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue