Push after adding PostptocessData lib
This commit is contained in:
parent
c78ab398f6
commit
8e87333973
|
@ -13,3 +13,5 @@ add_subdirectory(Interaction)
|
||||||
|
|
||||||
add_subdirectory(MotionModel)
|
add_subdirectory(MotionModel)
|
||||||
|
|
||||||
|
add_subdirectory(PostprocessData)
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,7 @@ repository/Time/Time.cpp
|
||||||
repository/Time/timeControl.cpp
|
repository/Time/timeControl.cpp
|
||||||
repository/Time/baseTimeControl.cpp
|
repository/Time/baseTimeControl.cpp
|
||||||
repository/systemControl/systemControl.cpp
|
repository/systemControl/systemControl.cpp
|
||||||
|
repository/systemControl/auxFunctions/auxFunctions.cpp
|
||||||
repository/systemControl/dynamicLinkLibs.cpp
|
repository/systemControl/dynamicLinkLibs.cpp
|
||||||
|
|
||||||
commandLine/commandLine.cpp
|
commandLine/commandLine.cpp
|
||||||
|
|
|
@ -79,6 +79,27 @@ public:
|
||||||
/// List of varibales names
|
/// List of varibales names
|
||||||
const wordList& names()const;
|
const wordList& names()const;
|
||||||
|
|
||||||
|
template<typename T, typename... Args>
|
||||||
|
void emplaceBackOrReplace(const word& name, Args&&... args)
|
||||||
|
{
|
||||||
|
if( contains(name))
|
||||||
|
{
|
||||||
|
int32 i = names_.findi(name);
|
||||||
|
types_[i] = getTypeName<T>();
|
||||||
|
anyList_.pos(i)->reset();
|
||||||
|
anyList_.pos(i)-> emplace<T>(std::forward<Args>(args)...);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
names_.push_back(name);
|
||||||
|
types_.push_back(getTypeName<T>());
|
||||||
|
anyList_.emplace_back(
|
||||||
|
std::in_place_type<T>,
|
||||||
|
std::forward<Args>(args)...);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/// Create variable using constructor in-place
|
/// Create variable using constructor in-place
|
||||||
template<typename T, typename... Args>
|
template<typename T, typename... Args>
|
||||||
reference emplaceBack(const word& name, Args&&... args)
|
reference emplaceBack(const word& name, Args&&... args)
|
||||||
|
|
|
@ -0,0 +1,114 @@
|
||||||
|
/*------------------------------- 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 __dictionaryList_hpp__
|
||||||
|
#define __dictionaryList_hpp__
|
||||||
|
|
||||||
|
#include "List.hpp"
|
||||||
|
#include "dictionary.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
namespace pFlow
|
||||||
|
{
|
||||||
|
|
||||||
|
class dictionaryList
|
||||||
|
:
|
||||||
|
public List<dictionary>
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
|
||||||
|
const dictionary& parrent_;
|
||||||
|
|
||||||
|
word name_;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
TypeInfoNV("dictionaryList");
|
||||||
|
|
||||||
|
dictionaryList(const word& name, const dictionary& parrent)
|
||||||
|
:
|
||||||
|
List<dictionary>(),
|
||||||
|
parrent_(parrent),
|
||||||
|
name_(name)
|
||||||
|
{}
|
||||||
|
|
||||||
|
dictionaryList(const dictionaryList&) = default;
|
||||||
|
|
||||||
|
dictionaryList(dictionaryList&&) = default;
|
||||||
|
|
||||||
|
dictionaryList& operator = (const dictionaryList&) = default;
|
||||||
|
|
||||||
|
dictionaryList& operator = (dictionaryList&&) = default;
|
||||||
|
|
||||||
|
~dictionaryList() = default;
|
||||||
|
|
||||||
|
const word& name()const
|
||||||
|
{
|
||||||
|
return name_;
|
||||||
|
}
|
||||||
|
|
||||||
|
const word globalName()const
|
||||||
|
{
|
||||||
|
return parrent_.globalName();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<dictionary>& dicts()
|
||||||
|
{
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
const List<dictionary>& dicts()const
|
||||||
|
{
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
const dictionary& parrent()const
|
||||||
|
{
|
||||||
|
return parrent_;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
inline
|
||||||
|
dictionaryList readDictList(const word& name, const dictionary& dict)
|
||||||
|
{
|
||||||
|
if(!dict.containsDataEntry(name))
|
||||||
|
{
|
||||||
|
fatalErrorInFunction
|
||||||
|
<<"data entry: "<< name
|
||||||
|
<<" does not exist in dictionary "<< dict.globalName()<<endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
dictionaryList allDicts(name, dict);
|
||||||
|
auto dicts = dict.getVal<List<dictionary>>(name);
|
||||||
|
for(auto& d:dicts)
|
||||||
|
{
|
||||||
|
allDicts.emplace_back(d.name(), dict, d);
|
||||||
|
}
|
||||||
|
|
||||||
|
return allDicts;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -47,6 +47,7 @@ const inline char* const contactSearchFile__ = "contactSearch";
|
||||||
const inline char* const propertyFile__ = "interaction";
|
const inline char* const propertyFile__ = "interaction";
|
||||||
const inline char* const interactionFile__ = "interaction";
|
const inline char* const interactionFile__ = "interaction";
|
||||||
const inline char* const postprocessFile__ = "postprocessDict";
|
const inline char* const postprocessFile__ = "postprocessDict";
|
||||||
|
const inline char* const postprocessDataFiel__ = "postprocessDataDict";
|
||||||
|
|
||||||
const inline char* const uniform__ = "uniform";
|
const inline char* const uniform__ = "uniform";
|
||||||
const inline char* const nonUniform__ = "nonUniform";
|
const inline char* const nonUniform__ = "nonUniform";
|
||||||
|
|
|
@ -21,14 +21,24 @@ Licence:
|
||||||
#include "baseTimeControl.hpp"
|
#include "baseTimeControl.hpp"
|
||||||
#include "timeInfo.hpp"
|
#include "timeInfo.hpp"
|
||||||
|
|
||||||
pFlow::baseTimeControl::baseTimeControl
|
void pFlow::baseTimeControl::setTimeControl
|
||||||
(
|
(
|
||||||
const dictionary &dict,
|
timeValue startTime,
|
||||||
const word& intervalPrefix,
|
timeValue endTime,
|
||||||
timeValue defStartTime
|
timeValue interval,
|
||||||
|
const word &intervalPrefix
|
||||||
)
|
)
|
||||||
:
|
{
|
||||||
intervalPrefix_(intervalPrefix)
|
isTimeStep_ = false;
|
||||||
|
intervalPrefix_ = intervalPrefix;
|
||||||
|
rRange_ = stridedRange<timeValue>(startTime, endTime, interval);
|
||||||
|
}
|
||||||
|
|
||||||
|
pFlow::baseTimeControl::baseTimeControl(
|
||||||
|
const dictionary &dict,
|
||||||
|
const word &intervalPrefix,
|
||||||
|
timeValue defStartTime)
|
||||||
|
: intervalPrefix_(intervalPrefix)
|
||||||
{
|
{
|
||||||
auto tControl = dict.getVal<word>("timeControl");
|
auto tControl = dict.getVal<word>("timeControl");
|
||||||
if(tControl == "timeStep")
|
if(tControl == "timeStep")
|
||||||
|
@ -119,6 +129,24 @@ pFlow::baseTimeControl::baseTimeControl(int32 start, int32 end, int32 stride, co
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pFlow::baseTimeControl::baseTimeControl
|
||||||
|
(
|
||||||
|
timeValue start,
|
||||||
|
timeValue end,
|
||||||
|
timeValue stride,
|
||||||
|
const word &intervalPrefix
|
||||||
|
)
|
||||||
|
:
|
||||||
|
isTimeStep_(false),
|
||||||
|
rRange_(
|
||||||
|
start, end, stride
|
||||||
|
),
|
||||||
|
intervalPrefix_(
|
||||||
|
intervalPrefix.size()==0uL? word("interval"): intervalPrefix+"Interval"
|
||||||
|
)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
bool pFlow::baseTimeControl::eventTime(uint32 iter, timeValue t, timeValue dt) const
|
bool pFlow::baseTimeControl::eventTime(uint32 iter, timeValue t, timeValue dt) const
|
||||||
{
|
{
|
||||||
if(isTimeStep_)
|
if(isTimeStep_)
|
||||||
|
|
|
@ -32,13 +32,21 @@ class baseTimeControl
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
||||||
bool isTimeStep_;
|
bool isTimeStep_;
|
||||||
|
|
||||||
int32StridedRagne iRange_;
|
int32StridedRagne iRange_;
|
||||||
|
|
||||||
stridedRange<timeValue> rRange_;
|
stridedRange<timeValue> rRange_;
|
||||||
|
|
||||||
const word intervalPrefix_;
|
word intervalPrefix_;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
void setTimeControl(
|
||||||
|
timeValue startTime,
|
||||||
|
timeValue endTime,
|
||||||
|
timeValue interval,
|
||||||
|
const word& intervalPrefix);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -61,6 +69,31 @@ public:
|
||||||
const word& intervalPrefix = ""
|
const word& intervalPrefix = ""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
baseTimeControl(
|
||||||
|
timeValue start,
|
||||||
|
timeValue end,
|
||||||
|
timeValue stride,
|
||||||
|
const word& intervalPrefix = ""
|
||||||
|
);
|
||||||
|
|
||||||
|
baseTimeControl(
|
||||||
|
const baseTimeControl& other
|
||||||
|
) = default;
|
||||||
|
|
||||||
|
baseTimeControl(
|
||||||
|
baseTimeControl&& other
|
||||||
|
) = default;
|
||||||
|
|
||||||
|
baseTimeControl& operator=(
|
||||||
|
const baseTimeControl& other
|
||||||
|
) = default;
|
||||||
|
|
||||||
|
baseTimeControl& operator=(
|
||||||
|
baseTimeControl&& other
|
||||||
|
) = default;
|
||||||
|
|
||||||
|
~baseTimeControl() = default;
|
||||||
|
|
||||||
inline bool isTimeStep() const
|
inline bool isTimeStep() const
|
||||||
{
|
{
|
||||||
return isTimeStep_;
|
return isTimeStep_;
|
||||||
|
|
|
@ -120,6 +120,16 @@ public:
|
||||||
return startTime_;
|
return startTime_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
timeValue endTime()const
|
||||||
|
{
|
||||||
|
return endTime_;
|
||||||
|
}
|
||||||
|
|
||||||
|
timeValue saveInterval()const
|
||||||
|
{
|
||||||
|
return saveInterval_;
|
||||||
|
}
|
||||||
|
|
||||||
word timeName()const;
|
word timeName()const;
|
||||||
|
|
||||||
timeValue currentTime() const
|
timeValue currentTime() const
|
||||||
|
|
|
@ -106,6 +106,12 @@ public:
|
||||||
return real2FixedStripZeros(currentTime_, presicion_);
|
return real2FixedStripZeros(currentTime_, presicion_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
word prevTimeName()const
|
||||||
|
{
|
||||||
|
return real2FixedStripZeros( max(currentTime_-dt_, timeValue(0)), presicion_);
|
||||||
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
uint32 precision()
|
uint32 precision()
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
/*------------------------------- 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 "auxFunctions.hpp"
|
||||||
|
#include "systemControl.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
pFlow::uniquePtr<pFlow::auxFunctions>
|
||||||
|
pFlow::auxFunctions::create(const systemControl& control)
|
||||||
|
{
|
||||||
|
const auto& setDict = control.settingsDict();
|
||||||
|
|
||||||
|
if( !setDict.containsDataEntry("auxFunctions"))
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
word func = setDict.getVal<word>("auxFunctions");
|
||||||
|
|
||||||
|
if( systemControlvCtorSelector_.search(func) )
|
||||||
|
{
|
||||||
|
REPORT(1)<<"Creating auxiliary function "<< Green_Text(func)<< " ..."<<END_REPORT;
|
||||||
|
return systemControlvCtorSelector_[func](control);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printKeys
|
||||||
|
(
|
||||||
|
fatalError
|
||||||
|
<< "Ctor Selector "<< Yellow_Text(func) << " dose not exist "
|
||||||
|
<< "for axuFunctions.\n"
|
||||||
|
<<"Avaiable ones are: \n"
|
||||||
|
,
|
||||||
|
systemControlvCtorSelector_
|
||||||
|
);
|
||||||
|
fatalExit;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,65 @@
|
||||||
|
/*------------------------------- 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 __auxFunctions_hpp__
|
||||||
|
#define __auxFunctions_hpp__
|
||||||
|
|
||||||
|
#include "timeInfo.hpp"
|
||||||
|
#include "uniquePtr.hpp"
|
||||||
|
#include "virtualConstructor.hpp"
|
||||||
|
|
||||||
|
namespace pFlow
|
||||||
|
{
|
||||||
|
|
||||||
|
class systemControl;
|
||||||
|
|
||||||
|
class auxFunctions
|
||||||
|
{
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
TypeInfo("auxFunctions");
|
||||||
|
|
||||||
|
auxFunctions(const systemControl& control){};
|
||||||
|
|
||||||
|
virtual ~auxFunctions()=default;
|
||||||
|
|
||||||
|
create_vCtor
|
||||||
|
(
|
||||||
|
auxFunctions,
|
||||||
|
systemControl,
|
||||||
|
(const systemControl& control),
|
||||||
|
(control)
|
||||||
|
);
|
||||||
|
|
||||||
|
virtual
|
||||||
|
bool execute() = 0;
|
||||||
|
|
||||||
|
virtual
|
||||||
|
bool write()const = 0 ;
|
||||||
|
|
||||||
|
static
|
||||||
|
uniquePtr<auxFunctions> create(const systemControl& control);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace pFlow
|
||||||
|
|
||||||
|
#endif
|
|
@ -25,6 +25,8 @@ Licence:
|
||||||
#include "types.hpp"
|
#include "types.hpp"
|
||||||
#include "vocabs.hpp"
|
#include "vocabs.hpp"
|
||||||
|
|
||||||
|
inline static bool axuFunctionsInitialized__ = false;
|
||||||
|
|
||||||
bool pFlow::systemControl::readIncludeExclue(const dictionary& dict)
|
bool pFlow::systemControl::readIncludeExclue(const dictionary& dict)
|
||||||
{
|
{
|
||||||
if (dict.containsDataEntry("includeObjects"))
|
if (dict.containsDataEntry("includeObjects"))
|
||||||
|
@ -187,6 +189,18 @@ bool pFlow::systemControl::operator++(int)
|
||||||
{
|
{
|
||||||
auto toContinue = time()++;
|
auto toContinue = time()++;
|
||||||
|
|
||||||
|
if(!axuFunctionsInitialized__)
|
||||||
|
{
|
||||||
|
auxFunctions_ = auxFunctions::create(*this);
|
||||||
|
axuFunctionsInitialized__ = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(auxFunctions_)
|
||||||
|
{
|
||||||
|
auxFunctions_().execute();
|
||||||
|
auxFunctions_().write();
|
||||||
|
}
|
||||||
|
|
||||||
if (toContinue)
|
if (toContinue)
|
||||||
{
|
{
|
||||||
writeToFileTimer_.start();
|
writeToFileTimer_.start();
|
||||||
|
@ -221,3 +235,5 @@ bool pFlow::systemControl::operator++(int)
|
||||||
|
|
||||||
return toContinue;
|
return toContinue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -34,10 +34,13 @@ Licence:
|
||||||
#include "Timers.hpp"
|
#include "Timers.hpp"
|
||||||
#include "dynamicLinkLibs.hpp"
|
#include "dynamicLinkLibs.hpp"
|
||||||
#include "Set.hpp"
|
#include "Set.hpp"
|
||||||
|
#include "auxFunctions.hpp"
|
||||||
|
|
||||||
|
|
||||||
namespace pFlow
|
namespace pFlow
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
class systemControl
|
class systemControl
|
||||||
:
|
:
|
||||||
public repository
|
public repository
|
||||||
|
@ -83,6 +86,7 @@ protected:
|
||||||
|
|
||||||
wordSet excludeList_;
|
wordSet excludeList_;
|
||||||
|
|
||||||
|
uniquePtr<auxFunctions> auxFunctions_ = nullptr;
|
||||||
|
|
||||||
bool readIncludeExclue(const dictionary& dict);
|
bool readIncludeExclue(const dictionary& dict);
|
||||||
|
|
||||||
|
|
|
@ -38,15 +38,16 @@ namespace pFlow
|
||||||
|
|
||||||
|
|
||||||
template<
|
template<
|
||||||
typename T
|
typename T,
|
||||||
|
typename Deleter = std::default_delete<T>
|
||||||
>
|
>
|
||||||
class uniquePtr
|
class uniquePtr
|
||||||
:
|
:
|
||||||
public std::unique_ptr<T>
|
public std::unique_ptr<T, Deleter>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
using uniquePtrType = std::unique_ptr<T>;
|
using uniquePtrType = std::unique_ptr<T, Deleter>;
|
||||||
|
|
||||||
// using base constructors
|
// using base constructors
|
||||||
using uniquePtrType::unique_ptr;
|
using uniquePtrType::unique_ptr;
|
||||||
|
|
|
@ -105,6 +105,12 @@ public:
|
||||||
return sqrt(radius2_);
|
return sqrt(radius2_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
INLINE_FUNCTION_HD
|
||||||
|
real volume()const
|
||||||
|
{
|
||||||
|
return 4.0/3.0* Pi * pow(radius(),3.0);
|
||||||
|
}
|
||||||
|
|
||||||
//// - IO operation
|
//// - IO operation
|
||||||
FUNCTION_H
|
FUNCTION_H
|
||||||
bool read(iIstream & is);
|
bool read(iIstream & is);
|
||||||
|
|
Loading…
Reference in New Issue