diff --git a/tutorials/sphereGranFlow/binarySystemOfParticles/runThisCase b/tutorials/sphereGranFlow/binarySystemOfParticles/runThisCase old mode 100644 new mode 100755 diff --git a/utilities/particlesPhasicFlow/CMakeLists.txt b/utilities/particlesPhasicFlow/CMakeLists.txt index 1ee6f3f8..6bea0938 100644 --- a/utilities/particlesPhasicFlow/CMakeLists.txt +++ b/utilities/particlesPhasicFlow/CMakeLists.txt @@ -4,6 +4,7 @@ particlesPhasicFlow.cpp positionParticles/positionParticles.cpp positionOrdered/positionOrdered.cpp positionRandom/positionRandom.cpp +positionFile/positionFile.cpp empty/empty.cpp ) #set(link_lib phasicFlow Kokkos::kokkos Interaction Utilities) diff --git a/utilities/particlesPhasicFlow/positionFile/positionFile.cpp b/utilities/particlesPhasicFlow/positionFile/positionFile.cpp new file mode 100755 index 00000000..ebcbf7dd --- /dev/null +++ b/utilities/particlesPhasicFlow/positionFile/positionFile.cpp @@ -0,0 +1,116 @@ +/*------------------------------- 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 "error.hpp" +#include "dictionary.hpp" +#include "positionFile.hpp" + + +#include "streams.hpp" +// #include "token.hpp" +#include "fileSystem.hpp" +#include "iFstream.hpp" +#include "oFstream.hpp" + +bool pFlow::positionFile::positionPointsFile() +{ + REPORT(0) << "Reading user defined position file...."; + + position_.clear(); + + // Read position data from file. + iFstream is(fileName_); + + realx3 tempPoint; + + token tok; + + while (!is.eof() || !is.bad()) + { + // read position x + is >> tempPoint.x_; + + if(commaSeparated_) + { + is >> tok; + if(tok.type() != token::COMMA) + { + fatalErrorInFunction << "Error datafile format, the data not comma separated!"; + return false; + } + } + + // read position y + is >> tempPoint.y_; + + if(commaSeparated_) + { + is >> tok; + if(tok.type() != token::COMMA) + { + fatalErrorInFunction << "Error datafile format, the data not comma separated!"; + return false; + } + } + + // read position z + is >> tempPoint.z_; + + // insert position data to vector + position_.push_back(tempPoint); + } + + REPORT(0) << "Done!" << END_REPORT; + + return true; +} + +pFlow::positionFile::positionFile +( + systemControl& control, + const dictionary& dict +) +: + positionParticles(control, dict), + poDict_ + ( + dict.subDict("fileInfo") + ), + fileName_ + ( + poDict_.getVal("name") + ), + commaSeparated_ + ( + poDict_.getValOrSet("commaSeparated", Logical("Yes")) + ), + position_ + ( + "position", + max(maxNumberOfParticles(), position_.size()), + 0, + RESERVE() + ) +{ + if(!positionPointsFile()) + { + fatalExit; + } +} \ No newline at end of file diff --git a/utilities/particlesPhasicFlow/positionFile/positionFile.hpp b/utilities/particlesPhasicFlow/positionFile/positionFile.hpp new file mode 100755 index 00000000..e2df0841 --- /dev/null +++ b/utilities/particlesPhasicFlow/positionFile/positionFile.hpp @@ -0,0 +1,105 @@ +/*------------------------------- 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 __positionFile_hpp__ +#define __positionFile_hpp__ + +#include "positionParticles.hpp" + +namespace pFlow +{ + + +class positionFile +: + public positionParticles +{ +private: + + dictionary poDict_; + + // word fileName_; + + fileSystem fileName_; + + realx3Vector position_; + + Logical commaSeparated_; + + bool positionPointsFile(); + +public: + + // - type Info + TypeInfo("file"); + + positionFile( + systemControl& control, + const dictionary& dict); + + // - add this class to vCtor selection table + add_vCtor( + positionParticles, + positionFile, + dictionary); + + ~positionFile() final = default; + + //// - Methods + + uint32 numPoints()const final + { + return static_cast(position_.size()); + } + + uint32 size()const final + { + return static_cast(position_.size()); + } + + real maxDiameter() const final + { + return 0; + } + + // bool commaSeparated()const + // { + // return commaSeparated_(); + // } + + // - const access to position + const realx3Vector& position()const final + { + return position_; + } + + // - access to position + realx3Vector& position() final + { + return position_; + } +}; + + +} + + + +#endif // __positionFile_hpp__