diff --git a/DEMSystems/sphereDEMSystem/sphereDEMSystem.cpp b/DEMSystems/sphereDEMSystem/sphereDEMSystem.cpp index 22e48eeb..8416e505 100644 --- a/DEMSystems/sphereDEMSystem/sphereDEMSystem.cpp +++ b/DEMSystems/sphereDEMSystem/sphereDEMSystem.cpp @@ -27,6 +27,8 @@ bool pFlow::sphereDEMSystem::loop() { Control().timers().start(); + // + if(! insertion_().insertParticles( Control().time().currentTime(), Control().time().dt() ) ) @@ -35,6 +37,7 @@ bool pFlow::sphereDEMSystem::loop() "particle insertion failed in sphereDFlow solver.\n"; return false; } + geometry_->beforeIteration(); @@ -58,6 +61,7 @@ bool pFlow::sphereDEMSystem::loop() }while(Control()++); + return true; } pFlow::sphereDEMSystem::sphereDEMSystem( @@ -213,7 +217,7 @@ bool pFlow::sphereDEMSystem::iterate( Control().time().setStopAt(upToTime); Control().time().setOutputToFile(timeToWrite, timeName); - loop(); + return loop(); return true; } @@ -221,7 +225,7 @@ bool pFlow::sphereDEMSystem::iterate( bool pFlow::sphereDEMSystem::iterate(real upToTime) { Control().time().setStopAt(upToTime); - loop(); + return loop(); return true; } diff --git a/src/phasicFlow/CMakeLists.txt b/src/phasicFlow/CMakeLists.txt index 27f5944f..34103498 100644 --- a/src/phasicFlow/CMakeLists.txt +++ b/src/phasicFlow/CMakeLists.txt @@ -38,6 +38,7 @@ Timer/Timers.cpp repository/Time/Time.cpp repository/Time/timeControl.cpp repository/systemControl/systemControl.cpp +repository/systemControl/dynamicLinkLibs.cpp repository/repository/repository.cpp repository/IOobject/objectFile.cpp repository/IOobject/IOobject.cpp diff --git a/src/phasicFlow/Timer/Timer.hpp b/src/phasicFlow/Timer/Timer.hpp index 76ada3eb..bb6a6817 100644 --- a/src/phasicFlow/Timer/Timer.hpp +++ b/src/phasicFlow/Timer/Timer.hpp @@ -139,10 +139,6 @@ public: { return true; } - - - - }; diff --git a/src/phasicFlow/repository/Time/timeControl.cpp b/src/phasicFlow/repository/Time/timeControl.cpp index b8e7ce1f..02e94359 100644 --- a/src/phasicFlow/repository/Time/timeControl.cpp +++ b/src/phasicFlow/repository/Time/timeControl.cpp @@ -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): "< + +#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(libList); + } + + + REPORT(1)<< "libs are "<< greenText(libNames)< libs_; + + void* open(word libName); + +public: + + dynamicLinkLibs(const dictionary &dict, word libList = "libs"); + + ~dynamicLinkLibs(); + + + +}; + + +} // pFlow + + +#endif // __dynamicLinkLibs_hpp__ diff --git a/src/phasicFlow/repository/systemControl/systemControl.cpp b/src/phasicFlow/repository/systemControl/systemControl.cpp index fd4425a4..eabde21a 100644 --- a/src/phasicFlow/repository/systemControl/systemControl.cpp +++ b/src/phasicFlow/repository/systemControl/systemControl.cpp @@ -135,6 +135,7 @@ pFlow::systemControl::systemControl true ) ), + libs_(settingsDict_), outFilePrecision_( settingsDict_.getValOrSet("outFilePrecision", static_cast(6)) ), @@ -205,6 +206,7 @@ pFlow::systemControl::systemControl( true ) ), + libs_(settingsDict_), Time_ ( this, @@ -234,6 +236,7 @@ bool pFlow::systemControl::operator ++(int) { // skip writing to file for the first iteration + //output<< "time()++"< - - +
+ a view of the drum while rotating +
+
+ +
-## 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`. +# Setting up the Case +As it has been explained in the previous cases, the simulation case setup is based on text-based scripts. Here, the simulation case setup are sotred in 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 -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. -An example for the Right Layer Region of insertion of Particles is shown below. +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. +For example, for the insertion region for inserting light particles is shown below. + +
+in caseSetup/particleInsertion file +
+ + ```C++ // Right Layer Region layerrightregion @@ -40,18 +63,15 @@ layerrightregion } } ``` -Then in the `sphereShape` the diameter and the material of our Particles are defined. -```C++ -// 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. +## Interaction between particles and walls +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). + ```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 heavyMat-heavyMat heavyMat-wallMat @@ -88,30 +108,63 @@ At the end of `caseSetup`, the interaction between the particles and the Shell o ``` ## Settings ### 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. -For example the codes for the rear cylinder is brought below. +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. + ```C++ -/*This is a Cylinder Wall at the rear of cylinder */ -CylinderRear1 +surfaces { - // 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; + body + { + // type of the wall + type stlWall; + // file name in stl folder + file Body.stl; + // material name of this wall + material wallMat; + // motion component name + motion rotAxis; + } + /* This is a Cylinder Wall at the rear of cylinder */ + rearEnd + { + // 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 -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++ rotatingAxisMotionInfo { @@ -130,9 +183,10 @@ rotatingAxisMotionInfo } } ``` -## Starting Simulation -To start Simulation we have to create our Particles at first. -Enter `>particlesPhasicFlow` command to create the initial fields for particles. -Enter `>geometryPhasicFlow` command to create the Geometry. -At last, enter `>sphereGranFlow` command to start the simulation. -After finishing the simulation, you can use `>pFlowtoVTK` to convert the results into vtk format storred in ./VTK folder. +## Performing Simulation +To perform simulations, enter the following commands one after another in the terminal. + +Enter `$ particlesPhasicFlow` command to create the initial fields for particles. +Enter `$ geometryPhasicFlow` command to create the Geometry. +At last, enter `$ sphereGranFlow` command to start the simulation. +After finishing the simulation, you can use `$ pFlowtoVTK` to convert the results into vtk format storred in ./VTK folder. diff --git a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/particleInsertion b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/particleInsertion index 8a16d732..68712a02 100644 --- a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/particleInsertion +++ b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/particleInsertion @@ -47,7 +47,7 @@ Two layers of particles are packed one-by-one using 1 insertion steps. mixture { // mixture composition of inserted particles - lightSphere 1; + smallSphere 1; } } // Left Layer Region @@ -79,7 +79,7 @@ Two layers of particles are packed one-by-one using 1 insertion steps. mixture { - heavySphere 1; // only heavySphere + largeSphere 1; // only heavySphere } } diff --git a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/sphereShape b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/sphereShape index 1b94f4f0..714e1b9a 100644 --- a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/sphereShape +++ b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/caseSetup/sphereShape @@ -6,7 +6,7 @@ objectName sphereDict; objectType sphereShape; /*---------------------------------------------------------------------------*/ // names of shapes -names (lightSphere heavySphere); +names (smallSphere largeSphere); // diameter of shapes (m) diameters (0.004 0.005); // material names for shapes diff --git a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/geometryDict b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/geometryDict index 5da00ec3..bb372bce 100644 --- a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/geometryDict +++ b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/geometryDict @@ -23,7 +23,7 @@ surfaces motion rotAxis; } /* This is a Cylinder Wall at the rear of cylinder */ - CylinderRear1 + rearEnd { // type of the wall type cylinderWall; @@ -41,7 +41,7 @@ surfaces motion rotAxis; } /* This a cylinder Wall at the front of Cylinder */ - CylinderFront2 + frontEnd { // type of the wall type cylinderWall; diff --git a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/particlesDict b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/particlesDict index a7f58c61..4be2a5c3 100644 --- a/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/particlesDict +++ b/tutorials/sphereGranFlow/RotatingDrumWithBaffles/settings/particlesDict @@ -16,7 +16,7 @@ setFields // rotational velocity (rad/s) rotVelocity realx3 (0 0 0); // name of the particle shape - shapeName word lightSphere; + shapeName word smallSphere; } selectors diff --git a/utilities/Utilities/CMakeLists.txt b/utilities/Utilities/CMakeLists.txt index 44c0d092..8c5d4ff5 100644 --- a/utilities/Utilities/CMakeLists.txt +++ b/utilities/Utilities/CMakeLists.txt @@ -1,8 +1,13 @@ set(SourceFiles -vtkFile.cpp readFromTimeFolder.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) diff --git a/utilities/geometryPhasicFlow/Wall/Wall.cpp b/utilities/Utilities/geometryPhasicFlow/Wall/Wall.cpp similarity index 100% rename from utilities/geometryPhasicFlow/Wall/Wall.cpp rename to utilities/Utilities/geometryPhasicFlow/Wall/Wall.cpp diff --git a/utilities/geometryPhasicFlow/Wall/Wall.hpp b/utilities/Utilities/geometryPhasicFlow/Wall/Wall.hpp similarity index 95% rename from utilities/geometryPhasicFlow/Wall/Wall.hpp rename to utilities/Utilities/geometryPhasicFlow/Wall/Wall.hpp index b8296134..7cf3d0e8 100755 --- a/utilities/geometryPhasicFlow/Wall/Wall.hpp +++ b/utilities/Utilities/geometryPhasicFlow/Wall/Wall.hpp @@ -22,9 +22,9 @@ Licence: #ifndef __Wall_hpp__ #define __Wall_hpp__ +#include #include "virtualConstructor.hpp" -#include "Vectors.hpp" #include "dictionary.hpp" namespace pFlow @@ -42,7 +42,7 @@ class Wall { protected: - realx3x3Vector triangles_; + std::vector triangles_; word name_; @@ -79,7 +79,7 @@ public: //// - Methods // - - const realx3x3Vector& triangles()const + const auto& triangles()const { return triangles_; } diff --git a/utilities/geometryPhasicFlow/cuboidWall/cuboidWall.cpp b/utilities/Utilities/geometryPhasicFlow/cuboidWall/cuboidWall.cpp similarity index 100% rename from utilities/geometryPhasicFlow/cuboidWall/cuboidWall.cpp rename to utilities/Utilities/geometryPhasicFlow/cuboidWall/cuboidWall.cpp diff --git a/utilities/geometryPhasicFlow/cuboidWall/cuboidWall.hpp b/utilities/Utilities/geometryPhasicFlow/cuboidWall/cuboidWall.hpp similarity index 100% rename from utilities/geometryPhasicFlow/cuboidWall/cuboidWall.hpp rename to utilities/Utilities/geometryPhasicFlow/cuboidWall/cuboidWall.hpp diff --git a/utilities/geometryPhasicFlow/cylinderWall/cylinderWall.cpp b/utilities/Utilities/geometryPhasicFlow/cylinderWall/cylinderWall.cpp similarity index 93% rename from utilities/geometryPhasicFlow/cylinderWall/cylinderWall.cpp rename to utilities/Utilities/geometryPhasicFlow/cylinderWall/cylinderWall.cpp index 859c2811..db0b7987 100644 --- a/utilities/geometryPhasicFlow/cylinderWall/cylinderWall.cpp +++ b/utilities/Utilities/geometryPhasicFlow/cylinderWall/cylinderWall.cpp @@ -1,4 +1,5 @@ #include "cylinderWall.hpp" +#include "Vectors.hpp" #include "line.hpp" diff --git a/utilities/geometryPhasicFlow/cylinderWall/cylinderWall.hpp b/utilities/Utilities/geometryPhasicFlow/cylinderWall/cylinderWall.hpp similarity index 100% rename from utilities/geometryPhasicFlow/cylinderWall/cylinderWall.hpp rename to utilities/Utilities/geometryPhasicFlow/cylinderWall/cylinderWall.hpp diff --git a/utilities/geometryPhasicFlow/planeWall/planeWall.cpp b/utilities/Utilities/geometryPhasicFlow/planeWall/planeWall.cpp similarity index 100% rename from utilities/geometryPhasicFlow/planeWall/planeWall.cpp rename to utilities/Utilities/geometryPhasicFlow/planeWall/planeWall.cpp diff --git a/utilities/geometryPhasicFlow/planeWall/planeWall.hpp b/utilities/Utilities/geometryPhasicFlow/planeWall/planeWall.hpp similarity index 100% rename from utilities/geometryPhasicFlow/planeWall/planeWall.hpp rename to utilities/Utilities/geometryPhasicFlow/planeWall/planeWall.hpp diff --git a/utilities/geometryPhasicFlow/stlWall/stlWall.cpp b/utilities/Utilities/geometryPhasicFlow/stlWall/stlWall.cpp similarity index 100% rename from utilities/geometryPhasicFlow/stlWall/stlWall.cpp rename to utilities/Utilities/geometryPhasicFlow/stlWall/stlWall.cpp diff --git a/utilities/geometryPhasicFlow/stlWall/stlWall.hpp b/utilities/Utilities/geometryPhasicFlow/stlWall/stlWall.hpp similarity index 100% rename from utilities/geometryPhasicFlow/stlWall/stlWall.hpp rename to utilities/Utilities/geometryPhasicFlow/stlWall/stlWall.hpp diff --git a/utilities/Utilities/vtkFile.cpp b/utilities/Utilities/vtkFile/vtkFile.cpp similarity index 100% rename from utilities/Utilities/vtkFile.cpp rename to utilities/Utilities/vtkFile/vtkFile.cpp diff --git a/utilities/Utilities/vtkFile.hpp b/utilities/Utilities/vtkFile/vtkFile.hpp similarity index 100% rename from utilities/Utilities/vtkFile.hpp rename to utilities/Utilities/vtkFile/vtkFile.hpp diff --git a/utilities/geometryPhasicFlow/CMakeLists.txt b/utilities/geometryPhasicFlow/CMakeLists.txt index 1c875a2c..6fe0358e 100644 --- a/utilities/geometryPhasicFlow/CMakeLists.txt +++ b/utilities/geometryPhasicFlow/CMakeLists.txt @@ -1,11 +1,6 @@ set(source_files 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) diff --git a/utilities/geometryPhasicFlow/geometryPhasicFlow.cpp b/utilities/geometryPhasicFlow/geometryPhasicFlow.cpp index 72559853..f6967f92 100755 --- a/utilities/geometryPhasicFlow/geometryPhasicFlow.cpp +++ b/utilities/geometryPhasicFlow/geometryPhasicFlow.cpp @@ -21,6 +21,7 @@ Licence: #include "systemControl.hpp" #include "Wall.hpp" +#include "Vectors.hpp" #include "multiTriSurface.hpp" #include "geometryMotion.hpp" #include "commandLine.hpp" @@ -34,6 +35,7 @@ using pFlow::objectFile; using pFlow::wordVector; using pFlow::Wall; using pFlow::geometry; +using pFlow::realx3x3Vector; using pFlow::multiTriSurface; using pFlow::commandLine; @@ -92,7 +94,9 @@ int main( int argc, char* argv[] ) auto& wall = wallPtr(); REPORT(1)<<"wall type is "<