Skip to content
Snippets Groups Projects
Commit 0788f93a authored by Anna Wellmann's avatar Anna Wellmann
Browse files

Refactor BCKernelManager

parent 0eeaae68
No related branches found
No related tags found
1 merge request!131Add meaningful exceptions to BCKernelManager()
......@@ -131,7 +131,7 @@ boundaryCondition BoundaryConditionFactory::getPressureBoundaryConditionPre() co
}
}
boundaryConditionPara BoundaryConditionFactory::getStressBoundaryConditionPost() const
boundaryConditionWithParameter BoundaryConditionFactory::getStressBoundaryConditionPost() const
{
switch (this->stressBoundaryCondition) {
case StressBC::StressBounceBack:
......
......@@ -46,7 +46,7 @@ struct LBMSimulationParameter;
class Parameter;
using boundaryCondition = std::function<void(LBMSimulationParameter *, QforBoundaryConditions *)>;
using boundaryConditionPara = std::function<void(Parameter *, QforBoundaryConditions *, const int level)>;
using boundaryConditionWithParameter = std::function<void(Parameter *, QforBoundaryConditions *, const int level)>;
class BoundaryConditionFactory
{
......@@ -148,7 +148,7 @@ public:
[[nodiscard]] boundaryCondition getPressureBoundaryConditionPre() const;
[[nodiscard]] boundaryCondition getGeometryBoundaryConditionPost() const;
[[nodiscard]] boundaryConditionPara getStressBoundaryConditionPost() const;
[[nodiscard]] boundaryConditionWithParameter getStressBoundaryConditionPost() const;
private:
VelocityBC velocityBoundaryCondition = VelocityBC::NotSpecified;
......
......@@ -52,40 +52,18 @@ BCKernelManager::BCKernelManager(SPtr<Parameter> parameter, BoundaryConditionFac
this->geometryBoundaryConditionPost = bcFactory->getGeometryBoundaryConditionPost();
this->stressBoundaryConditionPost = bcFactory->getStressBoundaryConditionPost();
try {
checkBoundaryCondition(this->velocityBoundaryConditionPost, this->para->getParD(0)->velocityBC,
"velocityBoundaryConditionPost");
checkBoundaryCondition(this->noSlipBoundaryConditionPost, this->para->getParD(0)->noSlipBC,
"noSlipBoundaryConditionPost");
checkBoundaryCondition(this->slipBoundaryConditionPost, this->para->getParD(0)->slipBC,
"slipBoundaryConditionPost");
checkBoundaryCondition(this->pressureBoundaryConditionPre, this->para->getParD(0)->pressureBC,
"pressureBoundaryConditionPre");
checkBoundaryCondition(this->geometryBoundaryConditionPost, this->para->getParD(0)->geometryBC,
"geometryBoundaryConditionPost");
checkBoundaryCondition(this->stressBoundaryConditionPost, this->para->getParD(0)->stressBC,
"stressBoundaryConditionPost");
} catch (const std::runtime_error &e) {
std::cout << e.what() << std::endl;
throw;
} catch (const std::exception &e) {
std::cout << "Unknown exception in BCKernelManager: " << e.what() << std::endl;
throw;
}
}
void BCKernelManager::checkBoundaryCondition(const boundaryCondition &bc, const QforBoundaryConditions &bcStruct,
const std::string &bcName)
{
if (!bc && bcStruct.numberOfBCnodes > 0)
throw std::runtime_error("The boundary condition " + bcName + " was not set!");
}
void BCKernelManager::checkBoundaryCondition(const boundaryConditionPara &bc, const QforBoundaryConditions &bcStruct,
const std::string &bcName)
{
if (!bc && bcStruct.numberOfBCnodes > 0)
throw std::runtime_error("The boundary condition " + bcName + " was not set!");
checkBoundaryCondition(this->velocityBoundaryConditionPost, this->para->getParD(0)->velocityBC,
"velocityBoundaryConditionPost");
checkBoundaryCondition(this->noSlipBoundaryConditionPost, this->para->getParD(0)->noSlipBC,
"noSlipBoundaryConditionPost");
checkBoundaryCondition(this->slipBoundaryConditionPost, this->para->getParD(0)->slipBC,
"slipBoundaryConditionPost");
checkBoundaryCondition(this->pressureBoundaryConditionPre, this->para->getParD(0)->pressureBC,
"pressureBoundaryConditionPre");
checkBoundaryCondition(this->geometryBoundaryConditionPost, this->para->getParD(0)->geometryBC,
"geometryBoundaryConditionPost");
checkBoundaryCondition(this->stressBoundaryConditionPost, this->para->getParD(0)->stressBC,
"stressBoundaryConditionPost");
}
void BCKernelManager::runVelocityBCKernelPre(const int level) const
......
......@@ -28,7 +28,7 @@
//
//! \file BCKernelManager.h
//! \ingroup KernelManager
//! \author Martin Schoenherr
//! \author Martin Schoenherr, Anna Wellmann
//=======================================================================================
#ifndef BCKernelManager_H
#define BCKernelManager_H
......@@ -47,7 +47,7 @@ class Parameter;
struct LBMSimulationParameter;
using boundaryCondition = std::function<void(LBMSimulationParameter *, QforBoundaryConditions *)>;
using boundaryConditionPara = std::function<void(Parameter *, QforBoundaryConditions *, const int level)>;
using boundaryConditionParameter = std::function<void(Parameter *, QforBoundaryConditions *, const int level)>;
//! \class BCKernelManager
//! \brief manage the cuda kernel calls to boundary conditions
......@@ -56,6 +56,7 @@ class VIRTUALFLUIDS_GPU_EXPORT BCKernelManager
public:
//! Class constructor
//! \param parameter shared pointer to instance of class Parameter
//! \throws std::runtime_error when the user misconfigured the boundary condition(s)
BCKernelManager(SPtr<Parameter> parameter, BoundaryConditionFactory *bcFactory);
//! \brief calls the device function of the velocity boundary condition (post-collision)
......@@ -89,18 +90,20 @@ public:
void runStressWallModelKernelPost(const int level) const;
private:
void checkBoundaryCondition(const boundaryCondition &bc, const QforBoundaryConditions &bcStruct,
const std::string &bcName);
void checkBoundaryCondition(const boundaryConditionPara &bc, const QforBoundaryConditions &bcStruct,
const std::string &bcName);
template<typename bcFunction>
void checkBoundaryCondition(const bcFunction &bc, const QforBoundaryConditions &bcStruct,
const std::string &bcName){
if (!bc && bcStruct.numberOfBCnodes > 0)
throw std::runtime_error("The boundary condition " + bcName + " was not set!");
}
SPtr<Parameter> para;
boundaryCondition velocityBoundaryConditionPost;
boundaryCondition noSlipBoundaryConditionPost;
boundaryCondition slipBoundaryConditionPost;
boundaryCondition pressureBoundaryConditionPre;
boundaryCondition geometryBoundaryConditionPost;
boundaryConditionPara stressBoundaryConditionPost;
boundaryCondition velocityBoundaryConditionPost = nullptr;
boundaryCondition noSlipBoundaryConditionPost = nullptr;
boundaryCondition slipBoundaryConditionPost = nullptr;
boundaryCondition pressureBoundaryConditionPre = nullptr;
boundaryCondition geometryBoundaryConditionPost = nullptr;
boundaryConditionParameter stressBoundaryConditionPost = nullptr;
};
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment