mirror of
https://github.com/PhasicFlow/phasicFlow.git
synced 2025-06-22 16:28:30 +00:00
Merge branch 'main' of github.com:PhasicFlow/phasicFlow into main
This commit is contained in:
src
Particles
particles
phasicFlow
CMakeLists.txt
Kokkos
algorithms
containers
Field
Vector
VectorHD
indexContainer
pointField
repository
IOobject
Time
repository
streams
Fstream
Stream
TStream
iStream
structuredData
cells
pointStructure
trisurfaceStructure
tutorials
iterateGeometry
inclinedScrewConveyor
postprocessPhasicFlow
segregation
sphereGranFlow
RotatingDrumWithBaffles
V-blender
binarySystemOfParticles
layeredSiloFilling
rotatingDrumMedium
rotatingDrumSmall
toteblender
utilities
@ -150,6 +150,35 @@ pFlow::particles::particles
|
||||
|
||||
}
|
||||
|
||||
bool pFlow::particles::beforeIteration()
|
||||
{
|
||||
auto domain = this->control().domain();
|
||||
|
||||
auto numMarked = dynPointStruct_.markDeleteOutOfBox(domain);
|
||||
|
||||
if(time_.sortTime())
|
||||
{
|
||||
real min_dx, max_dx;
|
||||
boundingSphereMinMax(min_dx, max_dx);
|
||||
Timer t;
|
||||
t.start();
|
||||
REPORT(0)<<"Performing morton sorting on particles ...."<<endREPORT;
|
||||
if(!pStruct().mortonSortPoints(domain, max_dx))
|
||||
{
|
||||
fatalErrorInFunction<<"Morton sorting was not successful"<<endl;
|
||||
return false;
|
||||
}
|
||||
t.end();
|
||||
REPORT(1)<<"Active range is "<< pStruct().activeRange()<<endREPORT;
|
||||
REPORT(1)<<"It took "<< yellowText(t.totalTime())<<" seconds."<<endREPORT;
|
||||
}
|
||||
|
||||
this->zeroForce();
|
||||
this->zeroTorque();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
pFlow::uniquePtr<pFlow::List<pFlow::eventObserver*>>
|
||||
pFlow::particles::getFieldObjectList()const
|
||||
{
|
||||
|
@ -241,18 +241,7 @@ public:
|
||||
return shapeName_;
|
||||
}
|
||||
|
||||
bool beforeIteration() override
|
||||
{
|
||||
auto domain = this->control().domain();
|
||||
|
||||
auto numMarked = dynPointStruct_.markDeleteOutOfBox(domain);
|
||||
|
||||
|
||||
this->zeroForce();
|
||||
this->zeroTorque();
|
||||
|
||||
return true;
|
||||
}
|
||||
bool beforeIteration() override;
|
||||
|
||||
virtual
|
||||
bool insertParticles
|
||||
|
@ -45,12 +45,14 @@ repository/IOobject/IOobject.cpp
|
||||
repository/IOobject/IOfileHeader.cpp
|
||||
|
||||
structuredData/box/box.cpp
|
||||
structuredData/cells/cells.cpp
|
||||
structuredData/cylinder/cylinder.cpp
|
||||
structuredData/sphere/sphere.cpp
|
||||
structuredData/iBox/iBoxs.cpp
|
||||
structuredData/line/line.cpp
|
||||
structuredData/zAxis/zAxis.cpp
|
||||
structuredData/pointStructure/pointStructure.cpp
|
||||
structuredData/pointStructure/mortonIndexing.cpp
|
||||
structuredData/pointStructure/selectors/pStructSelector/pStructSelector.cpp
|
||||
structuredData/pointStructure/selectors/selectBox/selectBox.cpp
|
||||
structuredData/pointStructure/selectors/selectRange/selectRange.cpp
|
||||
|
@ -26,6 +26,8 @@ Licence:
|
||||
#include <Kokkos_DualView.hpp>
|
||||
#include <Kokkos_UnorderedMap.hpp>
|
||||
|
||||
#include "iOstream.hpp"
|
||||
|
||||
|
||||
namespace pFlow
|
||||
{
|
||||
@ -51,9 +53,12 @@ using DefaultExecutionSpace = Kokkos::DefaultExecutionSpace;
|
||||
template<typename T1, typename T2>
|
||||
using kPair = Kokkos::pair<T1,T2>;
|
||||
|
||||
using range = kPair<int,int>;
|
||||
template<typename T>
|
||||
using kRange = kPair<T,T>;
|
||||
|
||||
using range64 = kPair<int long,int long>;
|
||||
using range = kRange<int>;
|
||||
|
||||
using range64 = kRange<int long>;
|
||||
|
||||
template<typename T, typename... properties>
|
||||
using ViewTypeScalar = Kokkos::View<T,properties...>;
|
||||
@ -132,6 +137,13 @@ using deviceAtomicViewType3D =
|
||||
T***,
|
||||
Kokkos::MemoryTraits<std::is_same<DefaultExecutionSpace,Serial>::value?0:Kokkos::Atomic>>;
|
||||
|
||||
template<typename T>
|
||||
iOstream& operator <<(iOstream& os, const kRange<T>& rng)
|
||||
{
|
||||
os<<"["<<rng.first<<" "<<rng.second<<")";
|
||||
return os;
|
||||
}
|
||||
|
||||
|
||||
} // pFlow
|
||||
|
||||
|
@ -195,8 +195,8 @@ void permuteSort(const Type* first, PermuteType* pFirst, int32 numElems)
|
||||
};
|
||||
|
||||
compOperator compare{first};
|
||||
fillSequence<Type, useParallel>(pFirst, numElems, static_cast<PermuteType>(0));
|
||||
sort<Type, compOperator, useParallel>(pFirst, numElems, compare);
|
||||
fillSequence<PermuteType, useParallel>(pFirst, numElems, static_cast<PermuteType>(0));
|
||||
sort<PermuteType, compOperator, useParallel>(pFirst, numElems, compare);
|
||||
}
|
||||
|
||||
|
||||
|
@ -83,17 +83,24 @@ bool pFlow::Field<VectorField, T, PropType>::readNonUniform
|
||||
}
|
||||
|
||||
this->clear();
|
||||
VectorType::read(is);
|
||||
|
||||
is.readEndStatement("readField");
|
||||
|
||||
if( this->size() != flen )
|
||||
if(is.isBinary() && !std::is_same_v<T,word>)
|
||||
{
|
||||
ioErrorInFile( is.name(), is.lineNumber() ) <<
|
||||
" expected " << flen << " elements, but supplied "<<
|
||||
this->size() << " elements in file "<< is.name() <<endl;
|
||||
return false;
|
||||
this->resize(flen);
|
||||
is.read(reinterpret_cast<char*>(this->data()), this->size()*sizeof(T));
|
||||
is.readEndStatement("readField");
|
||||
}
|
||||
else
|
||||
{
|
||||
VectorType::read(is);
|
||||
is.readEndStatement("readField");
|
||||
if( this->size() != flen )
|
||||
{
|
||||
ioErrorInFile( is.name(), is.lineNumber() ) <<
|
||||
" expected " << flen << " elements, but supplied "<<
|
||||
this->size() << " elements in file "<< is.name() <<endl;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -104,10 +111,18 @@ bool pFlow::Field<VectorField, T, PropType>::readField
|
||||
(
|
||||
iIstream& is,
|
||||
const size_t len,
|
||||
bool resume,
|
||||
bool readLength
|
||||
)
|
||||
{
|
||||
if( !is.findToken(fieldKey_) )
|
||||
|
||||
bool tokenFound;
|
||||
if( resume )
|
||||
tokenFound = is.findTokenResume(fieldKey_);
|
||||
else
|
||||
tokenFound = is.findToken(fieldKey_);
|
||||
|
||||
if( !tokenFound )
|
||||
{
|
||||
ioErrorInFile( is.name(), is.lineNumber() ) <<
|
||||
" error in searching for filedkey " << fieldKey_<<endl;
|
||||
@ -152,10 +167,11 @@ bool pFlow::Field<VectorField, T, PropType>::readField
|
||||
template<template<class, class> class VectorField, class T, class PropType>
|
||||
bool pFlow::Field<VectorField, T, PropType>::readField
|
||||
(
|
||||
iIstream& is
|
||||
iIstream& is,
|
||||
bool resume
|
||||
)
|
||||
{
|
||||
return readField(is, 0, true);
|
||||
return readField(is, 0, resume ,true);
|
||||
}
|
||||
|
||||
|
||||
@ -164,7 +180,15 @@ bool pFlow::Field<VectorField, T, PropType>::writeField(iOstream& os)const
|
||||
{
|
||||
os.writeWordKeyword(fieldKey_) << nonUniform__<<endl;
|
||||
os<< this->size()<<endl;
|
||||
VectorType::write(os);
|
||||
if( os.isBinary() && !std::is_same_v<T,word>)
|
||||
{
|
||||
os.write(reinterpret_cast<const char*>(this->data()), this->size()*sizeof(T));
|
||||
}
|
||||
else
|
||||
{
|
||||
VectorType::write(os);
|
||||
}
|
||||
os.endEntry();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -214,18 +214,18 @@ public:
|
||||
}
|
||||
|
||||
//// - IO operations
|
||||
bool readField(iIstream& is, const size_t len, bool readLength = true);
|
||||
bool readField(iIstream& is, const size_t len, bool resume, bool readLength = true);
|
||||
|
||||
|
||||
bool readField(iIstream& is );
|
||||
bool readField(iIstream& is, bool resume );
|
||||
|
||||
|
||||
bool writeField(iOstream& os)const;
|
||||
|
||||
|
||||
bool read(iIstream& is)
|
||||
bool read(iIstream& is, bool resume = false)
|
||||
{
|
||||
return readField(is);
|
||||
return readField(is, resume);
|
||||
}
|
||||
|
||||
bool write(iOstream& os)const
|
||||
@ -240,7 +240,7 @@ public:
|
||||
template<template<class, class> class VectorField, class T, class PropType>
|
||||
inline iIstream& operator >> (iIstream & is, Field<VectorField, T, PropType> & ifld )
|
||||
{
|
||||
if( !ifld.readField(is) )
|
||||
if( !ifld.readField(is, false) )
|
||||
{
|
||||
ioErrorInFile (is.name(), is.lineNumber());
|
||||
fatalExit;
|
||||
|
@ -197,6 +197,26 @@ bool pFlow::Vector<T, Allocator>::deleteElement
|
||||
return false;
|
||||
}
|
||||
|
||||
template<typename T, typename Allocator>
|
||||
void pFlow::Vector<T, Allocator>::sortItems(
|
||||
const int32IndexContainer& indices)
|
||||
{
|
||||
if(indices.size() == 0)
|
||||
{
|
||||
this->resize(0);
|
||||
return;
|
||||
}
|
||||
size_t newSize = indices.size();
|
||||
auto hIndices = indices.hostView();
|
||||
VectorType sortedVec(name(), capacity(), newSize, RESERVE());
|
||||
|
||||
ForAll(i, hIndices)
|
||||
{
|
||||
sortedVec[i] = vectorType::operator[](i);
|
||||
}
|
||||
*this = std::move(sortedVec);
|
||||
}
|
||||
|
||||
template<typename T, typename Allocator>
|
||||
bool pFlow::Vector<T, Allocator>::insertSetElement(
|
||||
const int32IndexContainer& indices,
|
||||
|
@ -323,6 +323,9 @@ public:
|
||||
// return false if out of range
|
||||
bool deleteElement(label index);
|
||||
|
||||
/// Sort elements based on the indices
|
||||
void sortItems(const int32IndexContainer& indices);
|
||||
|
||||
// - set or insert new elements into the vector
|
||||
// return false if it fails
|
||||
bool insertSetElement(const int32IndexContainer& indices, const T& val);
|
||||
|
@ -545,6 +545,35 @@ public:
|
||||
return true;
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_H
|
||||
void sortItems(const int32IndexContainer& indices)
|
||||
{
|
||||
if(indices.size() == 0)
|
||||
{
|
||||
setSize(0);
|
||||
return;
|
||||
}
|
||||
size_t newSize = indices.size();
|
||||
|
||||
deviceViewType sortedView("sortedView", newSize);
|
||||
auto dVec = deviceVectorAll();
|
||||
|
||||
auto d_indices = indices.deviceView();
|
||||
|
||||
Kokkos::parallel_for(
|
||||
"sortItems",
|
||||
newSize,
|
||||
LAMBDA_HD(int32 i){
|
||||
sortedView[i] = dVec[d_indices[i]];
|
||||
}
|
||||
);
|
||||
Kokkos::fence();
|
||||
setSize(newSize);
|
||||
copy(deviceVector(), sortedView);
|
||||
modifyOnDevice();
|
||||
syncViews();
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_H
|
||||
bool insertSetElement(const int32IndexContainer& indices, const T& val)
|
||||
{
|
||||
|
@ -558,6 +558,46 @@ public:
|
||||
return false;
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_H
|
||||
void sortItems(const int32IndexContainer& indices)
|
||||
{
|
||||
if(indices.size() == 0)
|
||||
{
|
||||
setSize(0);
|
||||
return;
|
||||
}
|
||||
|
||||
size_t newSize = indices.size();
|
||||
viewType sortedView("sortedView", newSize);
|
||||
|
||||
if constexpr (isHostAccessible_)
|
||||
{
|
||||
auto h_indices = indices.hostView();
|
||||
Kokkos::parallel_for(
|
||||
"sortItems",
|
||||
newSize,
|
||||
LAMBDA_HD(int32 i){
|
||||
sortedView[i] = view_[h_indices[i]];
|
||||
});
|
||||
}else
|
||||
{
|
||||
auto d_indices = indices.deviceView();
|
||||
Kokkos::parallel_for(
|
||||
"sortItems",
|
||||
newSize,
|
||||
LAMBDA_HD(int32 i){
|
||||
sortedView[i] = view_[d_indices[i]];
|
||||
});
|
||||
}
|
||||
|
||||
Kokkos::fence();
|
||||
setSize(newSize);
|
||||
|
||||
copy(deviceVector(), sortedView);
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_H
|
||||
bool insertSetElement(const int32IndexContainer& indices, const Vector<T>& vals)
|
||||
{
|
||||
|
@ -18,4 +18,7 @@ Licence:
|
||||
|
||||
-----------------------------------------------------------------------------*/
|
||||
|
||||
#include "indexContainer.hpp"
|
||||
#include "indexContainer.hpp"
|
||||
|
||||
|
||||
template class pFlow::indexContainer<pFlow::int32>;
|
@ -43,6 +43,10 @@ public:
|
||||
// - viewType of data on host
|
||||
using HostViewType = typename DualViewType::t_host;
|
||||
|
||||
using HostType = typename HostViewType::device_type;
|
||||
|
||||
using DeviceType = typename DeviceViewType::device_type;
|
||||
|
||||
template<typename ViewType>
|
||||
class IndexAccessor
|
||||
{
|
||||
@ -99,7 +103,11 @@ public:
|
||||
|
||||
indexContainer(const indexContainer&) = default;
|
||||
|
||||
indexContainer& operator = (const indexContainer&) = default;
|
||||
indexContainer& operator = (const indexContainer&) = default;
|
||||
|
||||
indexContainer(indexContainer&&) = default;
|
||||
|
||||
indexContainer& operator = (indexContainer&&) = default;
|
||||
|
||||
~indexContainer() = default;
|
||||
|
||||
@ -150,6 +158,16 @@ public:
|
||||
return views_.d_view;
|
||||
}
|
||||
|
||||
HostViewType& hostView()
|
||||
{
|
||||
return views_.h_view;
|
||||
}
|
||||
|
||||
DeviceViewType& deviceView()
|
||||
{
|
||||
return views_.d_view;
|
||||
}
|
||||
|
||||
auto indicesHost()const
|
||||
{
|
||||
return IndexAccessor<HostViewType>(views_.h_view);
|
||||
@ -157,7 +175,45 @@ public:
|
||||
|
||||
auto indicesDevice()const
|
||||
{
|
||||
return IndexAccessor<DeviceViewType>(views_.d_veiw);
|
||||
return IndexAccessor<DeviceViewType>(views_.d_view);
|
||||
}
|
||||
|
||||
void modifyOnHost()
|
||||
{
|
||||
views_.modify_host();
|
||||
}
|
||||
|
||||
void modifyOnDevice()
|
||||
{
|
||||
views_.modify_device();
|
||||
}
|
||||
|
||||
void syncViews()
|
||||
{
|
||||
bool findMinMax = false;
|
||||
if(views_.template need_sync<HostType>())
|
||||
{
|
||||
Kokkos::deep_copy(views_.d_view, views_.h_view);
|
||||
findMinMax = true;
|
||||
}
|
||||
else if(views_.template need_sync<DeviceType>())
|
||||
{
|
||||
Kokkos::deep_copy(views_.h_view, views_.d_view);
|
||||
findMinMax = true;
|
||||
}
|
||||
|
||||
if(findMinMax)
|
||||
{
|
||||
min_ = pFlow::min(views_.d_view, 0, size_);
|
||||
max_ = pFlow::max(views_.d_view, 0, size_);
|
||||
}
|
||||
}
|
||||
|
||||
size_t setSize(size_t ns)
|
||||
{
|
||||
auto tmp = size_;
|
||||
size_ = ns;
|
||||
return tmp;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -123,6 +123,13 @@ bool pFlow::pointField<VectorField, T, MemorySpace>::update(const eventMessage&
|
||||
//Vector<T> vals( newElems.size(), defaultValue_);
|
||||
return this->insertSetElement(newElems, defaultValue_);
|
||||
}
|
||||
|
||||
if(msg.isRearranged())
|
||||
{
|
||||
auto sortedIndex = pStruct().mortonSortedIndex();
|
||||
this->sortItems(sortedIndex);
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -24,22 +24,24 @@ Licence:
|
||||
pFlow::uniquePtr<pFlow::iFstream> pFlow::IOfileHeader::inStream()const
|
||||
{
|
||||
if( fileExist() )
|
||||
return makeUnique<iFstream>(path());
|
||||
return makeUnique<iFstream>(path(), inFileBinary());
|
||||
else
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
pFlow::uniquePtr<pFlow::oFstream> pFlow::IOfileHeader::outStream()const
|
||||
{
|
||||
auto osPtr = makeUnique<oFstream>(path());
|
||||
|
||||
if(osPtr && owner_)
|
||||
{
|
||||
|
||||
auto osPtr = makeUnique<oFstream>(path(), outFileBinary());
|
||||
|
||||
if(osPtr && owner_)
|
||||
{
|
||||
auto outPrecision = owner_->outFilePrecision();
|
||||
osPtr->precision(outPrecision);
|
||||
}
|
||||
}
|
||||
|
||||
return osPtr;
|
||||
return osPtr;
|
||||
}
|
||||
|
||||
pFlow::IOfileHeader::IOfileHeader
|
||||
@ -68,6 +70,19 @@ pFlow::fileSystem pFlow::IOfileHeader::path() const
|
||||
return f;
|
||||
}
|
||||
|
||||
bool pFlow::IOfileHeader::outFileBinary()const
|
||||
{
|
||||
if(owner_)
|
||||
return owner_->outFileBinary();
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
bool pFlow::IOfileHeader::inFileBinary()const
|
||||
{
|
||||
return toUpper(fileFormat_) == "BINARY";
|
||||
}
|
||||
|
||||
bool pFlow::IOfileHeader::headerOk(bool silent)
|
||||
{
|
||||
if(!fileExist())
|
||||
@ -130,6 +145,15 @@ bool pFlow::IOfileHeader::writeHeader(iOstream& os, const word& typeName) const
|
||||
os.writeWordEntry("objectName", name() );
|
||||
os.fatalCheck("writing objectName");
|
||||
|
||||
word fileFormat;
|
||||
if(outFileBinary())
|
||||
fileFormat = "Binary";
|
||||
else
|
||||
fileFormat = "ASCII";
|
||||
|
||||
os.writeWordEntry("fileFormat", fileFormat);
|
||||
os.fatalCheck("writing fileFormat");
|
||||
|
||||
writeSeparator(os);
|
||||
return true;
|
||||
}
|
||||
@ -164,6 +188,18 @@ bool pFlow::IOfileHeader::readHeader(iIstream& is, bool silent)
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
if( !is.findTokenAndNextSilent("fileFormat", fileFormat_) )
|
||||
{
|
||||
if(!silent)
|
||||
{
|
||||
warningInFunction <<
|
||||
"cannot find/error in reading fileFormat in file "<<
|
||||
is.name()<<endl;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -49,6 +49,9 @@ protected:
|
||||
// object type read from file
|
||||
word objectType_;
|
||||
|
||||
/// file format read from file
|
||||
word fileFormat_ = "ASCII";
|
||||
|
||||
//// - methods
|
||||
|
||||
// - input file stream
|
||||
@ -83,6 +86,10 @@ public:
|
||||
// - path to file name
|
||||
fileSystem path() const;
|
||||
|
||||
bool outFileBinary()const;
|
||||
|
||||
bool inFileBinary()const;
|
||||
|
||||
// - should be used for read operations
|
||||
// check if the file exist,
|
||||
// read the header of the file to check if it is ok
|
||||
|
@ -65,9 +65,25 @@ bool pFlow::IOobject::read(bool rdHdr)
|
||||
|
||||
if( implyRead() )
|
||||
{
|
||||
if( auto ptrIS = inStream(); ptrIS )
|
||||
if( rdHdr )
|
||||
{
|
||||
return read( ptrIS(), rdHdr);
|
||||
if( auto ptrIS = inStream(); ptrIS )
|
||||
{
|
||||
if(!readHeader(ptrIS()))return false;
|
||||
ptrIS.reset(nullptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
warningInFunction<<
|
||||
"could not open file " << path() <<endl;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if( auto ptrIS = inStream(); ptrIS )
|
||||
{
|
||||
if(!read(ptrIS(), rdHdr))return false;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -75,7 +91,8 @@ bool pFlow::IOobject::read(bool rdHdr)
|
||||
"could not open file " << path() <<endl;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -23,6 +23,25 @@ Licence:
|
||||
#include "dictionary.hpp"
|
||||
#include "vocabs.hpp"
|
||||
|
||||
|
||||
bool pFlow::Time::readDictionary(const dictionary& dict)
|
||||
{
|
||||
auto wF = toUpper(dict.getValOrSet<word>("writeFormat", "ASCII"));
|
||||
|
||||
if(wF == "ASCII")
|
||||
outFormatBinary_ = false;
|
||||
else if(wF == "BINARY")
|
||||
outFormatBinary_ = true;
|
||||
else
|
||||
{
|
||||
fatalErrorInFunction<<
|
||||
"Invalid writeFormat in file "<< dict.name()<<endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
pFlow::Time::Time
|
||||
(
|
||||
repository* owner,
|
||||
@ -45,6 +64,10 @@ pFlow::Time::Time
|
||||
)
|
||||
{
|
||||
|
||||
if(!readDictionary(setiingsDict))
|
||||
{
|
||||
fatalExit;
|
||||
}
|
||||
}
|
||||
|
||||
pFlow::Time::Time(
|
||||
@ -75,7 +98,10 @@ pFlow::Time::Time(
|
||||
this
|
||||
)
|
||||
{
|
||||
|
||||
if(!readDictionary(setiingsDict))
|
||||
{
|
||||
fatalExit;
|
||||
}
|
||||
}
|
||||
|
||||
bool pFlow::Time::write
|
||||
|
@ -44,12 +44,17 @@ class Time
|
||||
|
||||
protected:
|
||||
|
||||
bool outFormatBinary_ = false;
|
||||
|
||||
// - geometry folder/repository
|
||||
repository geometry_;
|
||||
|
||||
// - integration folder/repository
|
||||
repository integration_;
|
||||
|
||||
|
||||
bool readDictionary(const dictionary& dict);
|
||||
|
||||
public:
|
||||
|
||||
// Constructor with owner and settings dict
|
||||
@ -90,6 +95,13 @@ public:
|
||||
{
|
||||
return integration_;
|
||||
}
|
||||
|
||||
/// Write to the file with binary format?
|
||||
bool outFileBinary()const override
|
||||
{
|
||||
return outFormatBinary_;
|
||||
}
|
||||
|
||||
// override the base write to manage write operation
|
||||
// based on the valid write time intervals
|
||||
virtual bool write(bool verbose = false) const;
|
||||
|
@ -61,8 +61,16 @@ pFlow::timeControl::timeControl
|
||||
(
|
||||
startTime_,
|
||||
dict.getValOrSet("timersReportInterval", 0.04)
|
||||
),
|
||||
performSorting_
|
||||
(
|
||||
dict.getValOrSet("performSorting", Logical("No"))
|
||||
),
|
||||
sortingInterval_
|
||||
(
|
||||
startTime_,
|
||||
dict.getValOrSet("sortingInterval", static_cast<real>(1.0))
|
||||
)
|
||||
|
||||
{
|
||||
checkForOutputToFile();
|
||||
}
|
||||
@ -95,6 +103,15 @@ pFlow::timeControl::timeControl(
|
||||
(
|
||||
startTime_,
|
||||
dict.getValOrSet("timersReportInterval", 0.04)
|
||||
),
|
||||
performSorting_
|
||||
(
|
||||
dict.getValOrSet("performSorting", Logical("No"))
|
||||
),
|
||||
sortingInterval_
|
||||
(
|
||||
startTime_,
|
||||
dict.getValOrSet("sortingInterval", static_cast<real>(1.0))
|
||||
)
|
||||
{
|
||||
checkForOutputToFile();
|
||||
@ -160,6 +177,11 @@ bool pFlow::timeControl::timersReportTime()const
|
||||
return timersReportInterval_.isMember(currentTime_, dt_);
|
||||
}
|
||||
|
||||
bool pFlow::timeControl::sortTime()const
|
||||
{
|
||||
return performSorting_()&&sortingInterval_.isMember(currentTime_,dt_);
|
||||
}
|
||||
|
||||
void pFlow::timeControl::setSaveTimeFolder(
|
||||
bool saveToFile,
|
||||
const word& timeName)
|
||||
|
@ -74,9 +74,13 @@ protected:
|
||||
|
||||
real writeTime_ = 0; // for managedExternamly
|
||||
|
||||
realStridedRange timersReportInterval_;
|
||||
realStridedRange timersReportInterval_;
|
||||
|
||||
int32StridedRagne screenReportInterval_ ={0,100};
|
||||
Logical performSorting_;
|
||||
|
||||
realStridedRange sortingInterval_;
|
||||
|
||||
int32StridedRagne screenReportInterval_ ={0,100};
|
||||
|
||||
bool outputToFile_ = false;
|
||||
|
||||
@ -164,6 +168,8 @@ public:
|
||||
}
|
||||
|
||||
bool timersReportTime()const;
|
||||
|
||||
bool sortTime()const;
|
||||
|
||||
bool setOutputToFile(real writeTime, const word& timeName)
|
||||
{
|
||||
|
@ -204,7 +204,15 @@ public:
|
||||
// list of repository names in this repository
|
||||
wordList repositoryNames()const;
|
||||
|
||||
|
||||
//// - IO operations
|
||||
virtual bool outFileBinary()const
|
||||
{
|
||||
if(owner_)
|
||||
return owner_->outFileBinary();
|
||||
else
|
||||
return false;
|
||||
}
|
||||
virtual bool write(bool verbose = false) const;
|
||||
|
||||
};
|
||||
|
@ -24,7 +24,7 @@ Licence:
|
||||
#include "fileStream.hpp"
|
||||
#include "error.hpp"
|
||||
|
||||
|
||||
#include "streams.hpp"
|
||||
|
||||
void pFlow::fileStream::openInFile
|
||||
(
|
||||
@ -39,7 +39,12 @@ void pFlow::fileStream::openInFile
|
||||
fatalExit;
|
||||
}
|
||||
|
||||
inStream_ = makeUnique<std::ifstream>( path.wordPath(), std::ios_base::in);
|
||||
if(binary_)
|
||||
inStream_ = makeUnique<std::ifstream>(
|
||||
path.wordPath(), std::ios_base::in | std::ios_base::binary);
|
||||
else
|
||||
inStream_ = makeUnique<std::ifstream>(
|
||||
path.wordPath(), std::ios_base::in);
|
||||
|
||||
if( !inStream_->is_open())
|
||||
{
|
||||
@ -66,7 +71,15 @@ void pFlow::fileStream::openOutFile
|
||||
dir.createDirs();
|
||||
}
|
||||
|
||||
outStream_ = makeUnique< std::ofstream>(path.wordPath(), std::ios_base::out);
|
||||
if(binary_)
|
||||
{
|
||||
outStream_ = makeUnique< std::ofstream>(
|
||||
path.wordPath(), std::ios_base::out| std::ios::binary);
|
||||
}
|
||||
else
|
||||
outStream_ = makeUnique< std::ofstream>(
|
||||
path.wordPath(), std::ios_base::out);
|
||||
|
||||
|
||||
if(!outStream_->is_open())
|
||||
{
|
||||
@ -92,11 +105,13 @@ void pFlow::fileStream::close()
|
||||
pFlow::fileStream::fileStream
|
||||
(
|
||||
const fileSystem& path,
|
||||
bool outStream
|
||||
bool outStream,
|
||||
bool binary
|
||||
)
|
||||
:
|
||||
inStream_(nullptr),
|
||||
outStream_(nullptr)
|
||||
outStream_(nullptr),
|
||||
binary_(binary)
|
||||
{
|
||||
|
||||
if(outStream)
|
||||
|
@ -43,6 +43,8 @@ protected:
|
||||
// - out file stream
|
||||
uniquePtr<std::ofstream> outStream_;
|
||||
|
||||
bool binary_ = false;
|
||||
|
||||
// - open input file
|
||||
void openInFile(const fileSystem& path);
|
||||
|
||||
@ -56,7 +58,7 @@ public:
|
||||
|
||||
// - Constructors
|
||||
|
||||
fileStream( const fileSystem& path, bool outStream = false);
|
||||
fileStream( const fileSystem& path, bool outStream = false, bool binary = false);
|
||||
|
||||
fileStream(const fileStream&)= delete;
|
||||
|
||||
|
@ -24,9 +24,17 @@ Licence:
|
||||
#include "iFstream.hpp"
|
||||
|
||||
|
||||
pFlow::iFstream::iFstream (const fileSystem& path)
|
||||
pFlow::iFstream::iFstream
|
||||
(
|
||||
const fileSystem& path,
|
||||
bool binary)
|
||||
:
|
||||
fileStream(path),
|
||||
Istream( fileStream::inStream(), path.wordPath())
|
||||
fileStream(path, false, binary),
|
||||
Istream
|
||||
(
|
||||
fileStream::inStream(),
|
||||
path.wordPath(),
|
||||
(binary)? BINARY : ASCII
|
||||
)
|
||||
{
|
||||
}
|
@ -40,7 +40,7 @@ class iFstream
|
||||
public:
|
||||
|
||||
// - Constructor
|
||||
iFstream (const fileSystem& path);
|
||||
iFstream (const fileSystem& path, bool binary = false);
|
||||
|
||||
// no copy constructor
|
||||
iFstream( const iFstream& src) = delete;
|
||||
|
@ -24,11 +24,13 @@ Licence:
|
||||
#include "oFstream.hpp"
|
||||
|
||||
|
||||
pFlow::oFstream::oFstream (const fileSystem& path)
|
||||
pFlow::oFstream::oFstream (const fileSystem& path, bool binary)
|
||||
:
|
||||
fileStream(path, true),
|
||||
Ostream( fileStream::outStream(), path.wordPath())
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
fileStream(path, true, binary),
|
||||
Ostream
|
||||
(
|
||||
fileStream::outStream(),
|
||||
path.wordPath(),
|
||||
(binary)? BINARY : ASCII
|
||||
)
|
||||
{}
|
@ -41,7 +41,7 @@ class oFstream
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
oFstream (const fileSystem& path);
|
||||
oFstream (const fileSystem& path, bool binary = false);
|
||||
|
||||
// no copy constructor
|
||||
oFstream( const oFstream& src) = delete;
|
||||
|
@ -307,10 +307,11 @@ pFlow::Istream& pFlow::Istream::readVariable(word& str)
|
||||
pFlow::Istream::Istream
|
||||
(
|
||||
std::istream& is,
|
||||
const word& streamName
|
||||
const word& streamName,
|
||||
writeFormat wf
|
||||
)
|
||||
:
|
||||
iIstream(),
|
||||
iIstream(wf),
|
||||
name_(streamName),
|
||||
is_(is)
|
||||
{
|
||||
@ -846,6 +847,26 @@ pFlow::iIstream& pFlow::Istream::read(double& val)
|
||||
return *this;
|
||||
}
|
||||
|
||||
pFlow::iIstream& pFlow::Istream::read
|
||||
(
|
||||
char* buffer,
|
||||
std::streamsize count
|
||||
)
|
||||
{
|
||||
if ( !isBinary() )
|
||||
{
|
||||
fatalErrorInFunction<<"stream format is not binray. Stream name is "<<
|
||||
name()<<'\n';
|
||||
fatalExit;
|
||||
}
|
||||
|
||||
readBegin("binaryBlock");
|
||||
is_.read(buffer, count);
|
||||
readEnd("binaryBlock");
|
||||
|
||||
setState(is_.rdstate());
|
||||
return *this;
|
||||
}
|
||||
|
||||
void pFlow::Istream::rewind()
|
||||
{
|
||||
|
@ -65,8 +65,7 @@ public:
|
||||
|
||||
|
||||
//- Construct wrapper around std::istream, set stream status
|
||||
Istream( std::istream& is, const word& streamName);
|
||||
|
||||
Istream( std::istream& is, const word& streamName, writeFormat wf = ASCII);
|
||||
|
||||
//- Destructor
|
||||
virtual ~Istream() = default;
|
||||
@ -150,6 +149,8 @@ public:
|
||||
//- Read a double
|
||||
virtual iIstream& read(double& val) override;
|
||||
|
||||
iIstream& read(char* buffer, std::streamsize count) override;
|
||||
|
||||
|
||||
//- Rewind the stream so that it may be read again
|
||||
virtual void rewind();
|
||||
|
@ -28,10 +28,11 @@ Licence:
|
||||
pFlow::Ostream::Ostream
|
||||
(
|
||||
std::ostream& os,
|
||||
const word& streamName
|
||||
const word& streamName,
|
||||
writeFormat wF
|
||||
)
|
||||
:
|
||||
iOstream(),
|
||||
iOstream(wF),
|
||||
name_(streamName),
|
||||
os_(os)
|
||||
{
|
||||
@ -230,6 +231,29 @@ pFlow::iOstream& pFlow::Ostream::write(const double val)
|
||||
return *this;
|
||||
}
|
||||
|
||||
pFlow::iOstream& pFlow::Ostream::write
|
||||
(
|
||||
const char* binaryData,
|
||||
std::streamsize count
|
||||
)
|
||||
{
|
||||
if ( !isBinary() )
|
||||
{
|
||||
fatalErrorInFunction<<"stream format is not binray. Stream name is "<<
|
||||
name()<<'\n';
|
||||
fatalExit;
|
||||
}
|
||||
|
||||
os_ << token::BEGIN_LIST;
|
||||
os_.write(binaryData, count);
|
||||
os_ << token::END_LIST;
|
||||
|
||||
setState(os_.rdstate());
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void pFlow::Ostream::indent()
|
||||
|
@ -46,7 +46,7 @@ public:
|
||||
|
||||
// Constructors
|
||||
|
||||
Ostream ( std::ostream& os, const word& streamName);
|
||||
Ostream ( std::ostream& os, const word& streamName, writeFormat wf = ASCII);
|
||||
|
||||
//- no copy construct
|
||||
Ostream(const Ostream&) = delete;
|
||||
@ -75,79 +75,80 @@ public:
|
||||
|
||||
//- Write token to stream or otherwise handle it.
|
||||
// return false if the token type was not handled by this method
|
||||
virtual bool write(const token& tok)override;
|
||||
bool write(const token& tok)override;
|
||||
|
||||
//- Write character
|
||||
virtual iOstream& write(const char c)override;
|
||||
iOstream& write(const char c)override;
|
||||
|
||||
//- Write character string
|
||||
virtual iOstream& write(const char* str)override;
|
||||
iOstream& write(const char* str)override;
|
||||
|
||||
//- Write word
|
||||
virtual iOstream& write(const word& str)override;
|
||||
iOstream& write(const word& str)override;
|
||||
|
||||
//- Write std::string surrounded by quotes.
|
||||
// Optional write without quotes.
|
||||
virtual iOstream& writeQuoted ( const word& str, const bool quoted=true )override;
|
||||
iOstream& writeQuoted ( const word& str, const bool quoted=true ) override;
|
||||
|
||||
//- Write int64
|
||||
virtual iOstream& write(const int64 val) override;
|
||||
iOstream& write(const int64 val) override;
|
||||
|
||||
//- Write int32
|
||||
virtual iOstream& write(const int32 val) override;
|
||||
|
||||
iOstream& write(const int32 val) override;
|
||||
|
||||
//- Write label
|
||||
virtual iOstream& write(const label val) override;
|
||||
iOstream& write(const label val) override;
|
||||
|
||||
//- Write uint32
|
||||
virtual iOstream& write(const uint32 val) override;
|
||||
iOstream& write(const uint32 val) override;
|
||||
|
||||
//- Write uint16
|
||||
virtual iOstream& write(const uint16 val) override;
|
||||
iOstream& write(const uint16 val) override;
|
||||
|
||||
//- Write float
|
||||
virtual iOstream& write(const float val) override;
|
||||
iOstream& write(const float val) override;
|
||||
|
||||
//- Write double
|
||||
virtual iOstream& write(const double val) override;
|
||||
iOstream& write(const double val) override;
|
||||
|
||||
/// Write a block of binray data
|
||||
iOstream& write(const char* binaryData, std::streamsize count) override;
|
||||
|
||||
//- Add indentation characters
|
||||
virtual void indent();
|
||||
|
||||
void indent() override;
|
||||
|
||||
//- Set stream flags
|
||||
virtual ios_base::fmtflags flags(const ios_base::fmtflags f);
|
||||
ios_base::fmtflags flags(const ios_base::fmtflags f) override;
|
||||
|
||||
//- Flush stream
|
||||
virtual void flush();
|
||||
void flush() override;
|
||||
|
||||
//- Add newline and flush stream
|
||||
virtual void endl();
|
||||
void endl() override;
|
||||
|
||||
//- Get the current padding character
|
||||
virtual char fill() const;
|
||||
char fill() const override;
|
||||
|
||||
//- Set padding character for formatted field up to field width
|
||||
// \return previous padding character
|
||||
virtual char fill(const char fillch);
|
||||
char fill(const char fillch) override;
|
||||
|
||||
//- Get width of output field
|
||||
virtual int width() const;
|
||||
int width() const override;
|
||||
|
||||
//- Set width of output field
|
||||
// \return previous width
|
||||
virtual int width(const int w);
|
||||
int width(const int w) override;
|
||||
|
||||
//- Get precision of output field
|
||||
virtual int precision() const;
|
||||
int precision() const override;
|
||||
|
||||
//- Set precision of output field
|
||||
// return old precision
|
||||
virtual int precision(const int p);
|
||||
int precision(const int p) override;
|
||||
|
||||
//- Access to underlying std::ostream
|
||||
virtual std::ostream& stdStream()
|
||||
virtual std::ostream& stdStream()
|
||||
{
|
||||
return os_;
|
||||
}
|
||||
|
@ -302,7 +302,15 @@ pFlow::iIstream& pFlow::iTstream::read
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
pFlow::iIstream& pFlow::iTstream::read
|
||||
(
|
||||
char* buffer,
|
||||
std::streamsize count
|
||||
)
|
||||
{
|
||||
notImplementedFunction;
|
||||
return *this;
|
||||
}
|
||||
|
||||
void pFlow::iTstream::rewind()
|
||||
{
|
||||
|
@ -123,6 +123,8 @@ public:
|
||||
//- Read a doubleScalar
|
||||
virtual iIstream& read(double&) override;
|
||||
|
||||
iIstream& read(char* buffer, std::streamsize count) override;
|
||||
|
||||
// - Rewind the stream so that it may be read again
|
||||
virtual void rewind();
|
||||
|
||||
|
@ -148,6 +148,15 @@ pFlow::iOstream& pFlow::oTstream::write(const double val)
|
||||
return *this;
|
||||
}
|
||||
|
||||
pFlow::iOstream& pFlow::oTstream::write
|
||||
(
|
||||
const char* binaryData,
|
||||
std::streamsize count
|
||||
)
|
||||
{
|
||||
notImplementedFunction;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
void pFlow::oTstream::append(const token& tok)
|
||||
|
@ -102,6 +102,11 @@ public:
|
||||
//- Write double
|
||||
virtual iOstream& write(const double val) override;
|
||||
|
||||
/// Write a block of binray data
|
||||
iOstream& write(
|
||||
const char* binaryData,
|
||||
std::streamsize count) override;
|
||||
|
||||
// - append token to the stream
|
||||
virtual void append(const token& tok);
|
||||
|
||||
|
@ -50,226 +50,260 @@ public:
|
||||
|
||||
enum streamAccess : char
|
||||
{
|
||||
CLOSED = 0, //!< stream is not open
|
||||
OPENED //!< stream is open
|
||||
CLOSED = 0, /// stream is not open
|
||||
OPENED /// stream is open
|
||||
};
|
||||
|
||||
enum writeFormat: char
|
||||
{
|
||||
ASCII = 0,
|
||||
BINARY
|
||||
};
|
||||
|
||||
//- Default precision
|
||||
/// Default precision, only works for ASCII
|
||||
static unsigned int precision_;
|
||||
|
||||
protected:
|
||||
|
||||
//- Name for any generic stream - normally treat as readonly
|
||||
/// Name for any generic stream - normally treat as readonly
|
||||
static word staticName_;
|
||||
|
||||
/// Is stream open or closed
|
||||
streamAccess openClosed_;
|
||||
|
||||
/// write format
|
||||
writeFormat writeFormat_ = ASCII;
|
||||
|
||||
/// state
|
||||
ios_base::iostate ioState_;
|
||||
|
||||
|
||||
//- The file line
|
||||
/// The file line
|
||||
int32 lineNumber_;
|
||||
|
||||
|
||||
// Protected Member Functions
|
||||
//- Protected Member Functions
|
||||
|
||||
//- Set stream opened
|
||||
void setOpened()
|
||||
{
|
||||
openClosed_ = OPENED;
|
||||
}
|
||||
/// Set stream opened
|
||||
void setOpened()
|
||||
{
|
||||
openClosed_ = OPENED;
|
||||
}
|
||||
|
||||
//- Set stream closed
|
||||
void setClosed()
|
||||
{
|
||||
openClosed_ = CLOSED;
|
||||
}
|
||||
/// Set stream closed
|
||||
void setClosed()
|
||||
{
|
||||
openClosed_ = CLOSED;
|
||||
}
|
||||
|
||||
//- Set stream state
|
||||
void setState(ios_base::iostate state)
|
||||
{
|
||||
ioState_ = state;
|
||||
}
|
||||
/// Set stream state
|
||||
void setState(ios_base::iostate state)
|
||||
{
|
||||
ioState_ = state;
|
||||
}
|
||||
|
||||
//- Set stream to be good
|
||||
void setGood()
|
||||
{
|
||||
ioState_ = ios_base::iostate(0);
|
||||
}
|
||||
void setWriteFormat(writeFormat wF)
|
||||
{
|
||||
writeFormat_ = wF;
|
||||
}
|
||||
|
||||
/// Set stream to be good
|
||||
void setGood()
|
||||
{
|
||||
ioState_ = ios_base::iostate(0);
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
// Constructors
|
||||
explicit IOstream():
|
||||
openClosed_(CLOSED),
|
||||
ioState_(ios_base::iostate(0)),
|
||||
lineNumber_(0)
|
||||
{
|
||||
setBad();
|
||||
}
|
||||
//- Constructors
|
||||
|
||||
IOstream(const IOstream&) = default;
|
||||
/// Default
|
||||
explicit IOstream():
|
||||
openClosed_(CLOSED),
|
||||
writeFormat_(ASCII),
|
||||
ioState_(ios_base::iostate(0)),
|
||||
lineNumber_(0)
|
||||
{
|
||||
setBad();
|
||||
}
|
||||
|
||||
//- Destructor
|
||||
virtual ~IOstream() = default;
|
||||
|
||||
|
||||
//// Member Functions
|
||||
/// Construct and set write format
|
||||
explicit IOstream(writeFormat wF):
|
||||
openClosed_(CLOSED),
|
||||
writeFormat_(wF),
|
||||
ioState_(ios_base::iostate(0)),
|
||||
lineNumber_(0)
|
||||
{
|
||||
setBad();
|
||||
}
|
||||
|
||||
//- Return the name of the stream
|
||||
virtual const word& name() const;
|
||||
/// Copy
|
||||
IOstream(const IOstream&) = default;
|
||||
|
||||
//- Return non-const access to the name of the stream
|
||||
virtual word& name();
|
||||
/// Destructor
|
||||
virtual ~IOstream() = default;
|
||||
|
||||
|
||||
//- Member Functions
|
||||
|
||||
//- Check IOstream status for given operation.
|
||||
// Print IOstream state or generate a FatalIOError
|
||||
// when an error has occurred.
|
||||
// The base implementation is a fatalCheck
|
||||
virtual bool check(const char* operation) const;
|
||||
/// Return the name of the stream
|
||||
virtual const word& name() const;
|
||||
|
||||
//- Check IOstream status for given operation.
|
||||
// Generate a FatalIOError when an error has occurred.
|
||||
bool fatalCheck(const char* operation) const;
|
||||
/// Return non-const access to the name of the stream
|
||||
virtual word& name();
|
||||
|
||||
//- Return true if stream has been opened
|
||||
bool opened() const
|
||||
{
|
||||
return openClosed_ == OPENED;
|
||||
}
|
||||
/// Check IOstream status for given operation.
|
||||
/// Print IOstream state or generate a FatalIOError
|
||||
/// when an error has occurred.
|
||||
/// The base implementation is a fatalCheck
|
||||
virtual bool check(const char* operation) const;
|
||||
|
||||
//- Return true if stream is closed
|
||||
bool closed() const
|
||||
{
|
||||
return openClosed_ == CLOSED;
|
||||
}
|
||||
/// Check IOstream status for given operation.
|
||||
/// Generate a FatalIOError when an error has occurred.
|
||||
bool fatalCheck(const char* operation) const;
|
||||
|
||||
//- Return true if next operation might succeed
|
||||
bool good() const
|
||||
{
|
||||
return ioState_ == 0;
|
||||
}
|
||||
/// Return true if stream has been opened
|
||||
bool opened() const
|
||||
{
|
||||
return openClosed_ == OPENED;
|
||||
}
|
||||
|
||||
//- Return true if end of input seen
|
||||
bool eof() const
|
||||
{
|
||||
return ioState_ & ios_base::eofbit;
|
||||
}
|
||||
/// Return true if stream is closed
|
||||
bool closed() const
|
||||
{
|
||||
return openClosed_ == CLOSED;
|
||||
}
|
||||
|
||||
//- Return true if next operation will fail
|
||||
bool fail() const
|
||||
{
|
||||
return ioState_ & (ios_base::badbit | ios_base::failbit);
|
||||
}
|
||||
/// Return true if stream format is binray
|
||||
bool isBinary()const
|
||||
{
|
||||
return writeFormat_ == BINARY;
|
||||
}
|
||||
|
||||
//- Return true if stream is corrupted
|
||||
bool bad() const
|
||||
{
|
||||
return ioState_ & ios_base::badbit;
|
||||
}
|
||||
/// Return true if next operation might succeed
|
||||
bool good() const
|
||||
{
|
||||
return ioState_ == 0;
|
||||
}
|
||||
|
||||
//- Return true if the stream has not failed
|
||||
explicit operator bool() const
|
||||
{
|
||||
return !fail();
|
||||
}
|
||||
/// Return true if end of input seen
|
||||
bool eof() const
|
||||
{
|
||||
return ioState_ & ios_base::eofbit;
|
||||
}
|
||||
|
||||
//- Return true if the stream has failed
|
||||
bool operator!() const
|
||||
{
|
||||
return fail();
|
||||
}
|
||||
/// Return true if next operation will fail
|
||||
bool fail() const
|
||||
{
|
||||
return ioState_ & (ios_base::badbit | ios_base::failbit);
|
||||
}
|
||||
|
||||
|
||||
//- Const access to the current stream line number
|
||||
int32 lineNumber() const
|
||||
{
|
||||
return lineNumber_;
|
||||
}
|
||||
/// Return true if stream is corrupted
|
||||
bool bad() const
|
||||
{
|
||||
return ioState_ & ios_base::badbit;
|
||||
}
|
||||
|
||||
//- Non-const access to the current stream line number
|
||||
int32& lineNumber()
|
||||
{
|
||||
return lineNumber_;
|
||||
}
|
||||
/// Return true if the stream has not failed
|
||||
explicit operator bool() const
|
||||
{
|
||||
return !fail();
|
||||
}
|
||||
|
||||
//- Set the stream line number
|
||||
// \return the previous value
|
||||
int32 lineNumber(const int32 num)
|
||||
{
|
||||
const int32 old(lineNumber_);
|
||||
lineNumber_ = num;
|
||||
return old;
|
||||
}
|
||||
/// Return true if the stream has failed
|
||||
bool operator!() const
|
||||
{
|
||||
return fail();
|
||||
}
|
||||
|
||||
//- Return flags of stream
|
||||
virtual ios_base::fmtflags flags() const = 0;
|
||||
|
||||
/// Const access to the current stream line number
|
||||
int32 lineNumber() const
|
||||
{
|
||||
return lineNumber_;
|
||||
}
|
||||
|
||||
//- Return the default precision
|
||||
static unsigned int defaultPrecision()
|
||||
{
|
||||
return precision_;
|
||||
}
|
||||
/// Non-const access to the current stream line number
|
||||
int32& lineNumber()
|
||||
{
|
||||
return lineNumber_;
|
||||
}
|
||||
|
||||
//- Reset the default precision
|
||||
// \return the previous value
|
||||
static unsigned int defaultPrecision(unsigned int prec)
|
||||
{
|
||||
unsigned int old(precision_);
|
||||
precision_ = prec;
|
||||
return old;
|
||||
}
|
||||
/// Set the stream line number
|
||||
/// return the previous value
|
||||
int32 lineNumber(const int32 num)
|
||||
{
|
||||
const int32 old(lineNumber_);
|
||||
lineNumber_ = num;
|
||||
return old;
|
||||
}
|
||||
|
||||
//- Set stream to have reached eof
|
||||
void setEof()
|
||||
{
|
||||
ioState_ |= ios_base::eofbit;
|
||||
}
|
||||
/// Return flags of stream
|
||||
virtual ios_base::fmtflags flags() const = 0;
|
||||
|
||||
//- Set stream to have failed
|
||||
void setFail()
|
||||
{
|
||||
ioState_ |= ios_base::failbit;
|
||||
}
|
||||
/// Return the default precision
|
||||
static unsigned int defaultPrecision()
|
||||
{
|
||||
return precision_;
|
||||
}
|
||||
|
||||
//- Set stream to be bad
|
||||
void setBad()
|
||||
{
|
||||
ioState_ |= ios_base::badbit;
|
||||
}
|
||||
/// Reset the default precision
|
||||
/// return the previous value
|
||||
static unsigned int defaultPrecision(unsigned int prec)
|
||||
{
|
||||
unsigned int old(precision_);
|
||||
precision_ = prec;
|
||||
return old;
|
||||
}
|
||||
|
||||
//- Set flags of stream
|
||||
virtual ios_base::fmtflags flags(const ios_base::fmtflags f) = 0;
|
||||
/// Set stream to have reached eof
|
||||
void setEof()
|
||||
{
|
||||
ioState_ |= ios_base::eofbit;
|
||||
}
|
||||
|
||||
//- Set flags of stream
|
||||
ios_base::fmtflags setf(const ios_base::fmtflags f)
|
||||
{
|
||||
return flags(flags() | f);
|
||||
}
|
||||
/// Set stream to have failed
|
||||
void setFail()
|
||||
{
|
||||
ioState_ |= ios_base::failbit;
|
||||
}
|
||||
|
||||
//- Set flags of given field of stream
|
||||
ios_base::fmtflags setf
|
||||
(
|
||||
const ios_base::fmtflags f,
|
||||
const ios_base::fmtflags mask
|
||||
)
|
||||
{
|
||||
return flags((flags() & ~mask) | (f & mask));
|
||||
}
|
||||
/// Set stream to be bad
|
||||
void setBad()
|
||||
{
|
||||
ioState_ |= ios_base::badbit;
|
||||
}
|
||||
|
||||
//- Unset flags of stream
|
||||
void unsetf(const ios_base::fmtflags f)
|
||||
{
|
||||
flags(flags() & ~f);
|
||||
}
|
||||
/// Set flags of stream
|
||||
virtual ios_base::fmtflags flags(const ios_base::fmtflags f) = 0;
|
||||
|
||||
/// Set flags of stream
|
||||
ios_base::fmtflags setf(const ios_base::fmtflags f)
|
||||
{
|
||||
return flags(flags() | f);
|
||||
}
|
||||
|
||||
/// Set flags of given field of stream
|
||||
ios_base::fmtflags setf
|
||||
(
|
||||
const ios_base::fmtflags f,
|
||||
const ios_base::fmtflags mask
|
||||
)
|
||||
{
|
||||
return flags((flags() & ~mask) | (f & mask));
|
||||
}
|
||||
|
||||
/// Unset flags of stream
|
||||
void unsetf(const ios_base::fmtflags f)
|
||||
{
|
||||
flags(flags() & ~f);
|
||||
}
|
||||
|
||||
|
||||
}; // end of IOstream
|
||||
|
||||
|
||||
//- An IOstream manipulator
|
||||
/// An IOstream manipulator
|
||||
typedef IOstream& (*IOstreamManip)(IOstream&);
|
||||
|
||||
inline IOstream& dec(IOstream& io)
|
||||
|
@ -60,6 +60,11 @@ bool pFlow::iIstream::peekBack(token& tok)
|
||||
bool pFlow::iIstream::findToken( const word & w )
|
||||
{
|
||||
rewind();
|
||||
return findTokenResume(w);
|
||||
}
|
||||
|
||||
bool pFlow::iIstream::findTokenResume(const word& w)
|
||||
{
|
||||
token next;
|
||||
bool isFirstToken = true;
|
||||
|
||||
@ -74,8 +79,6 @@ bool pFlow::iIstream::findToken( const word & w )
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if( next.isWord() && isFirstToken)
|
||||
{
|
||||
if(next.wordToken() == w ) return true;
|
||||
@ -93,6 +96,11 @@ bool pFlow::iIstream::findToken( const word & w )
|
||||
bool pFlow::iIstream::findTokenSilent( const word & w, int32 limitLine )
|
||||
{
|
||||
rewind();
|
||||
return findTokenResumeSilent(w,limitLine);
|
||||
}
|
||||
|
||||
bool pFlow::iIstream::findTokenResumeSilent( const word & w, int32 limitLine )
|
||||
{
|
||||
token next;
|
||||
bool isFirstToken = true;
|
||||
|
||||
@ -115,7 +123,7 @@ bool pFlow::iIstream::findTokenSilent( const word & w, int32 limitLine )
|
||||
isFirstToken = false;
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool pFlow::iIstream::findTokenAndNext
|
||||
|
@ -53,6 +53,11 @@ public:
|
||||
putBack_(false)
|
||||
{}
|
||||
|
||||
iIstream(writeFormat wf):
|
||||
IOstream(wf),
|
||||
putBack_(false)
|
||||
{}
|
||||
|
||||
// - Copy construct
|
||||
iIstream(const iIstream&) = default;
|
||||
|
||||
@ -122,6 +127,8 @@ public:
|
||||
//- Read a doubleScalar
|
||||
virtual iIstream& read(double&) = 0;
|
||||
|
||||
virtual iIstream& read(char* buffer, std::streamsize count) =0;
|
||||
|
||||
|
||||
//- Rewind the stream so that it may be read again
|
||||
virtual void rewind() = 0;
|
||||
@ -132,10 +139,18 @@ public:
|
||||
// - search for all tokesn and find the first word token tbat matchs w
|
||||
virtual bool findToken( const word & w );
|
||||
|
||||
/// search for all tokesn after the current file position
|
||||
/// and find the first word token tbat matchs w
|
||||
virtual bool findTokenResume(const word& w);
|
||||
|
||||
|
||||
// - search for all tokesn and find the first word token that matchs
|
||||
virtual bool findTokenSilent( const word & w, int32 limitLine = 100 );
|
||||
|
||||
/// search for all tokesn after the current file position
|
||||
/// and find the first word token tbat matchs w
|
||||
virtual bool findTokenResumeSilent( const word & w, int32 limitLine = 100 );
|
||||
|
||||
// - search for all tokens and find the first word token and also next word token
|
||||
// chekck if it is eneded with end statement ;
|
||||
virtual bool findTokenAndNext( const word& w, word& nextW, bool checkEndStatement = true);
|
||||
|
@ -58,219 +58,227 @@ protected:
|
||||
|
||||
// Protected Data
|
||||
|
||||
//- Indentation of the entry from the start of the keyword
|
||||
/// Indentation of the entry from the start of the keyword
|
||||
static constexpr const unsigned short entryIndentation_ = 16;
|
||||
|
||||
//- Number of spaces per indent level
|
||||
/// Number of spaces per indent level
|
||||
unsigned short indentSize_ = 4;
|
||||
|
||||
//- Current indent level
|
||||
/// Current indent level
|
||||
unsigned short indentLevel_ = 0;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
|
||||
// Constructor
|
||||
explicit iOstream()
|
||||
{}
|
||||
// Constructors
|
||||
|
||||
//- Copy construct
|
||||
iOstream(const iOstream&) = default;
|
||||
/// Default
|
||||
explicit iOstream()
|
||||
{}
|
||||
|
||||
//- Destructor
|
||||
virtual ~iOstream() = default;
|
||||
/// Construct from writeFormat
|
||||
explicit iOstream(writeFormat wF):
|
||||
IOstream(wF)
|
||||
{}
|
||||
|
||||
/// Copy construct
|
||||
iOstream(const iOstream&) = default;
|
||||
|
||||
/// Destructor
|
||||
virtual ~iOstream() = default;
|
||||
|
||||
|
||||
// Write Functions
|
||||
/// Write Functions
|
||||
|
||||
//- Write token to stream or otherwise handle it.
|
||||
// \return false if the token type was not handled by this method
|
||||
virtual bool write(const token& tok) = 0;
|
||||
/// Write token to stream or otherwise handle it.
|
||||
/// return false if the token type was not handled by this method
|
||||
virtual bool write(const token& tok) = 0;
|
||||
|
||||
//- Write character
|
||||
virtual iOstream& write(const char c) = 0;
|
||||
/// Write character
|
||||
virtual iOstream& write(const char c) = 0;
|
||||
|
||||
//- Write character string
|
||||
virtual iOstream& write(const char* str) = 0;
|
||||
/// Write character string
|
||||
virtual iOstream& write(const char* str) = 0;
|
||||
|
||||
//- Write word
|
||||
virtual iOstream& write(const word& str) = 0;
|
||||
/// Write word
|
||||
virtual iOstream& write(const word& str) = 0;
|
||||
|
||||
/// Write std::string surrounded by quotes.
|
||||
/// Optional write without quotes.
|
||||
virtual iOstream& writeQuoted
|
||||
(
|
||||
const word& str,
|
||||
const bool quoted=true
|
||||
) = 0;
|
||||
|
||||
/// Write int64
|
||||
virtual iOstream& write(const int64 val) = 0;
|
||||
|
||||
//- Write std::string surrounded by quotes.
|
||||
// Optional write without quotes.
|
||||
virtual iOstream& writeQuoted
|
||||
(
|
||||
const word& str,
|
||||
const bool quoted=true
|
||||
) = 0;
|
||||
/// Write int32
|
||||
virtual iOstream& write(const int32 val) = 0;
|
||||
|
||||
/// Write label
|
||||
virtual iOstream& write(const label val) = 0;
|
||||
|
||||
/// Write uint32
|
||||
virtual iOstream& write(const uint32 val) = 0;
|
||||
|
||||
/// Write uint16
|
||||
virtual iOstream& write(const uint16 val) = 0;
|
||||
|
||||
/// Write float
|
||||
virtual iOstream& write(const float val) = 0;
|
||||
|
||||
/// Write double
|
||||
virtual iOstream& write(const double val) = 0;
|
||||
|
||||
/// Write a block of binray data
|
||||
virtual iOstream& write(const char* binaryData, std::streamsize count) = 0;
|
||||
|
||||
|
||||
//- Write int64
|
||||
virtual iOstream& write(const int64 val) = 0;
|
||||
// - Indent
|
||||
|
||||
//- Write int32
|
||||
virtual iOstream& write(const int32 val) = 0;
|
||||
/// Add indentation characters
|
||||
virtual void indent() = 0;
|
||||
|
||||
//- Write label
|
||||
virtual iOstream& write(const label val) = 0;
|
||||
/// Return indent level
|
||||
unsigned short indentSize() const
|
||||
{
|
||||
return indentSize_;
|
||||
}
|
||||
|
||||
//- Write uint32
|
||||
virtual iOstream& write(const uint32 val) = 0;
|
||||
/// Access to indent size
|
||||
unsigned short& indentSize()
|
||||
{
|
||||
return indentSize_;
|
||||
}
|
||||
|
||||
//- Write uint16
|
||||
virtual iOstream& write(const uint16 val) = 0;
|
||||
/// Return indent level
|
||||
unsigned short indentLevel() const
|
||||
{
|
||||
return indentLevel_;
|
||||
}
|
||||
|
||||
//- Write float
|
||||
virtual iOstream& write(const float val) = 0;
|
||||
/// Access to indent level
|
||||
unsigned short& indentLevel()
|
||||
{
|
||||
return indentLevel_;
|
||||
}
|
||||
|
||||
//- Write double
|
||||
virtual iOstream& write(const double val) = 0;
|
||||
|
||||
/// Increment the indent level
|
||||
void incrIndent()
|
||||
{
|
||||
++indentLevel_;
|
||||
}
|
||||
|
||||
/// Decrement the indent level
|
||||
void decrIndent();
|
||||
|
||||
//- Punctuations
|
||||
|
||||
//- Add indentation characters
|
||||
virtual void indent() = 0;
|
||||
/// Write begin block group with a name
|
||||
/// Increments indentation, adds newline.
|
||||
virtual iOstream& beginBlock(const word& kw);
|
||||
|
||||
//- Return indent level
|
||||
unsigned short indentSize() const
|
||||
{
|
||||
return indentSize_;
|
||||
}
|
||||
/// Write begin block group without a name
|
||||
/// Increments indentation, adds newline.
|
||||
virtual iOstream& beginBlock();
|
||||
|
||||
//- Access to indent size
|
||||
unsigned short& indentSize()
|
||||
{
|
||||
return indentSize_;
|
||||
}
|
||||
/// Write end block group
|
||||
/// Decrements indentation, adds newline.
|
||||
virtual iOstream& endBlock();
|
||||
|
||||
//- Return indent level
|
||||
unsigned short indentLevel() const
|
||||
{
|
||||
return indentLevel_;
|
||||
}
|
||||
/// Write begin list "("
|
||||
virtual iOstream& beginList();
|
||||
|
||||
//- Access to indent level
|
||||
unsigned short& indentLevel()
|
||||
{
|
||||
return indentLevel_;
|
||||
}
|
||||
/// Write begin list with keyword "kw ("
|
||||
virtual iOstream& beginList(const word& kw);
|
||||
|
||||
//- Increment the indent level
|
||||
void incrIndent()
|
||||
{
|
||||
++indentLevel_;
|
||||
}
|
||||
/// Write end list ")"
|
||||
virtual iOstream& endList();
|
||||
|
||||
//- Decrement the indent level
|
||||
void decrIndent();
|
||||
/// Write begin list "["
|
||||
virtual iOstream& beginSquare();
|
||||
|
||||
|
||||
/// Write begin list with keyword "kw ["
|
||||
virtual iOstream& beginSquare(const word& kw);
|
||||
|
||||
|
||||
//- Write begin block group with a name
|
||||
// Increments indentation, adds newline.
|
||||
virtual iOstream& beginBlock(const word& kw);
|
||||
/// Write end list "]"
|
||||
virtual iOstream& endSquare();
|
||||
|
||||
//- Write begin block group without a name
|
||||
// Increments indentation, adds newline.
|
||||
virtual iOstream& beginBlock();
|
||||
/// Write end entry (';') followed by newline.
|
||||
virtual iOstream& endEntry();
|
||||
|
||||
//- Write end block group
|
||||
// Decrements indentation, adds newline.
|
||||
virtual iOstream& endBlock();
|
||||
/// Write a newLine to stream
|
||||
virtual iOstream& newLine();
|
||||
|
||||
//- Write begin list "("
|
||||
virtual iOstream& beginList();
|
||||
/// Write space to stream
|
||||
virtual iOstream& space(int32 n=1);
|
||||
|
||||
//- Write begin list with keyword "kw ("
|
||||
virtual iOstream& beginList(const word& kw);
|
||||
/// Write the keyword followed by an appropriate indentation
|
||||
virtual iOstream& writeWordKeyword(const word& kw);
|
||||
|
||||
//- Write end list ")"
|
||||
virtual iOstream& endList();
|
||||
|
||||
//- Write begin list "["
|
||||
virtual iOstream& beginSquare();
|
||||
|
||||
//- Write begin list with keyword "kw ["
|
||||
virtual iOstream& beginSquare(const word& kw);
|
||||
|
||||
//- Write end list "]"
|
||||
virtual iOstream& endSquare();
|
||||
|
||||
//- Write end entry (';') followed by newline.
|
||||
virtual iOstream& endEntry();
|
||||
|
||||
//- Write a newLine to stream
|
||||
virtual iOstream& newLine();
|
||||
|
||||
//- Write space to stream
|
||||
virtual iOstream& space(int32 n=1);
|
||||
|
||||
|
||||
//- Write the keyword followed by an appropriate indentation
|
||||
virtual iOstream& writeWordKeyword(const word& kw);
|
||||
|
||||
//- Write a keyword/value entry.
|
||||
template<class T>
|
||||
iOstream& writeWordEntry(const word& key, const T& value)
|
||||
{
|
||||
writeWordKeyword(key) << value;
|
||||
return endEntry();
|
||||
}
|
||||
|
||||
//// Stream state functions
|
||||
|
||||
//- Flush stream
|
||||
virtual void flush() = 0;
|
||||
|
||||
//- Add newline and flush stream
|
||||
virtual void endl() = 0;
|
||||
|
||||
//- Get padding character
|
||||
virtual char fill() const = 0;
|
||||
|
||||
//- Set padding character for formatted field up to field width
|
||||
virtual char fill(const char fillch) = 0;
|
||||
|
||||
//- Get width of output field
|
||||
virtual int width() const = 0;
|
||||
|
||||
//- Set width of output field (and return old width)
|
||||
virtual int width(const int w) = 0;
|
||||
|
||||
//- Get precision of output field
|
||||
virtual int precision() const = 0;
|
||||
|
||||
//- Set precision of output field (and return old precision)
|
||||
virtual int precision(const int p) = 0;
|
||||
/// Write a keyword/value entry.
|
||||
template<class T>
|
||||
iOstream& writeWordEntry(const word& key, const T& value)
|
||||
{
|
||||
writeWordKeyword(key) << value;
|
||||
return endEntry();
|
||||
}
|
||||
|
||||
|
||||
// Member Operators
|
||||
//- Stream state functions
|
||||
|
||||
//- Return a non-const reference to const iOstream
|
||||
// Needed for write functions where the stream argument is temporary:
|
||||
// e.g. thing thisThing(OFstream("thingFileName")());
|
||||
iOstream& operator()() const
|
||||
{
|
||||
return const_cast<iOstream&>(*this);
|
||||
}
|
||||
/// Flush stream
|
||||
virtual void flush() = 0;
|
||||
|
||||
/// Add newline and flush stream
|
||||
virtual void endl() = 0;
|
||||
|
||||
/// Get padding character
|
||||
virtual char fill() const = 0;
|
||||
|
||||
/// Set padding character for formatted field up to field width
|
||||
virtual char fill(const char fillch) = 0;
|
||||
|
||||
/// Get width of output field
|
||||
virtual int width() const = 0;
|
||||
|
||||
/// Set width of output field (and return old width)
|
||||
virtual int width(const int w) = 0;
|
||||
|
||||
/// Get precision of output field
|
||||
virtual int precision() const = 0;
|
||||
|
||||
/// Set precision of output field (and return old precision)
|
||||
virtual int precision(const int p) = 0;
|
||||
|
||||
|
||||
//- Member Operators
|
||||
|
||||
/// Return a non-const reference to const iOstream
|
||||
/// Needed for write functions where the stream argument is temporary:
|
||||
/// e.g. thing thisThing(OFstream("thingFileName")());
|
||||
iOstream& operator()() const
|
||||
{
|
||||
return const_cast<iOstream&>(*this);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
//- An iOstream manipulator
|
||||
/// An iOstream manipulator
|
||||
typedef iOstream& (*iOstreamManip)(iOstream&);
|
||||
|
||||
|
||||
//- operator<< handling for manipulators without arguments
|
||||
/// operator<< handling for manipulators without arguments
|
||||
inline iOstream& operator<<(iOstream& os, iOstreamManip f)
|
||||
{
|
||||
return f(os);
|
||||
}
|
||||
|
||||
//- operator<< handling for manipulators without arguments
|
||||
/// operator<< handling for manipulators without arguments
|
||||
inline iOstream& operator<<(iOstream& os, IOstreamManip f)
|
||||
{
|
||||
f(os);
|
||||
@ -278,21 +286,21 @@ inline iOstream& operator<<(iOstream& os, IOstreamManip f)
|
||||
}
|
||||
|
||||
|
||||
//- Indent stream
|
||||
/// Indent stream
|
||||
inline iOstream& indent(iOstream& os)
|
||||
{
|
||||
os.indent();
|
||||
return os;
|
||||
}
|
||||
|
||||
//- Increment the indent level
|
||||
/// Increment the indent level
|
||||
inline iOstream& incrIndent(iOstream& os)
|
||||
{
|
||||
os.incrIndent();
|
||||
return os;
|
||||
}
|
||||
|
||||
//- Decrement the indent level
|
||||
/// Decrement the indent level
|
||||
inline iOstream& decrIndent(iOstream& os)
|
||||
{
|
||||
os.decrIndent();
|
||||
@ -300,7 +308,7 @@ inline iOstream& decrIndent(iOstream& os)
|
||||
}
|
||||
|
||||
|
||||
//- Flush stream
|
||||
/// Flush stream
|
||||
inline iOstream& flush(iOstream& os)
|
||||
{
|
||||
os.flush();
|
||||
@ -308,7 +316,7 @@ inline iOstream& flush(iOstream& os)
|
||||
}
|
||||
|
||||
|
||||
//- Add newline and flush stream
|
||||
/// Add newline and flush stream
|
||||
inline iOstream& endl(iOstream& os)
|
||||
{
|
||||
os.endl();
|
||||
@ -316,7 +324,7 @@ inline iOstream& endl(iOstream& os)
|
||||
}
|
||||
|
||||
|
||||
//- Write begin block group without a name
|
||||
/// Write begin block group without a name
|
||||
// Increments indentation, adds newline.
|
||||
inline iOstream& beginBlock(iOstream& os)
|
||||
{
|
||||
@ -325,7 +333,7 @@ inline iOstream& beginBlock(iOstream& os)
|
||||
}
|
||||
|
||||
|
||||
//- Write end block group
|
||||
/// Write end block group
|
||||
// Decrements indentation, adds newline.
|
||||
inline iOstream& endBlock(iOstream& os)
|
||||
{
|
||||
@ -334,7 +342,7 @@ inline iOstream& endBlock(iOstream& os)
|
||||
}
|
||||
|
||||
|
||||
//- Write end entry (';') followed by newline.
|
||||
/// Write end entry (';') followed by newline.
|
||||
inline iOstream& endEntry(iOstream& os)
|
||||
{
|
||||
os.endEntry();
|
||||
|
21
src/phasicFlow/structuredData/cells/cells.cpp
Normal file
21
src/phasicFlow/structuredData/cells/cells.cpp
Normal file
@ -0,0 +1,21 @@
|
||||
/*------------------------------- 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 "cells.hpp"
|
259
src/phasicFlow/structuredData/cells/cells.hpp
Normal file
259
src/phasicFlow/structuredData/cells/cells.hpp
Normal file
@ -0,0 +1,259 @@
|
||||
/*------------------------------- 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 __cells_hpp__
|
||||
#define __cells_hpp__
|
||||
|
||||
|
||||
#include "types.hpp"
|
||||
#include "box.hpp"
|
||||
|
||||
namespace pFlow
|
||||
{
|
||||
|
||||
template<typename indexType>
|
||||
class cells
|
||||
{
|
||||
public:
|
||||
|
||||
using CellType = triple<indexType>;
|
||||
|
||||
protected:
|
||||
|
||||
// - domain
|
||||
box domain_{realx3(0.0), realx3(1.0)};
|
||||
|
||||
// - cell size
|
||||
realx3 cellSize_{1,1,1};
|
||||
|
||||
CellType numCells_{1,1,1};
|
||||
|
||||
|
||||
// - protected methods
|
||||
INLINE_FUNCTION_H
|
||||
void calculate()
|
||||
{
|
||||
numCells_ = (domain_.maxPoint()-domain_.minPoint())/cellSize_ + realx3(1.0);
|
||||
numCells_ = max( numCells_ , CellType(static_cast<indexType>(1)) );
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
cells()
|
||||
{}
|
||||
|
||||
INLINE_FUNCTION_H
|
||||
cells(const box& domain, real cellSize)
|
||||
:
|
||||
domain_(domain),
|
||||
cellSize_(cellSize)
|
||||
{
|
||||
calculate();
|
||||
}
|
||||
|
||||
|
||||
INLINE_FUNCTION_H
|
||||
cells(const box& domain, int32 nx, int32 ny, int32 nz)
|
||||
:
|
||||
domain_(domain),
|
||||
cellSize_(
|
||||
(domain_.maxPoint() - domain_.minPoint())/realx3(nx, ny, nz)
|
||||
),
|
||||
numCells_(nx, ny, nz)
|
||||
{}
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
cells(const cells&) = default;
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
cells& operator = (const cells&) = default;
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
cells(cells &&) = default;
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
cells& operator=(cells&&) = default;
|
||||
|
||||
cells getCells()const
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_H
|
||||
void setCellSize(real cellSize)
|
||||
{
|
||||
cellSize_ = cellSize;
|
||||
calculate();
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_H
|
||||
void setCellSize(realx3 cellSize)
|
||||
{
|
||||
cellSize_ = cellSize;
|
||||
calculate();
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
realx3 cellSize()const
|
||||
{
|
||||
return cellSize_;
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
const CellType& numCells()const
|
||||
{
|
||||
return numCells_;
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
indexType nx()const
|
||||
{
|
||||
return numCells_.x();
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
indexType ny()const
|
||||
{
|
||||
return numCells_.y();
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
indexType nz()const
|
||||
{
|
||||
return numCells_.z();
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
int64 totalCells()const
|
||||
{
|
||||
return static_cast<int64>(numCells_.x())*
|
||||
static_cast<int64>(numCells_.y())*
|
||||
static_cast<int64>(numCells_.z());
|
||||
}
|
||||
|
||||
const auto& domain()const
|
||||
{
|
||||
return domain_;
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
CellType pointIndex(const realx3& p)const
|
||||
{
|
||||
return CellType( (p - domain_.minPoint())/cellSize_ );
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
bool pointIndexInDomain(const realx3 p, CellType& index)const
|
||||
{
|
||||
if( !domain_.isInside(p) ) return false;
|
||||
|
||||
index = this->pointIndex(p);
|
||||
return true;
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
bool inDomain(const realx3& p)const
|
||||
{
|
||||
return domain_.isInside(p);
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
bool isInRange(const CellType& cell)const
|
||||
{
|
||||
if(cell.x()<0)return false;
|
||||
if(cell.y()<0)return false;
|
||||
if(cell.z()<0)return false;
|
||||
if(cell.x()>numCells_.x()-1) return false;
|
||||
if(cell.y()>numCells_.y()-1) return false;
|
||||
if(cell.z()>numCells_.z()-1) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
bool isInRange(indexType i, indexType j, indexType k)const
|
||||
{
|
||||
if(i<0)return false;
|
||||
if(j<0)return false;
|
||||
if(k<0)return false;
|
||||
if(i>numCells_.x()-1) return false;
|
||||
if(j>numCells_.y()-1) return false;
|
||||
if(k>numCells_.z()-1) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
void extendBox(
|
||||
const CellType& p1,
|
||||
const CellType& p2,
|
||||
const CellType& p3,
|
||||
indexType extent,
|
||||
CellType& minP,
|
||||
CellType& maxP)const
|
||||
{
|
||||
minP = min( min( p1, p2), p3)-extent;
|
||||
maxP = max( max( p1, p2), p3)+extent;
|
||||
|
||||
minP = bound(minP);
|
||||
maxP = bound(maxP);
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
void extendBox(
|
||||
const realx3& p1,
|
||||
const realx3& p2,
|
||||
const realx3& p3,
|
||||
real extent,
|
||||
realx3& minP,
|
||||
realx3& maxP)const
|
||||
{
|
||||
minP = min(min(p1,p2),p3) - extent*cellSize_ ;
|
||||
maxP = max(max(p1,p2),p3) + extent*cellSize_ ;
|
||||
|
||||
minP = bound(minP);
|
||||
maxP = bound(maxP);
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
CellType bound(CellType p)const
|
||||
{
|
||||
return CellType(
|
||||
min( numCells_.x()-1, max(0,p.x())),
|
||||
min( numCells_.y()-1, max(0,p.y())),
|
||||
min( numCells_.z()-1, max(0,p.z()))
|
||||
);
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
realx3 bound(realx3 p)const
|
||||
{
|
||||
return realx3(
|
||||
min( domain_.maxPoint().x(), max(domain_.minPoint().x(),p.x())),
|
||||
min( domain_.maxPoint().y(), max(domain_.minPoint().y(),p.y())),
|
||||
min( domain_.maxPoint().z(), max(domain_.minPoint().z(),p.z()))
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endif
|
@ -0,0 +1,75 @@
|
||||
/*------------------------------- 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 "mortonIndexing.hpp"
|
||||
#include "cells.hpp"
|
||||
|
||||
|
||||
bool pFlow::getSortedIndex(
|
||||
box boundingBox,
|
||||
real dx,
|
||||
range activeRange,
|
||||
ViewType1D<realx3> pos,
|
||||
ViewType1D<int8> flag,
|
||||
int32IndexContainer& sortedIndex)
|
||||
{
|
||||
|
||||
// obtain the morton code of the particles
|
||||
cells<size_t> allCells( boundingBox, dx);
|
||||
int32IndexContainer index(activeRange.first, activeRange.second);
|
||||
|
||||
ViewType1D<uint64_t> mortonCode("mortonCode", activeRange.second);
|
||||
|
||||
using rpMorton =
|
||||
Kokkos::RangePolicy<Kokkos::IndexType<int32>>;
|
||||
int32 numActive = 0;
|
||||
Kokkos::parallel_reduce
|
||||
(
|
||||
"mortonIndexing::getIndex::morton",
|
||||
rpMorton(activeRange.first, activeRange.second),
|
||||
LAMBDA_HD(int32 i, int32& sumToUpdate){
|
||||
if( flag[i] == 1 ) // active point
|
||||
{
|
||||
auto cellInd = allCells.pointIndex(pos[i]);
|
||||
mortonCode[i] = xyzToMortonCode64(cellInd.x(), cellInd.y(), cellInd.z());
|
||||
sumToUpdate++;
|
||||
}else
|
||||
{
|
||||
mortonCode[i] = xyzToMortonCode64(-1,-1,-1);
|
||||
}
|
||||
},
|
||||
numActive
|
||||
);
|
||||
|
||||
|
||||
permuteSort(
|
||||
mortonCode,
|
||||
activeRange.first,
|
||||
activeRange.second,
|
||||
index.deviceView(),
|
||||
0 );
|
||||
index.modifyOnDevice();
|
||||
index.setSize(numActive);
|
||||
index.syncViews();
|
||||
|
||||
sortedIndex = index;
|
||||
|
||||
return true;
|
||||
}
|
@ -0,0 +1,88 @@
|
||||
/*------------------------------- 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 __mortonIndexing_hpp__
|
||||
#define __mortonIndexing_hpp__
|
||||
|
||||
#include "types.hpp"
|
||||
#include "box.hpp"
|
||||
#include "indexContainer.hpp"
|
||||
|
||||
namespace pFlow
|
||||
{
|
||||
|
||||
bool getSortedIndex(
|
||||
box boundingBox,
|
||||
real dx,
|
||||
range activeRange,
|
||||
ViewType1D<realx3> pos,
|
||||
ViewType1D<int8> flag,
|
||||
int32IndexContainer& sortedIndex);
|
||||
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
uint64_t splitBy3(const uint64_t val){
|
||||
uint64_t x = val;
|
||||
x = (x | x << 32) & 0x1f00000000ffff;
|
||||
x = (x | x << 16) & 0x1f0000ff0000ff;
|
||||
x = (x | x << 8) & 0x100f00f00f00f00f;
|
||||
x = (x | x << 4) & 0x10c30c30c30c30c3;
|
||||
x = (x | x << 2) & 0x1249249249249249;
|
||||
return x;
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
uint64_t xyzToMortonCode64(uint64_t x, uint64_t y, uint64_t z)
|
||||
{
|
||||
return splitBy3(x) | (splitBy3(y) << 1) | (splitBy3(z) << 2);
|
||||
}
|
||||
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
uint64_t getThirdBits(uint64_t x)
|
||||
{
|
||||
x = x & 0x9249249249249249;
|
||||
x = (x | (x >> 2)) & 0x30c30c30c30c30c3;
|
||||
x = (x | (x >> 4)) & 0xf00f00f00f00f00f;
|
||||
x = (x | (x >> 8)) & 0x00ff0000ff0000ff;
|
||||
x = (x | (x >> 16)) & 0xffff00000000ffff;
|
||||
x = (x | (x >> 32)) & 0x00000000ffffffff;
|
||||
return x;
|
||||
|
||||
}
|
||||
|
||||
INLINE_FUNCTION_HD
|
||||
void mortonCode64Toxyz(uint64_t morton, uint64_t& x, uint64_t& y, uint64_t& z)
|
||||
{
|
||||
x = getThirdBits(morton);
|
||||
y = getThirdBits(morton >> 1);
|
||||
z = getThirdBits(morton >> 2);
|
||||
}
|
||||
|
||||
struct indexMorton
|
||||
{
|
||||
size_t morton;
|
||||
size_t index;
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
#endif //__mortonIndexing_hpp__
|
@ -24,7 +24,8 @@ Licence:
|
||||
#include "setFieldList.hpp"
|
||||
#include "error.hpp"
|
||||
#include "iOstream.hpp"
|
||||
#include "Time.hpp"
|
||||
//#include "Time.hpp"
|
||||
#include "mortonIndexing.hpp"
|
||||
|
||||
FUNCTION_H
|
||||
bool pFlow::pointStructure::evaluatePointStructure()
|
||||
@ -231,6 +232,55 @@ bool pFlow::pointStructure::allActive()const
|
||||
return numActivePoints_ == numPoints_;
|
||||
}
|
||||
|
||||
FUNCTION_H
|
||||
bool pFlow::pointStructure::mortonSortPoints(const box& domain, real dx)
|
||||
{
|
||||
if( !getSortedIndex(
|
||||
domain,
|
||||
dx,
|
||||
activeRange_,
|
||||
pointPosition_.deviceVectorAll(),
|
||||
pointFlag_.deviceVectorAll(),
|
||||
mortonSortedIndex_) )
|
||||
{
|
||||
fatalErrorInFunction<<"failed to perform morton sorting!"<<endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
pointPosition_.sortItems(mortonSortedIndex_);
|
||||
pointFlag_.sortItems(mortonSortedIndex_);
|
||||
|
||||
auto oldSize = size();
|
||||
auto oldCapacity = capacity();
|
||||
auto oldRange = activeRange();
|
||||
|
||||
// update size, range, capacity
|
||||
setNumMaxPoints();
|
||||
activeRange_ = {0, static_cast<int>(mortonSortedIndex_.size())};
|
||||
numActivePoints_ = mortonSortedIndex_.size();
|
||||
|
||||
eventMessage msg(eventMessage::REARRANGE);
|
||||
|
||||
if(oldSize != size() )
|
||||
{
|
||||
msg.add(eventMessage::SIZE_CHANGED);
|
||||
}
|
||||
|
||||
if(oldCapacity != capacity())
|
||||
{
|
||||
msg.add(eventMessage::CAP_CHANGED);
|
||||
}
|
||||
|
||||
if( oldRange != activeRange_)
|
||||
{
|
||||
msg.add(eventMessage::RANGE_CHANGED);
|
||||
}
|
||||
|
||||
// notify all the registered objects except the exclusionList
|
||||
if( !this->notify(msg) ) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
FUNCTION_H
|
||||
size_t pFlow::pointStructure::markDeleteOutOfBox(const box& domain)
|
||||
@ -306,7 +356,6 @@ pFlow::uniquePtr<pFlow::int32IndexContainer> pFlow::pointStructure::insertPoints
|
||||
)
|
||||
{
|
||||
|
||||
|
||||
auto numNew = pos.size();
|
||||
if( numNew==0)
|
||||
{
|
||||
@ -359,8 +408,8 @@ pFlow::uniquePtr<pFlow::int32IndexContainer> pFlow::pointStructure::insertPoints
|
||||
}
|
||||
|
||||
// changes the active rage based on the new inserted points
|
||||
activeRange_ = { min(activeRange_.first, minInd ),
|
||||
max(activeRange_.second, maxInd+1)};
|
||||
activeRange_ = { static_cast<int>(min(activeRange_.first, minInd )),
|
||||
static_cast<int>(max(activeRange_.second, maxInd+1))};
|
||||
|
||||
numActivePoints_ += numNew;
|
||||
|
||||
@ -400,7 +449,7 @@ bool pFlow::pointStructure::readPointStructure
|
||||
return false;
|
||||
}
|
||||
|
||||
if(! pointFlag_.read(is))
|
||||
if(! pointFlag_.read(is, true))
|
||||
{
|
||||
ioErrorInFile(is.name(), is.lineNumber())<<
|
||||
"Error in reading pointFlag in pointStructure \n";
|
||||
|
@ -163,8 +163,11 @@ protected:
|
||||
// index range of active points (half-open range)
|
||||
range activeRange_;
|
||||
|
||||
// - index vector for points to be inserted
|
||||
int32IndexContainer tobeInsertedIndex_;
|
||||
/// Index vector for points to be inserted
|
||||
int32IndexContainer tobeInsertedIndex_;
|
||||
|
||||
/// Sorted index of particles based on morton code
|
||||
int32IndexContainer mortonSortedIndex_;
|
||||
|
||||
|
||||
//// - protected methods
|
||||
@ -298,6 +301,10 @@ public:
|
||||
FUNCTION_H
|
||||
virtual bool updateForDelete();
|
||||
|
||||
|
||||
FUNCTION_H
|
||||
virtual bool mortonSortPoints(const box& domain, real dx);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// - const access to points to be newly inserted
|
||||
@ -320,6 +327,13 @@ public:
|
||||
}
|
||||
|
||||
|
||||
FUNCTION_H
|
||||
auto mortonSortedIndex()const
|
||||
{
|
||||
return mortonSortedIndex_;
|
||||
}
|
||||
|
||||
|
||||
// - update data structure by inserting/setting new points
|
||||
// Notifies all the fields in the registered list of data structure
|
||||
// and exclude the fields that re in the exclusionList
|
||||
|
@ -214,14 +214,12 @@ bool pFlow::multiTriSurface::readMultiTriSurface
|
||||
{
|
||||
if( !readTriSurface(is) )return false;
|
||||
|
||||
is >> lastPointIndex_;
|
||||
if(!is.check(FUNCTION_NAME) ) return false;
|
||||
// from current position
|
||||
if(!lastPointIndex_.read(is, true)) return false;
|
||||
|
||||
is >> lastVertexIndex_;
|
||||
if(!is.check(FUNCTION_NAME) ) return false;
|
||||
if(!lastVertexIndex_.read(is, true) ) return false;
|
||||
|
||||
is >> surfaceNames_;
|
||||
if( !is.check(FUNCTION_NAME)) return false;
|
||||
if( !surfaceNames_.read(is, true)) return false;
|
||||
|
||||
calculateVars();
|
||||
|
||||
|
@ -193,14 +193,16 @@ bool pFlow::triSurface::readTriSurface
|
||||
)
|
||||
{
|
||||
|
||||
std::cout<<"triSurface file is binary "<< is.isBinary()<<std::endl;
|
||||
|
||||
is.fatalCheck(FUNCTION_NAME);
|
||||
|
||||
is >> points_;
|
||||
is.fatalCheck(FUNCTION_NAME);
|
||||
|
||||
is >> vertices_;
|
||||
is.fatalCheck(FUNCTION_NAME);
|
||||
|
||||
// from start of file
|
||||
if(!points_.read(is)) return false;
|
||||
|
||||
// from the current position
|
||||
if(!vertices_.read(is, true)) return false;
|
||||
|
||||
if( !check() )
|
||||
{
|
||||
ioErrorInFile( is.name(), is.lineNumber() ) <<
|
||||
|
@ -2,9 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName interaction;
|
||||
objectType dicrionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
materials (wallMat); // a list of materials names
|
||||
densities (1000.0); // density of materials [kg/m3]
|
||||
|
@ -2,9 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName geometryDict;
|
||||
objectType dictionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
// motion model: rotating object around an axis
|
||||
motionModel rotatingAxisMotion;
|
||||
|
@ -4,6 +4,8 @@
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName settingsDict;
|
||||
objectType dictionary;;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
run inclinedScrewConveyor;
|
||||
|
||||
@ -31,6 +33,8 @@ domain
|
||||
|
||||
integrationMethod AdamsBashforth2; // integration method
|
||||
|
||||
writeFormat ascii;
|
||||
|
||||
timersReport Yes; // report timers?
|
||||
|
||||
timersReportInterval 0.01; // time interval for reporting timers
|
||||
|
@ -2,9 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName interaction;
|
||||
objectType dicrionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
materials (prop1); // a list of materials names
|
||||
densities (1000.0); // density of materials [kg/m3]
|
||||
|
@ -2,10 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName particleInsertion;
|
||||
objectType dicrionary;
|
||||
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
active no; // is insertion active?
|
||||
|
||||
|
@ -2,9 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName sphereDict;
|
||||
objectType sphereShape;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
names (smallSphere largeSphere); // names of shapes
|
||||
diameters (0.003 0.005); // diameter of shapes
|
||||
|
@ -2,9 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName geometryDict;
|
||||
objectType dictionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
// motion model: rotating object around an axis
|
||||
motionModel rotatingAxisMotion;
|
||||
|
@ -2,9 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName particlesDict;
|
||||
objectType dictionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
// positions particles
|
||||
positionParticles
|
||||
|
@ -4,6 +4,8 @@
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName postprocessDict;
|
||||
objectType dictionary;;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
rectMesh
|
||||
{
|
||||
|
@ -4,6 +4,8 @@
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName settingsDict;
|
||||
objectType dictionary;;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
run rotatingDrumSmall;
|
||||
|
||||
@ -31,6 +33,8 @@ domain
|
||||
|
||||
integrationMethod AdamsBashforth2; // integration method
|
||||
|
||||
writeFormat ascii;
|
||||
|
||||
timersReport Yes; // report timers?
|
||||
|
||||
timersReportInterval 0.01; // time interval for reporting timers
|
||||
|
@ -4,7 +4,9 @@
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName interaction;
|
||||
objectType dicrionary;
|
||||
/*----------------------------------------------------------------------------*/
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
// a list of materials names
|
||||
materials (lightMat heavyMat wallMat);
|
||||
// density of materials [kg/m3]
|
||||
|
@ -4,6 +4,7 @@
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName particleInsertion;
|
||||
objectType dicrionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
// is insertion active?
|
||||
|
@ -4,7 +4,9 @@
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName sphereDict;
|
||||
objectType sphereShape;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
// names of shapes
|
||||
names (smallSphere largeSphere);
|
||||
// diameter of shapes (m)
|
||||
|
@ -4,7 +4,8 @@
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName geometryDict;
|
||||
objectType dictionary;
|
||||
/* ------------------------------------------------------------------------- */
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
// motion model: all surfaces are fixed
|
||||
motionModel rotatingAxisMotion;
|
||||
|
@ -4,7 +4,9 @@
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName particlesDict;
|
||||
objectType dictionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
setFields
|
||||
{
|
||||
defaultValue
|
||||
|
@ -2,24 +2,30 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName settingsDict;
|
||||
objectType dictionary;;
|
||||
objectType dictionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
run RotatingDrumwithBaffles;
|
||||
|
||||
// time step for integration (s)
|
||||
dt 0.00001;
|
||||
dt 0.00001;
|
||||
|
||||
// start time for simulation
|
||||
startTime 0;
|
||||
startTime 0;
|
||||
|
||||
// end time for simulation
|
||||
endTime 10;
|
||||
endTime 10;
|
||||
|
||||
// time interval for saving the simulation
|
||||
saveInterval 0.05;
|
||||
saveInterval 0.05;
|
||||
|
||||
// maximum number of digits for time folder
|
||||
timePrecision 6;
|
||||
timePrecision 6;
|
||||
|
||||
// gravity vector (m/s2)
|
||||
g (0 -9.8 0);
|
||||
g (0 -9.8 0);
|
||||
|
||||
/*Simulation domain*/
|
||||
/* Every particles that goes outside this domain is deleted.*/
|
||||
@ -28,9 +34,15 @@ domain
|
||||
min (-0.328 0.095 -0.025);
|
||||
max (-0.068 0.355 0.125);
|
||||
}
|
||||
|
||||
// integration method
|
||||
integrationMethod AdamsBashforth3;
|
||||
integrationMethod AdamsBashforth3;
|
||||
|
||||
// binary or ascii for saving data
|
||||
writeFormat ascii;
|
||||
|
||||
// report timers?
|
||||
timersReport Yes;
|
||||
timersReport Yes;
|
||||
|
||||
// time interval for reporting timers
|
||||
timersReportInterval 0.01;
|
||||
timersReportInterval 0.01;
|
||||
|
@ -4,7 +4,8 @@
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName interaction;
|
||||
objectType dicrionary;
|
||||
/* ------------------------------------------------------------------------- */
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
// a list of materials names
|
||||
materials (wallMat lightMat);
|
||||
|
@ -4,7 +4,8 @@
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName particleInsertion;
|
||||
objectType dicrionary;
|
||||
/* ------------------------------------------------------------------------- */
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
// is insertion active?
|
||||
active yes;
|
||||
|
@ -4,7 +4,8 @@
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName sphereDict;
|
||||
objectType sphereShape;
|
||||
/* ------------------------------------------------------------------------- */
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
// names of particles
|
||||
names (smallSphere largeSphere);
|
||||
|
@ -4,7 +4,8 @@
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName geometryDict;
|
||||
objectType dictionary;
|
||||
/* ------------------------------------------------------------------------- */
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
// motion model: rotating object around an axis
|
||||
motionModel rotatingAxisMotion;
|
||||
|
@ -4,7 +4,8 @@
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName particlesDict;
|
||||
objectType dictionary;
|
||||
/* ------------------------------------------------------------------------- */
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
setFields
|
||||
{
|
||||
|
@ -4,7 +4,8 @@
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName settingsDict;
|
||||
objectType dictionary;
|
||||
/* ------------------------------------------------------------------------- */
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
run rotatingVblender;
|
||||
|
||||
@ -40,6 +41,8 @@ domain
|
||||
// integration method
|
||||
integrationMethod AdamsBashforth2;
|
||||
|
||||
writeFormat ascii;
|
||||
|
||||
// report timers?
|
||||
timersReport Yes;
|
||||
|
||||
|
@ -2,9 +2,11 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName interaction;
|
||||
objectType dicrionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
objectName interaction;
|
||||
objectType dicrionary;
|
||||
|
||||
materials (prop1); // a list of materials names
|
||||
densities (1000.0); // density of materials [kg/m3]
|
||||
|
@ -2,9 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName particleInsertion;
|
||||
objectType dicrionary;
|
||||
objectName particleInsertion;
|
||||
objectType dicrionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
active no; // is insertion active?
|
||||
|
@ -2,9 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName sphereDict;
|
||||
objectType sphereShape;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
names (smallSphere largeSphere); // names of shapes
|
||||
diameters (0.003 0.005); // diameter of shapes
|
||||
|
@ -2,9 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName geometryDict;
|
||||
objectType dictionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
// motion model: rotating object around an axis
|
||||
motionModel rotatingAxisMotion;
|
||||
|
@ -2,9 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName particlesDict;
|
||||
objectType dictionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
// positions particles
|
||||
positionParticles
|
||||
|
@ -3,7 +3,10 @@
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName settingsDict;
|
||||
objectType dictionary;;
|
||||
objectType dictionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
run binarySystemofParticles;
|
||||
|
||||
@ -31,6 +34,8 @@ domain
|
||||
|
||||
integrationMethod AdamsBashforth2; // integration method
|
||||
|
||||
writeFormat ascii;
|
||||
|
||||
timersReport Yes; // report timers?
|
||||
|
||||
timersReportInterval 0.01; // time interval for reporting timers
|
||||
|
@ -2,9 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName interaction;
|
||||
objectType dicrionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
materials (lightMat heavyMat wallMat); // a list of materials names
|
||||
densities (1000 1500.0 2500); // density of materials [kg/m3]
|
||||
|
@ -2,10 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName particleInsertion;
|
||||
objectType dicrionary;
|
||||
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
active yes; // is insertion active?
|
||||
|
||||
|
@ -2,9 +2,10 @@
|
||||
| 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
|
||||
|
@ -2,9 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName geometryDict;
|
||||
objectType dictionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
// motion model: all surfaces are fixed
|
||||
motionModel fixedWall;
|
||||
|
@ -2,9 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName particlesDict;
|
||||
objectType dictionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
setFields
|
||||
{
|
||||
|
@ -3,7 +3,9 @@
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName settingsDict;
|
||||
objectType dictionary;;
|
||||
objectType dictionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
run layerdSiloFilling;
|
||||
|
||||
@ -31,6 +33,8 @@ domain
|
||||
|
||||
integrationMethod AdamsBashforth3; // integration method
|
||||
|
||||
writeFormat ascii;
|
||||
|
||||
timersReport Yes; // report timers?
|
||||
|
||||
timersReportInterval 0.01; // time interval for reporting timers
|
||||
|
@ -2,9 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName interaction;
|
||||
objectType dicrionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
materials (glassMat wallMat); // a list of materials names
|
||||
densities (2500.0 2500); // density of materials [kg/m3]
|
||||
|
@ -2,10 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName particleInsertion;
|
||||
objectType dicrionary;
|
||||
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
active no; // is insertion active?
|
||||
|
||||
|
@ -2,9 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName sphereDict;
|
||||
objectType sphereShape;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
names (glassBead); // names of shapes
|
||||
diameters (0.003); // diameter of shapes
|
||||
|
@ -2,9 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName geometryDict;
|
||||
objectType dictionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
// motion model: rotating object around an axis
|
||||
motionModel rotatingAxisMotion;
|
||||
|
@ -2,9 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName particlesDict;
|
||||
objectType dictionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
setFields
|
||||
{
|
||||
|
@ -4,6 +4,8 @@
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName settingsDict;
|
||||
objectType dictionary;;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
run rotatingDrumMedium;
|
||||
|
||||
@ -31,6 +33,8 @@ domain
|
||||
|
||||
integrationMethod AdamsBashforth3; // integration method
|
||||
|
||||
writeFormat binary;
|
||||
|
||||
timersReport Yes; // report timers?
|
||||
|
||||
timersReportInterval 0.01; // time interval for reporting timers
|
||||
|
@ -2,9 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName interaction;
|
||||
objectType dicrionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
materials (prop1); // a list of materials names
|
||||
densities (1000.0); // density of materials [kg/m3]
|
||||
|
@ -2,10 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName particleInsertion;
|
||||
objectType dicrionary;
|
||||
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
active no; // is insertion active?
|
||||
|
||||
|
@ -2,9 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName sphereDict;
|
||||
objectType sphereShape;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
names (sphere1); // names of shapes
|
||||
diameters (0.004); // diameter of shapes
|
||||
|
@ -2,9 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName geometryDict;
|
||||
objectType dictionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
// motion model: rotating object around an axis
|
||||
motionModel rotatingAxisMotion;
|
||||
|
@ -2,9 +2,10 @@
|
||||
| phasicFlow File |
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
|
||||
objectName particlesDict;
|
||||
objectType dictionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
setFields
|
||||
{
|
||||
|
@ -3,7 +3,9 @@
|
||||
| copyright: www.cemf.ir |
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName settingsDict;
|
||||
objectType dictionary;;
|
||||
objectType dictionary;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
run rotatingDrumSmall;
|
||||
|
||||
@ -31,6 +33,8 @@ domain
|
||||
|
||||
integrationMethod AdamsBashforth2; // integration method
|
||||
|
||||
writeFormat ascii;
|
||||
|
||||
timersReport Yes; // report timers?
|
||||
|
||||
timersReportInterval 0.01; // time interval for reporting timers
|
||||
|
@ -4,7 +4,8 @@
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName interaction;
|
||||
objectType dicrionary;
|
||||
/* ------------------------------------------------------------------------- */
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
// a list of materials names
|
||||
materials (solidProperty);
|
||||
|
@ -4,7 +4,8 @@
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName particleInsertion;
|
||||
objectType dicrionary;
|
||||
/* ------------------------------------------------------------------------- */
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
// is insertion active?
|
||||
active no;
|
||||
|
@ -4,7 +4,8 @@
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName sphereDict;
|
||||
objectType sphereShape;
|
||||
/* ------------------------------------------------------------------------- */
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
// name of shapes
|
||||
names (sphere1);
|
||||
|
@ -4,7 +4,8 @@
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName geometryDict;
|
||||
objectType dictionary;
|
||||
/* ------------------------------------------------------------------------- */
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
// motion model: rotating object around an axis
|
||||
motionModel rotatingAxisMotion;
|
||||
|
@ -4,7 +4,9 @@
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName particlesDict;
|
||||
objectType dictionary;
|
||||
/* ------------------------------------------------------------------------- */
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
setFields
|
||||
{
|
||||
/*
|
||||
|
@ -4,7 +4,9 @@
|
||||
\* ------------------------------------------------------------------------- */
|
||||
objectName settingsDict;
|
||||
objectType dictionary;;
|
||||
fileFormat ASCII;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
run toteBlender;
|
||||
|
||||
// time step for integration (s)
|
||||
@ -36,6 +38,8 @@ domain
|
||||
// integration method
|
||||
integrationMethod AdamsMoulton4;
|
||||
|
||||
writeFormat ascii;
|
||||
|
||||
// report timers?
|
||||
timersReport Yes;
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user