From 814c8dfe607ddfc9a4331fe782f8bca50c90dc61 Mon Sep 17 00:00:00 2001 From: Kutscher <kutscher@irmb.tu-bs.de> Date: Thu, 19 Oct 2023 16:50:28 +0200 Subject: [PATCH] refactoring BCStrategy --- apps/cpu/MultiphaseSymmetryTest/droplet.cpp | 12 ++- .../BoundaryConditions/MultiphaseBCStrategy.h | 56 ++++++++++++ .../MultiphaseNoSlipBCStrategy.cpp | 85 +++++++++---------- .../MultiphaseNoSlipBCStrategy.h | 4 +- ...ltiphaseNonReflectingOutflowBCStrategy.cpp | 3 +- ...MultiphaseNonReflectingOutflowBCStrategy.h | 4 +- .../MultiphasePressureBCStrategy.cpp | 3 +- .../MultiphasePressureBCStrategy.h | 4 +- .../MultiphaseSlipBCStrategy.cpp | 3 +- .../MultiphaseSlipBCStrategy.h | 4 +- .../MultiphaseVelocityBC.cpp | 2 +- .../MultiphaseVelocityBCStrategy.cpp | 3 +- .../MultiphaseVelocityBCStrategy.h | 4 +- src/cpu/MultiphaseFlow/MultiphaseFlow.h | 3 +- ...ltiphaseBoundaryConditionsBlockVisitor.cpp | 24 ++---- ...MultiphaseBoundaryConditionsBlockVisitor.h | 8 -- .../NonNewtonianBCStrategy.h | 56 ++++++++++++ .../RheologyBinghamModelNoSlipBCStrategy.h | 9 +- .../RheologyBinghamModelVelocityBCStrategy.h | 2 - ...logyHerschelBulkleyModelNoSlipBCStrategy.h | 2 - .../RheologyNoSlipBCStrategy.h | 4 +- ...heologyPowellEyringModelNoSlipBCStrategy.h | 9 +- .../RheologyVelocityBCStrategy.h | 4 +- .../ThixotropyDensityBCStrategy.cpp | 3 - .../ThixotropyDensityBCStrategy.h | 4 +- .../ThixotropyNoSlipBCStrategy.cpp | 4 - .../ThixotropyNoSlipBCStrategy.h | 4 +- ...ixotropyNonReflectingOutflowBCStrategy.cpp | 3 - ...ThixotropyNonReflectingOutflowBCStrategy.h | 4 +- .../ThixotropyVelocityBCStrategy.cpp | 3 - .../ThixotropyVelocityBCStrategy.h | 4 +- ...hixotropyVelocityWithDensityBCStrategy.cpp | 2 - .../ThixotropyVelocityWithDensityBCStrategy.h | 4 +- .../NonNewtonianFluids/NonNewtonianFluids.h | 2 + ...wtonianBoundaryConditionsBlockVisitor.cpp} | 47 +++------- ...NewtonianBoundaryConditionsBlockVisitor.h} | 19 ++--- .../BoundaryConditions/BC.cpp | 3 + .../VirtualFluidsCore/BoundaryConditions/BC.h | 18 ++-- .../BoundaryConditions/BCStrategy.cpp | 2 - .../BoundaryConditions/BCStrategy.h | 35 -------- .../BoundaryConditions/BCStrategyRegister.cpp | 25 ++++++ ...{BCStrategyType.h => BCStrategyRegister.h} | 57 ++++++------- .../BoundaryConditions/BoundaryConditions.h | 6 +- .../BoundaryConditions/DensityBC.cpp | 2 +- .../EqDensityBCStrategy.cpp | 2 - .../HighViscosityNoSlipBCStrategy.cpp | 2 - .../MultiphaseBCStrategyType.h | 73 ++++++++++++++++ .../BoundaryConditions/NoSlipBC.h | 2 +- .../BoundaryConditions/NoSlipBCStrategy.cpp | 2 - .../NonEqDensityBCStrategy.cpp | 2 - .../NonReflectingInflowBCStrategy.cpp | 2 - .../NonReflectingOutflowBCStrategy.cpp | 2 - ...lectingOutflowWithRelaxationBCStrategy.cpp | 2 - .../SimpleSlipBCStrategy.cpp | 2 - .../SimpleVelocityBCStrategy.cpp | 2 - .../BoundaryConditions/SlipBC.cpp | 2 +- .../BoundaryConditions/SlipBCStrategy.cpp | 2 - .../BoundaryConditions/ThinWallBCSet.cpp | 3 +- .../ThinWallNoSlipBCStrategy.cpp | 12 ++- .../ThinWallNoSlipBCStrategy.h | 1 + .../BoundaryConditions/VelocityBC.cpp | 2 +- .../BoundaryConditions/VelocityBCStrategy.cpp | 2 - .../VelocityWithDensityBCStrategy.cpp | 2 - .../Parallel/MPIIODataStructures.h | 2 +- .../MPIIOMigrationBESimulationObserver.cpp | 4 +- .../MPIIOMigrationSimulationObserver.cpp | 4 +- .../MPIIORestartSimulationObserver.cpp | 4 +- .../BoundaryConditionsBlockVisitor.cpp | 10 +-- .../Visitors/BoundaryConditionsBlockVisitor.h | 9 +- 69 files changed, 397 insertions(+), 314 deletions(-) create mode 100644 src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseBCStrategy.h create mode 100644 src/cpu/NonNewtonianFluids/BoundaryConditions/NonNewtonianBCStrategy.h rename src/cpu/NonNewtonianFluids/Visitors/{RheologyBoundaryConditionsBlockVisitor.cpp => NonNewtonianBoundaryConditionsBlockVisitor.cpp} (63%) rename src/cpu/NonNewtonianFluids/Visitors/{RheologyBoundaryConditionsBlockVisitor.h => NonNewtonianBoundaryConditionsBlockVisitor.h} (85%) create mode 100644 src/cpu/VirtualFluidsCore/BoundaryConditions/BC.cpp create mode 100644 src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategyRegister.cpp rename src/cpu/VirtualFluidsCore/BoundaryConditions/{BCStrategyType.h => BCStrategyRegister.h} (58%) create mode 100644 src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseBCStrategyType.h diff --git a/apps/cpu/MultiphaseSymmetryTest/droplet.cpp b/apps/cpu/MultiphaseSymmetryTest/droplet.cpp index fc8d28363..17406ccc6 100644 --- a/apps/cpu/MultiphaseSymmetryTest/droplet.cpp +++ b/apps/cpu/MultiphaseSymmetryTest/droplet.cpp @@ -188,18 +188,22 @@ void run(string configname) kernel->setBCSet(bcProc); SPtr<BC> noSlipBC(new NoSlipBC()); - noSlipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNoSlipBCStrategy())); + + SPtr<BCStrategy> noSlipStrategy = std::make_shared<MultiphaseNoSlipBCStrategy>(); + noSlipBC->setBCStrategy(noSlipStrategy); SPtr<BC> outflowBC(new DensityBC(rhoLB)); outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy())); //outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNonReflectingOutflowBCStrategy())); + //outflowBC->setBCStrategy(SPtr<BCStrategy>(new ThixotropyNonReflectingOutflowBCStrategy())); ////////////////////////////////////////////////////////////////////////////////// // BC visitor MultiphaseBoundaryConditionsBlockVisitor bcVisitor; - bcVisitor.addBC(noSlipBC); - bcVisitor.addBC(outflowBC); + //NonNewtonianBoundaryConditionsBlockVisitor bcVisitor; + //bcVisitor.addBC(noSlipBC); + //bcVisitor.addBC(outflowBC); SPtr<Grid3D> grid(new Grid3D(comm)); grid->setDeltaX(dx); @@ -261,7 +265,7 @@ void run(string configname) grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); InteractorsHelper intHelper(grid, metisVisitor, true); - //intHelper.addInteractor(wallYminInt); + intHelper.addInteractor(wallYminInt); //intHelper.addInteractor(wallYmaxInt); intHelper.selectBlocks(); diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseBCStrategy.h b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseBCStrategy.h new file mode 100644 index 000000000..b2d114672 --- /dev/null +++ b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseBCStrategy.h @@ -0,0 +1,56 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \file MultiphaseBCStrategy.h +//! \ingroup BoundaryConditions +//! \author Konstantin Kutscher +//======================================================================================= + +#ifndef MultiphaseBCStrategy_H +#define MultiphaseBCStrategy_H + +#include "BCStrategy.h" + +class DistributionArray3D; + +class MultiphaseBCStrategy : public BCStrategy +{ +public: + MultiphaseBCStrategy() = default; + virtual ~MultiphaseBCStrategy() = default; + + virtual void addDistributionsH(SPtr<DistributionArray3D> distributionsH) {} + virtual void addDistributionsH2(SPtr<DistributionArray3D> distributionsH2) {} + +protected: + SPtr<DistributionArray3D> distributionsH; + SPtr<DistributionArray3D> distributionsH2; +}; + + +#endif \ No newline at end of file diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.cpp index ef2c7ac21..b9e02f9b5 100644 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.cpp +++ b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.cpp @@ -32,74 +32,71 @@ //======================================================================================= #include "MultiphaseNoSlipBCStrategy.h" -#include "DistributionArray3D.h" #include "BoundaryConditions.h" +#include "DistributionArray3D.h" +#include "MultiphaseBCStrategyType.h" MultiphaseNoSlipBCStrategy::MultiphaseNoSlipBCStrategy() { - BCStrategy::type = BCStrategy::MultiphaseNoSlipBCStrategy; - BCStrategy::preCollision = false; + BCStrategy::preCollision = false; } ////////////////////////////////////////////////////////////////////////// MultiphaseNoSlipBCStrategy::~MultiphaseNoSlipBCStrategy() { - } ////////////////////////////////////////////////////////////////////////// SPtr<BCStrategy> MultiphaseNoSlipBCStrategy::clone() { - SPtr<BCStrategy> bc(new MultiphaseNoSlipBCStrategy()); - return bc; + SPtr<BCStrategy> bc(new MultiphaseNoSlipBCStrategy()); + return bc; } ////////////////////////////////////////////////////////////////////////// void MultiphaseNoSlipBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions) { - this->distributions = distributions; + this->distributions = distributions; } ////////////////////////////////////////////////////////////////////////// void MultiphaseNoSlipBCStrategy::addDistributionsH(SPtr<DistributionArray3D> distributionsH) { - this->distributionsH = distributionsH; + this->distributionsH = distributionsH; } ////////////////////////////////////////////////////////////////////////// void MultiphaseNoSlipBCStrategy::applyBC() { - real f[D3Q27System::ENDF+1]; - real h[D3Q27System::ENDF+1]; - real h2[D3Q27System::ENDF + 1]; - //LBMReal feq[D3Q27System::ENDF+1]; - //LBMReal heq[D3Q27System::ENDF+1]; - distributions ->getDistributionInv(f, x1, x2, x3); - if (distributionsH2) - distributionsH2->getDistributionInv(h2, x1, x2, x3); - distributionsH->getDistributionInv(h, x1, x2, x3); - // LBMReal phi, vx1, vx2, vx3, p1; - - // D3Q27System::calcDensity(h, phi); - - // calcMacrosFct(f, p1, vx1, vx2, vx3); - // D3Q27System::calcMultiphaseFeqVB(feq, p1, vx1, vx2, vx3); - // D3Q27System::calcMultiphaseHeq(heq, phi, vx1, vx2, vx3); + real f[D3Q27System::ENDF + 1]; + real h[D3Q27System::ENDF + 1]; + real h2[D3Q27System::ENDF + 1]; + // LBMReal feq[D3Q27System::ENDF+1]; + // LBMReal heq[D3Q27System::ENDF+1]; + distributions->getDistributionInv(f, x1, x2, x3); + if (distributionsH2) distributionsH2->getDistributionInv(h2, x1, x2, x3); + distributionsH->getDistributionInv(h, x1, x2, x3); + // LBMReal phi, vx1, vx2, vx3, p1; + + // D3Q27System::calcDensity(h, phi); - for (int fdir = D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++) - { - if (bcPtr->hasNoSlipBoundaryFlag(fdir)) - { - //quadratic bounce back - const int invDir = D3Q27System::INVDIR[fdir]; - real fReturn = f[invDir]; - distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); - //distributions->setDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB - real hReturn = h[invDir]; - distributionsH->setDistributionForDirection(hReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); - //distributionsH->setDistributionForDirection(hReturn, x1, x2, x3, invDir);//delay BB - if (distributionsH2) - { - real h2Return = h2[invDir]; - distributionsH2->setDistributionForDirection(h2Return, x1, x2, x3, invDir);//delay BB - // distributionsH2->setDistributionForDirection(h2Return, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); + // calcMacrosFct(f, p1, vx1, vx2, vx3); + // D3Q27System::calcMultiphaseFeqVB(feq, p1, vx1, vx2, vx3); + // D3Q27System::calcMultiphaseHeq(heq, phi, vx1, vx2, vx3); - } - } - } + for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { + if (bcPtr->hasNoSlipBoundaryFlag(fdir)) { + // quadratic bounce back + const int invDir = D3Q27System::INVDIR[fdir]; + real fReturn = f[invDir]; + distributions->setDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], + x3 + D3Q27System::DX3[invDir], fdir); + // distributions->setDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB + real hReturn = h[invDir]; + distributionsH->setDistributionForDirection(hReturn, x1 + D3Q27System::DX1[invDir], + x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); + // distributionsH->setDistributionForDirection(hReturn, x1, x2, x3, invDir);//delay BB + if (distributionsH2) { + real h2Return = h2[invDir]; + distributionsH2->setDistributionForDirection(h2Return, x1, x2, x3, invDir); // delay BB + // distributionsH2->setDistributionForDirection(h2Return, x1 + D3Q27System::DX1[invDir], x2 + + // D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); + } + } + } } diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.h b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.h index 390c2952e..f9a62a8a4 100644 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.h +++ b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.h @@ -34,10 +34,10 @@ #ifndef MultiphaseNoSlipBCStrategy_h__ #define MultiphaseNoSlipBCStrategy_h__ -#include "BCStrategy.h" +#include "MultiphaseBCStrategy.h" //! A class implements no-slip boundary condition for multiphase simulations -class MultiphaseNoSlipBCStrategy : public BCStrategy +class MultiphaseNoSlipBCStrategy : public MultiphaseBCStrategy { public: MultiphaseNoSlipBCStrategy(); diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.cpp index 34fae58a7..1dc704630 100644 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.cpp +++ b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.cpp @@ -35,11 +35,10 @@ #include "BoundaryConditions.h" #include "D3Q27System.h" #include "DistributionArray3D.h" -#include "BCStrategyType.h" +#include "MultiphaseBCStrategyType.h" MultiphaseNonReflectingOutflowBCStrategy::MultiphaseNonReflectingOutflowBCStrategy() { - BCStrategy::type = BCStrategyType::NonReflectingOutflowBCStrategy; BCStrategy::preCollision = true; } ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.h b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.h index 3aae2ce03..874a12079 100644 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.h +++ b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.h @@ -34,9 +34,9 @@ #ifndef MultiphaseNonReflectingOutflowBCStrategy_h__ #define MultiphaseNonReflectingOutflowBCStrategy_h__ -#include "BCStrategy.h" +#include "MultiphaseBCStrategy.h" //! A class implements non reflecting outflow boundary condition for multiphase simulations -class MultiphaseNonReflectingOutflowBCStrategy : public BCStrategy +class MultiphaseNonReflectingOutflowBCStrategy : public MultiphaseBCStrategy { public: MultiphaseNonReflectingOutflowBCStrategy(); diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.cpp index 0ea532c2b..aa5150677 100644 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.cpp +++ b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.cpp @@ -34,12 +34,11 @@ #include "MultiphasePressureBCStrategy.h" #include "DistributionArray3D.h" #include "BoundaryConditions.h" -#include "BCStrategyType.h" +#include "MultiphaseBCStrategyType.h" MultiphasePressureBCStrategy::MultiphasePressureBCStrategy() { - BCStrategy::type = BCStrategyType::MultiphasePressureBCStrategy; BCStrategy::preCollision = false; } ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.h b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.h index cb6c6cf5e..f22efefdd 100644 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.h +++ b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.h @@ -34,9 +34,9 @@ #ifndef MultiphasePressureBCStrategy_h__ #define MultiphasePressureBCStrategy_h__ -#include "BCStrategy.h" +#include "MultiphaseBCStrategy.h" //! A class implements velocity boundary condition for multiphase simulations -class MultiphasePressureBCStrategy : public BCStrategy +class MultiphasePressureBCStrategy : public MultiphaseBCStrategy { public: MultiphasePressureBCStrategy(); diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.cpp index 92bc57c81..73edf8f99 100644 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.cpp +++ b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.cpp @@ -34,11 +34,10 @@ #include "MultiphaseSlipBCStrategy.h" #include "DistributionArray3D.h" #include "BoundaryConditions.h" -#include "BCStrategyType.h" +#include "MultiphaseBCStrategyType.h" MultiphaseSlipBCStrategy::MultiphaseSlipBCStrategy() { - BCStrategy::type = BCStrategyType::SlipBCStrategy; BCStrategy::preCollision = false; } ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.h b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.h index 1eb25a958..990615907 100644 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.h +++ b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.h @@ -34,10 +34,10 @@ #ifndef MultiphaseSlipBCStrategy_h__ #define MultiphaseSlipBCStrategy_h__ -#include "BCStrategy.h" +#include "MultiphaseBCStrategy.h" //! A class implements slip boundary condition for multiphase simulation -class MultiphaseSlipBCStrategy : public BCStrategy +class MultiphaseSlipBCStrategy : public MultiphaseBCStrategy { public: MultiphaseSlipBCStrategy(); diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBC.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBC.cpp index 6a79904e6..b71bb2135 100644 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBC.cpp +++ b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBC.cpp @@ -280,7 +280,7 @@ void MultiphaseVelocityBC::adaptBCForDirection( const D3Q27Interactor& interacto void MultiphaseVelocityBC::adaptBC( const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const real& worldX1, const real& worldX2, const real& worldX3, const real& time ) { this->setNodeVelocity(interactor,bc,worldX1,worldX2,worldX3,time); - bc->setBCStrategyType(strategyType); + bc->setBCStrategyKey(bcStrategyKey); } /*==========================================================*/ void MultiphaseVelocityBC::setNodeVelocity( const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const real& worldX1, const real& worldX2, const real& worldX3, const real& timestep) diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.cpp index dd364e85e..c4755f178 100644 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.cpp +++ b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.cpp @@ -34,11 +34,10 @@ #include "MultiphaseVelocityBCStrategy.h" #include "DistributionArray3D.h" #include "BoundaryConditions.h" -#include "BCStrategyType.h" +#include "MultiphaseBCStrategyType.h" MultiphaseVelocityBCStrategy::MultiphaseVelocityBCStrategy() { - BCStrategy::type = BCStrategyType::MultiphaseVelocityBCStrategy; BCStrategy::preCollision = false; } ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.h b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.h index 4e99c876a..217e141f5 100644 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.h +++ b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.h @@ -34,9 +34,9 @@ #ifndef MultiphaseVelocityBCStrategy_h__ #define MultiphaseVelocityBCStrategy_h__ -#include "BCStrategy.h" +#include "MultiphaseBCStrategy.h" //! A class implements velocity boundary condition for multiphase simulations -class MultiphaseVelocityBCStrategy : public BCStrategy +class MultiphaseVelocityBCStrategy : public MultiphaseBCStrategy { public: MultiphaseVelocityBCStrategy(); diff --git a/src/cpu/MultiphaseFlow/MultiphaseFlow.h b/src/cpu/MultiphaseFlow/MultiphaseFlow.h index 79c2ce806..c7cceb223 100644 --- a/src/cpu/MultiphaseFlow/MultiphaseFlow.h +++ b/src/cpu/MultiphaseFlow/MultiphaseFlow.h @@ -40,7 +40,8 @@ #include "MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.h" #include "MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.h" #include "MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.h" - +#include "MultiphaseFlow/BoundaryConditions/MultiphaseBCStrategy.h" + #include "MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.h" #include "MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.h" #include "MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.h" diff --git a/src/cpu/MultiphaseFlow/Visitors/MultiphaseBoundaryConditionsBlockVisitor.cpp b/src/cpu/MultiphaseFlow/Visitors/MultiphaseBoundaryConditionsBlockVisitor.cpp index ba8e9c4f1..cf2bc2700 100644 --- a/src/cpu/MultiphaseFlow/Visitors/MultiphaseBoundaryConditionsBlockVisitor.cpp +++ b/src/cpu/MultiphaseFlow/Visitors/MultiphaseBoundaryConditionsBlockVisitor.cpp @@ -44,6 +44,7 @@ #include "Block3D.h" #include "BCArray3D.h" #include "LBMKernel.h" +#include "MultiphaseFlow/BoundaryConditions/MultiphaseBCStrategy.h" MultiphaseBoundaryConditionsBlockVisitor::MultiphaseBoundaryConditionsBlockVisitor() : Block3DVisitor(0, D3Q27System::MAXLEVEL) @@ -77,13 +78,6 @@ void MultiphaseBoundaryConditionsBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Blo SPtr<BCArray3D> bcArray = bcSet->getBCArray(); bool compressible = kernel->getCompressible(); - real collFactorL = kernel->getCollisionFactorL(); - real collFactorG = kernel->getCollisionFactorG(); - real collFactorPh = 1.0/kernel->getPhaseFieldRelaxation(); - real densityRatio = kernel->getDensityRatio(); - real phiL = kernel->getPhiL(); - real phiH = kernel->getPhiH(); - //int level = block->getLevel(); int minX1 = 0; int minX2 = 0; @@ -109,19 +103,19 @@ void MultiphaseBoundaryConditionsBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Blo { if ((bcPtr = bcArray->getBC(x1, x2, x3)) != NULL) { - char alg = bcPtr->getBCStrategyType(); - SPtr<BCStrategy> bca = bcMap[alg]; + char bcStrategy = bcPtr->getBCStrategyKey(); + SPtr<BCStrategy> bca = BCStrategyRegister::getInstance()->getBCStrategy(bcStrategy); if (bca) { bca = bca->clone(); bca->setNodeIndex(x1, x2, x3); bca->setBcPointer(bcPtr); - //bca->addDistributions(distributions, distributionsH); bca->addDistributions(distributions); - bca->addDistributionsH(distributionsH); + if (distributionsH) + dynamicPointerCast<MultiphaseBCStrategy>(bca)->addDistributionsH(distributionsH); if (distributionsH2) - bca->addDistributionsH2(distributionsH2); + dynamicPointerCast<MultiphaseBCStrategy>(bca)->addDistributionsH2(distributionsH2); bca->setCompressible(compressible); bca->setBcArray(bcArray); bcSet->addBC(bca); @@ -133,11 +127,7 @@ void MultiphaseBoundaryConditionsBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Blo } } } -////////////////////////////////////////////////////////////////////////// -void MultiphaseBoundaryConditionsBlockVisitor::addBC(SPtr<BC> bc) -{ - bcMap.insert(std::make_pair(bc->getBCStrategyType(), bc->getBCStrategy())); -} + diff --git a/src/cpu/MultiphaseFlow/Visitors/MultiphaseBoundaryConditionsBlockVisitor.h b/src/cpu/MultiphaseFlow/Visitors/MultiphaseBoundaryConditionsBlockVisitor.h index cc04246d4..22878fb73 100644 --- a/src/cpu/MultiphaseFlow/Visitors/MultiphaseBoundaryConditionsBlockVisitor.h +++ b/src/cpu/MultiphaseFlow/Visitors/MultiphaseBoundaryConditionsBlockVisitor.h @@ -35,10 +35,6 @@ #define MultiphaseBoundaryConditionsBlockVisitor_h__ #include "Block3DVisitor.h" -#include <map> - -class BC; -class BCStrategy; class MultiphaseBoundaryConditionsBlockVisitor : public Block3DVisitor { @@ -47,9 +43,5 @@ public: virtual ~MultiphaseBoundaryConditionsBlockVisitor(); void visit(SPtr<Grid3D> grid, SPtr<Block3D> block); - void addBC(SPtr<BC> bc); -protected: -private: - std::map<char, SPtr<BCStrategy>> bcMap; }; #endif // MultiphaseBoundaryConditionsBlockVisitor_h__ diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/NonNewtonianBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/NonNewtonianBCStrategy.h new file mode 100644 index 000000000..0797ee70c --- /dev/null +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/NonNewtonianBCStrategy.h @@ -0,0 +1,56 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \file NonNewtonianBCStrategy.h +//! \ingroup BoundaryConditions +//! \author Konstantin Kutscher +//======================================================================================= + +#ifndef NonNewtonianBCStrategy_H +#define NonNewtonianBCStrategy_H + +#include "BCStrategy.h" + +class DistributionArray3D; + +class NonNewtonianBCStrategy : public BCStrategy +{ +public: + NonNewtonianBCStrategy() = default; + virtual ~NonNewtonianBCStrategy() = default; + + virtual void addDistributionsH(SPtr<DistributionArray3D> distributionsH) {} + virtual void addDistributionsH2(SPtr<DistributionArray3D> distributionsH2) {} + +protected: + SPtr<DistributionArray3D> distributionsH; + SPtr<DistributionArray3D> distributionsH2; +}; + + +#endif \ No newline at end of file diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelNoSlipBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelNoSlipBCStrategy.h index 24c96da39..7707c12d9 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelNoSlipBCStrategy.h +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelNoSlipBCStrategy.h @@ -42,19 +42,18 @@ class RheologyBinghamModelNoSlipBCStrategy : public RheologyNoSlipBCStrategy public: RheologyBinghamModelNoSlipBCStrategy() { - BCStrategy::type = BCStrategy::RheologyBinghamModelNoSlipBCStrategy; - BCStrategy::preCollision = true; + BCStrategy::preCollision = true; } ~RheologyBinghamModelNoSlipBCStrategy() {} SPtr<BCStrategy> clone() override { - SPtr<BCStrategy> bc(new RheologyBinghamModelNoSlipBCStrategy()); - return bc; + SPtr<BCStrategy> bc(new RheologyBinghamModelNoSlipBCStrategy()); + return bc; } protected: real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const override { - return Rheology::getBinghamCollFactor(omegaInf, shearRate, drho); + return Rheology::getBinghamCollFactor(omegaInf, shearRate, drho); } }; #endif // BinghamModelNoSlipBCStrategy_h__ diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelVelocityBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelVelocityBCStrategy.h index 9039d00ad..f175cc6fb 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelVelocityBCStrategy.h +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelVelocityBCStrategy.h @@ -36,14 +36,12 @@ #include "RheologyVelocityBCStrategy.h" #include "cpu/NonNewtonianFluids/LBM/Rheology.h" -#include "BCStrategyType.h" class RheologyBinghamModelVelocityBCStrategy : public RheologyVelocityBCStrategy { public: RheologyBinghamModelVelocityBCStrategy() { - BCStrategy::type = BCStrategyType::RheologyBinghamModelVelocityBCStrategy; BCStrategy::preCollision = true; } ~RheologyBinghamModelVelocityBCStrategy() {} diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyHerschelBulkleyModelNoSlipBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyHerschelBulkleyModelNoSlipBCStrategy.h index d5aa651d1..45a9abc16 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyHerschelBulkleyModelNoSlipBCStrategy.h +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyHerschelBulkleyModelNoSlipBCStrategy.h @@ -35,14 +35,12 @@ #include "RheologyNoSlipBCStrategy.h" #include "cpu/NonNewtonianFluids/LBM/Rheology.h" -#include "BCStrategyType.h" class RheologyHerschelBulkleyModelNoSlipBCStrategy : public RheologyNoSlipBCStrategy { public: RheologyHerschelBulkleyModelNoSlipBCStrategy() { - BCStrategy::type = BCStrategyType::RheologyHerschelBulkleyModelNoSlipBCStrategy; BCStrategy::preCollision = true; } ~RheologyHerschelBulkleyModelNoSlipBCStrategy() {} diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.h index 611d87bcd..ec2aef786 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.h +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.h @@ -33,12 +33,12 @@ #ifndef RheologyNoSlipBCStrategy_h__ #define RheologyNoSlipBCStrategy_h__ -#include "BCStrategy.h" +#include "NonNewtonianBCStrategy.h" #include <PointerDefinitions.h> class DistributionArray3D; -class RheologyNoSlipBCStrategy : public BCStrategy +class RheologyNoSlipBCStrategy : public NonNewtonianBCStrategy { public: RheologyNoSlipBCStrategy() = default; diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyPowellEyringModelNoSlipBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyPowellEyringModelNoSlipBCStrategy.h index f867ab1dc..09a2e906f 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyPowellEyringModelNoSlipBCStrategy.h +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyPowellEyringModelNoSlipBCStrategy.h @@ -41,19 +41,18 @@ class RheologyPowellEyringModelNoSlipBCStrategy : public RheologyNoSlipBCStrateg public: RheologyPowellEyringModelNoSlipBCStrategy() { - BCStrategy::type = BCStrategy::RheologyPowellEyringModelNoSlipBCStrategy; - BCStrategy::preCollision = true; + BCStrategy::preCollision = true; } ~RheologyPowellEyringModelNoSlipBCStrategy() {} SPtr<BCStrategy> clone() override { - SPtr<BCStrategy> bc(new RheologyPowellEyringModelNoSlipBCStrategy()); - return bc; + SPtr<BCStrategy> bc(new RheologyPowellEyringModelNoSlipBCStrategy()); + return bc; } protected: real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const override { - return Rheology::getHerschelBulkleyCollFactor(omegaInf, shearRate, drho); + return Rheology::getHerschelBulkleyCollFactor(omegaInf, shearRate, drho); } }; #endif // RheologyPowellEyringModelNoSlipBCStrategy_h__ \ No newline at end of file diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.h index 00c08230c..bb2846871 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.h +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.h @@ -33,12 +33,12 @@ #ifndef RheologyVelocityBCStrategy_h__ #define RheologyVelocityBCStrategy_h__ -#include "BCStrategy.h" +#include "NonNewtonianBCStrategy.h" #include <PointerDefinitions.h> class DistributionArray3D; -class RheologyVelocityBCStrategy : public BCStrategy +class RheologyVelocityBCStrategy : public NonNewtonianBCStrategy { public: RheologyVelocityBCStrategy(); diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.cpp index f5db712e0..d9c393df3 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.cpp +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.cpp @@ -34,13 +34,10 @@ #include "ThixotropyDensityBCStrategy.h" #include "DistributionArray3D.h" #include "BoundaryConditions.h" -#include "BCStrategyType.h" ThixotropyDensityBCStrategy::ThixotropyDensityBCStrategy() { - BCStrategy::type = BCStrategyType::ThixotropyDensityBCStrategy; BCStrategy::preCollision = false; - BCStrategy::thixotropy = true; lambdaBC = 0.0; } ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.h index a40500fe5..5dddbefc6 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.h +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.h @@ -34,10 +34,10 @@ #ifndef ThixotropyDensityBCStrategy_h__ #define ThixotropyDensityBCStrategy_h__ -#include "BCStrategy.h" +#include "NonNewtonianBCStrategy.h" -class ThixotropyDensityBCStrategy : public BCStrategy +class ThixotropyDensityBCStrategy : public NonNewtonianBCStrategy { public: ThixotropyDensityBCStrategy(); diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.cpp index 57797d8b8..f8e86ca9d 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.cpp +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.cpp @@ -33,14 +33,10 @@ #include "ThixotropyNoSlipBCStrategy.h" #include "DistributionArray3D.h" #include "BoundaryConditions.h" -#include "BCStrategyType.h" ThixotropyNoSlipBCStrategy::ThixotropyNoSlipBCStrategy() { - BCStrategy::type = BCStrategyType::ThixotropyNoSlipBCStrategy; BCStrategy::preCollision = false; - BCStrategy::thixotropy = true; - } ////////////////////////////////////////////////////////////////////////// ThixotropyNoSlipBCStrategy::~ThixotropyNoSlipBCStrategy() diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.h index edd895233..f406bad38 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.h +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.h @@ -33,9 +33,9 @@ #ifndef ThixotropyNoSlipBCStrategy_h__ #define ThixotropyNoSlipBCStrategy_h__ -#include "BCStrategy.h" +#include "NonNewtonianBCStrategy.h" -class ThixotropyNoSlipBCStrategy : public BCStrategy +class ThixotropyNoSlipBCStrategy : public NonNewtonianBCStrategy { public: ThixotropyNoSlipBCStrategy(); diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.cpp index 74f483b41..ff71b99ed 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.cpp +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.cpp @@ -33,13 +33,10 @@ #include "ThixotropyNonReflectingOutflowBCStrategy.h" #include "DistributionArray3D.h" #include "BoundaryConditions.h" -#include "BCStrategyType.h" ThixotropyNonReflectingOutflowBCStrategy::ThixotropyNonReflectingOutflowBCStrategy() { - BCStrategy::type = BCStrategyType::ThixotropyNonReflectingOutflowBCStrategy; BCStrategy::preCollision = true; - BCStrategy::thixotropy = true; } ////////////////////////////////////////////////////////////////////////// ThixotropyNonReflectingOutflowBCStrategy::~ThixotropyNonReflectingOutflowBCStrategy() diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.h index 7ae90994a..5e466a5a5 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.h +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.h @@ -33,10 +33,10 @@ #ifndef ThixotropyNonReflectingOutflowBCStrategy_h__ #define ThixotropyNonReflectingOutflowBCStrategy_h__ -#include "BCStrategy.h" +#include "NonNewtonianBCStrategy.h" -class ThixotropyNonReflectingOutflowBCStrategy : public BCStrategy +class ThixotropyNonReflectingOutflowBCStrategy : public NonNewtonianBCStrategy { public: ThixotropyNonReflectingOutflowBCStrategy(); diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.cpp index ee1e75cb9..2e69dbaf9 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.cpp +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.cpp @@ -33,13 +33,10 @@ #include "ThixotropyVelocityBCStrategy.h" #include "DistributionArray3D.h" #include "BoundaryConditions.h" -#include "BCStrategyType.h" ThixotropyVelocityBCStrategy::ThixotropyVelocityBCStrategy() { - BCStrategy::type = BCStrategyType::ThixotropyVelocityBCStrategy; BCStrategy::preCollision = false; - BCStrategy::thixotropy = true; lambdaBC = vf::basics::constant::c0o1; } ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.h index 93cf6d220..aa08f4716 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.h +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.h @@ -33,10 +33,10 @@ #ifndef ThixotropyVelocityBCStrategy_h__ #define ThixotropyVelocityBCStrategy_h__ -#include "BCStrategy.h" +#include "NonNewtonianBCStrategy.h" -class ThixotropyVelocityBCStrategy : public BCStrategy +class ThixotropyVelocityBCStrategy : public NonNewtonianBCStrategy { public: ThixotropyVelocityBCStrategy(); diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.cpp index 604260918..fb43ccc69 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.cpp +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.cpp @@ -33,11 +33,9 @@ #include "ThixotropyVelocityWithDensityBCStrategy.h" #include "DistributionArray3D.h" #include "BCArray3D.h" -#include "BCStrategyType.h" ThixotropyVelocityWithDensityBCStrategy::ThixotropyVelocityWithDensityBCStrategy() { - BCStrategy::type = BCStrategyType::ThixotropyVelocityWithDensityBCStrategy; BCStrategy::preCollision = false; } ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.h index 74d33efc0..f590c9cff 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.h +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.h @@ -34,14 +34,14 @@ #ifndef ThixotropyVelocityWithDensityBCStrategy_h__ #define ThixotropyVelocityWithDensityBCStrategy_h__ -#include "BCStrategy.h" +#include "NonNewtonianBCStrategy.h" #include <PointerDefinitions.h> class DistributionArray3D; //! \brief Class implements Dirichlet boundary condition for velocity. Set density in system. It is used together with non reflecting outflow. -class ThixotropyVelocityWithDensityBCStrategy : public BCStrategy +class ThixotropyVelocityWithDensityBCStrategy : public NonNewtonianBCStrategy { public: ThixotropyVelocityWithDensityBCStrategy(); diff --git a/src/cpu/NonNewtonianFluids/NonNewtonianFluids.h b/src/cpu/NonNewtonianFluids/NonNewtonianFluids.h index 705a07af1..de4bea429 100644 --- a/src/cpu/NonNewtonianFluids/NonNewtonianFluids.h +++ b/src/cpu/NonNewtonianFluids/NonNewtonianFluids.h @@ -56,4 +56,6 @@ #include "NonNewtonianFluids/LBM/RheologyK17LBMKernel.h" #include "NonNewtonianFluids/LBM/RheologyPowellEyringModelLBMKernel.h" +#include "NonNewtonianFluids/Visitors/NonNewtonianBoundaryConditionsBlockVisitor.h" + #endif \ No newline at end of file diff --git a/src/cpu/NonNewtonianFluids/Visitors/RheologyBoundaryConditionsBlockVisitor.cpp b/src/cpu/NonNewtonianFluids/Visitors/NonNewtonianBoundaryConditionsBlockVisitor.cpp similarity index 63% rename from src/cpu/NonNewtonianFluids/Visitors/RheologyBoundaryConditionsBlockVisitor.cpp rename to src/cpu/NonNewtonianFluids/Visitors/NonNewtonianBoundaryConditionsBlockVisitor.cpp index 2bb8da69a..77f064fb9 100644 --- a/src/cpu/NonNewtonianFluids/Visitors/RheologyBoundaryConditionsBlockVisitor.cpp +++ b/src/cpu/NonNewtonianFluids/Visitors/NonNewtonianBoundaryConditionsBlockVisitor.cpp @@ -26,12 +26,12 @@ // You should have received a copy of the GNU General Public License along // with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. // -//! \file BoundaryConditionsBlockVisitor.cpp +//! \file NonNewtonianBoundaryConditionsBlockVisitor.cpp //! \ingroup Visitors //! \author Konstantin Kutscher //======================================================================================= -#include "BoundaryConditionsBlockVisitor.h" +#include "NonNewtonianBoundaryConditionsBlockVisitor.h" #include "BC.h" #include "BCArray3D.h" #include "BCSet.h" @@ -44,22 +44,17 @@ #include "Block3D.h" #include "BCArray3D.h" #include "ILBMKernel.h" -#include "BCStrategyType.h" -#include "NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.h" -#include "NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.h" -#include "NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.h" -#include "NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.h" -#include "NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.h" +#include "NonNewtonianFluids/BoundaryConditions/NonNewtonianBCStrategy.h" -BoundaryConditionsBlockVisitor::BoundaryConditionsBlockVisitor() : Block3DVisitor(0, D3Q27System::MAXLEVEL) +NonNewtonianBoundaryConditionsBlockVisitor::NonNewtonianBoundaryConditionsBlockVisitor() : Block3DVisitor(0, D3Q27System::MAXLEVEL) { } ////////////////////////////////////////////////////////////////////////// -BoundaryConditionsBlockVisitor::~BoundaryConditionsBlockVisitor() = default; +NonNewtonianBoundaryConditionsBlockVisitor::~NonNewtonianBoundaryConditionsBlockVisitor() = default; ////////////////////////////////////////////////////////////////////////// -void BoundaryConditionsBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block) +void NonNewtonianBoundaryConditionsBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block) { if (block->getRank() == grid->getRank()) { SPtr<ILBMKernel> kernel = block->getKernel(); @@ -90,14 +85,16 @@ void BoundaryConditionsBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> bloc bcSet->clearBC(); SPtr<DistributionArray3D> distributions = kernel->getDataSet()->getFdistributions(); + SPtr<DistributionArray3D> distributionsH = kernel->getDataSet()->getHdistributions(); + SPtr<DistributionArray3D> distributionsH2 = kernel->getDataSet()->getH2distributions(); for (int x3 = minX3; x3 < maxX3; x3++) { for (int x2 = minX2; x2 < maxX2; x2++) { for (int x1 = minX1; x1 < maxX1; x1++) { if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { if ((bcPtr = bcArray->getBC(x1, x2, x3)) != NULL) { - char alg = bcPtr->getBCStrategyType(); - SPtr<BCStrategy> bca = bcMap[alg]; + char bcStrategy = bcPtr->getBCStrategyKey(); + SPtr<BCStrategy> bca = BCStrategyRegister::getInstance()->getBCStrategy(bcStrategy); if (bca) { bca = bca->clone(); @@ -106,21 +103,10 @@ void BoundaryConditionsBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> bloc bca->setBcPointer(bcPtr); bca->addDistributions(distributions); - if (alg == BCStrategyType::ThixotropyVelocityBCStrategy) - std::static_pointer_cast<ThixotropyVelocityBCStrategy>(bca)->addDistributionsH( - kernel->getDataSet()->getHdistributions()); - if (alg == BCStrategyType::ThixotropyDensityBCStrategy) - std::static_pointer_cast<ThixotropyDensityBCStrategy>(bca)->addDistributionsH( - kernel->getDataSet()->getHdistributions()); - if (alg == BCStrategyType::ThixotropyNoSlipBCStrategy) - std::static_pointer_cast<ThixotropyNoSlipBCStrategy>(bca)->addDistributionsH( - kernel->getDataSet()->getHdistributions()); - if (alg == BCStrategyType::ThixotropyNonReflectingOutflowBCStrategy) - std::static_pointer_cast<ThixotropyNonReflectingOutflowBCStrategy>(bca) - ->addDistributionsH(kernel->getDataSet()->getHdistributions()); - if (alg == BCStrategyType::ThixotropyVelocityWithDensityBCStrategy) - std::static_pointer_cast<ThixotropyVelocityWithDensityBCStrategy>(bca) - ->addDistributionsH(kernel->getDataSet()->getHdistributions()); + if (distributionsH) + dynamicPointerCast<NonNewtonianBCStrategy>(bca)->addDistributionsH(distributionsH); + if (distributionsH2) + dynamicPointerCast<NonNewtonianBCStrategy>(bca)->addDistributionsH2(distributionsH2); bca->setCollFactor(collFactor); bca->setCompressible(compressible); @@ -134,8 +120,3 @@ void BoundaryConditionsBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> bloc } } } -////////////////////////////////////////////////////////////////////////// -void BoundaryConditionsBlockVisitor::addBC(SPtr<BC> bc) -{ - bcMap.insert(std::make_pair(bc->getBCStrategyType(), bc->getBCStrategy())); -} diff --git a/src/cpu/NonNewtonianFluids/Visitors/RheologyBoundaryConditionsBlockVisitor.h b/src/cpu/NonNewtonianFluids/Visitors/NonNewtonianBoundaryConditionsBlockVisitor.h similarity index 85% rename from src/cpu/NonNewtonianFluids/Visitors/RheologyBoundaryConditionsBlockVisitor.h rename to src/cpu/NonNewtonianFluids/Visitors/NonNewtonianBoundaryConditionsBlockVisitor.h index 8954bf73a..759fef3b8 100644 --- a/src/cpu/NonNewtonianFluids/Visitors/RheologyBoundaryConditionsBlockVisitor.h +++ b/src/cpu/NonNewtonianFluids/Visitors/NonNewtonianBoundaryConditionsBlockVisitor.h @@ -26,36 +26,29 @@ // You should have received a copy of the GNU General Public License along // with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. // -//! \file BoundaryConditionsBlockVisitor.h +//! \file NonNewtonianBoundaryConditionsBlockVisitor.h //! \ingroup Visitors //! \author Konstantin Kutscher //======================================================================================= -#ifndef BoundaryConditionBlockVisitor_h__ -#define BoundaryConditionBlockVisitor_h__ +#ifndef NonNewtonianBoundaryConditionsBlockVisitor_h__ +#define NonNewtonianBoundaryConditionsBlockVisitor_h__ #include <PointerDefinitions.h> -#include <map> #include "Block3DVisitor.h" class Grid3D; class Block3D; -class BCStrategy; -class BC; //! \brief set boundary conditions -class BoundaryConditionsBlockVisitor : public Block3DVisitor +class NonNewtonianBoundaryConditionsBlockVisitor : public Block3DVisitor { public: - BoundaryConditionsBlockVisitor(); - ~BoundaryConditionsBlockVisitor() override; + NonNewtonianBoundaryConditionsBlockVisitor(); + ~NonNewtonianBoundaryConditionsBlockVisitor() override; void visit(SPtr<Grid3D> grid, SPtr<Block3D> block) override; - void addBC(SPtr<BC> bc); -protected: -private: - std::map<char, SPtr<BCStrategy>> bcMap; }; #endif // BoundaryConditionBlockVisitor_h__ diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BC.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/BC.cpp new file mode 100644 index 000000000..f6bc5c635 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BC.cpp @@ -0,0 +1,3 @@ +#include "BC.h" + +char BC::keyCounter = 0; \ No newline at end of file diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BC.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/BC.h index 5c699bf28..279b72d7a 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BC.h +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BC.h @@ -37,6 +37,7 @@ #include "BCStrategy.h" #include "BoundaryConditions.h" +#include "BCStrategyRegister.h" class D3Q27Interactor; @@ -66,24 +67,27 @@ public: const real &worldX1, const real &worldX2, const real &worldX3, const real &q, const int &fdirection, const real &time = 0) = 0; - void setBCStrategy(SPtr<BCStrategy> alg) + void setBCStrategy(SPtr<BCStrategy> bcStrategy) { - strategyType = alg->getType(); - strategy = alg; + bcStrategyKey = keyCounter++; + BCStrategyRegister::getInstance()->setBCStrategy(bcStrategyKey, bcStrategy); } - SPtr<BCStrategy> getBCStrategy() { return strategy; } - char getBCStrategyType() { return strategyType; } + //SPtr<BCStrategy> getBCStrategy() { return bcStrategy; } + //char getBCStrategyKey() { return bcStrategyKey; } protected: short secondaryBcOption{ 0 }; char type{ 0 }; - SPtr<BCStrategy> strategy; - char strategyType{ -1 }; + char bcStrategyKey{ -1 }; static const char TIMEDEPENDENT = 1 << 0; //'1'; static const char TIMEPERIODIC = 1 << 1; //'2'; + + static char keyCounter; }; + + #endif // D3Q27BOUNDARYCONDITIONADAPTER_H diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategy.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategy.cpp index e5c98ecb8..7308548c3 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategy.cpp +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategy.cpp @@ -73,8 +73,6 @@ void BCStrategy::setCompressible(bool c) ////////////////////////////////////////////////////////////////////////// void BCStrategy::setCollFactor(real cf) { collFactor = cf; } ////////////////////////////////////////////////////////////////////////// -char BCStrategy::getType() { return type; } -////////////////////////////////////////////////////////////////////////// bool BCStrategy::isPreCollision() { return preCollision; } ////////////////////////////////////////////////////////////////////////// SPtr<BCArray3D> BCStrategy::getBcArray() { return bcArray; } diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategy.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategy.h index 348b3b3d3..6d91cfebb 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategy.h +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategy.h @@ -47,64 +47,29 @@ class Block3D; //! \details BCStrategy provides interface for implementation of diferent boundary conditions class BCStrategy { -//public: -// static const char VelocityBCStrategy = 0; -// static const char EqDensityBCStrategy = 1; -// static const char NonEqDensityBCStrategy = 2; -// static const char NoSlipBCStrategy = 3; -// static const char SlipBCStrategy = 4; -// static const char HighViscosityNoSlipBCStrategy = 5; -// static const char ThinWallNoSlipBCStrategy = 6; -// static const char VelocityWithDensityBCStrategy = 7; -// static const char NonReflectingOutflowBCStrategy = 8; -// static const char ThixotropyVelocityBCStrategy = 9; -// static const char ThixotropyDensityBCStrategy = 10; -// static const char ThixotropyNoSlipBCStrategy = 11; -// static const char ThixotropyNonReflectingOutflowBCStrategy = 12; -// static const char ThixotropyVelocityWithDensityBCStrategy = 13; -// static const char RheologyBinghamModelNoSlipBCStrategy = 14; -// static const char RheologyHerschelBulkleyModelNoSlipBCStrategy = 15; -// static const char SimpleVelocityBCStrategy = 16; -// static const char SimpleSlipBCStrategy = 17; -// static const char RheologyPowellEyringModelNoSlipBCStrategy = 18; -// static const char RheologyBinghamModelVelocityBCStrategy = 19; -// static const char MultiphaseNoSlipBCStrategy = 20; -// static const char MultiphaseVelocityBCStrategy = 21; -// static const char NonReflectingInflowBCStrategy = 22; -// static const char NonReflectingOutflowWithRelaxationBCStrategy = 23; -// static const char MultiphasePressureBCStrategy = 24; - public: BCStrategy() = default; virtual ~BCStrategy() = default; virtual void addDistributions(SPtr<DistributionArray3D> distributions) = 0; - virtual void addDistributionsH(SPtr<DistributionArray3D> distributionsH) {} - virtual void addDistributionsH2(SPtr<DistributionArray3D> distributionsH2) {} void setBlock(SPtr<Block3D> block); void setNodeIndex(int x1, int x2, int x3); void setBcPointer(SPtr<BoundaryConditions> bcPtr); void setCompressible(bool c); void setCollFactor(real cf); - char getType(); bool isPreCollision(); virtual SPtr<BCStrategy> clone() = 0; SPtr<BCArray3D> getBcArray(); void setBcArray(SPtr<BCArray3D> bcarray); virtual void applyBC() = 0; - bool getThixotropy(){ return thixotropy; }; protected: bool compressible { false }; - char type; bool preCollision; - bool thixotropy { false }; SPtr<BoundaryConditions> bcPtr; SPtr<DistributionArray3D> distributions; - SPtr<DistributionArray3D> distributionsH; - SPtr<DistributionArray3D> distributionsH2; SPtr<BCArray3D> bcArray; SPtr<Block3D> block; diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategyRegister.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategyRegister.cpp new file mode 100644 index 000000000..fafff9e24 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategyRegister.cpp @@ -0,0 +1,25 @@ +#include "BCStrategyRegister.h" +#include "BC.h" +#include "BCStrategy.h" + +std::mutex BCStrategyRegister::instantiation_mutex = std::mutex(); +std::shared_ptr<BCStrategyRegister> BCStrategyRegister::instance = std::shared_ptr<BCStrategyRegister>(); + +std::shared_ptr<BCStrategyRegister> BCStrategyRegister::getInstance() +{ + std::lock_guard<std::mutex> myLock(instantiation_mutex); + if (!instance) { + instance = std::shared_ptr<BCStrategyRegister>(new BCStrategyRegister); + } + return instance; +} + +void BCStrategyRegister::setBCStrategy(char strategyKey, std::shared_ptr<BCStrategy> bcStrategy) +{ + bcMap.insert(std::make_pair(strategyKey, bcStrategy)); +} + +std::shared_ptr<BCStrategy> BCStrategyRegister::getBCStrategy(char strategyKey) +{ + return bcMap[strategyKey]; +} \ No newline at end of file diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategyType.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategyRegister.h similarity index 58% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategyType.h rename to src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategyRegister.h index fccdef64f..57cb089fe 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategyType.h +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategyRegister.h @@ -26,41 +26,38 @@ // You should have received a copy of the GNU General Public License along // with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. // -//! \file BCStrategy.h +//! \file BCStrategyRegister.h //! \ingroup BoundarConditions //! \author Konstantin Kutscher //======================================================================================= -#ifndef BCStrategyType_H -#define BCStrategyType_H +#ifndef BCStrategyRegister_H +#define BCStrategyRegister_H -struct BCStrategyType +#include <memory> +#include <map> +#include <mutex> + +class BC; +class BCStrategy; + +class BCStrategyRegister { - static const char VelocityBCStrategy = 0; - static const char EqDensityBCStrategy = 1; - static const char NonEqDensityBCStrategy = 2; - static const char NoSlipBCStrategy = 3; - static const char SlipBCStrategy = 4; - static const char HighViscosityNoSlipBCStrategy = 5; - static const char ThinWallNoSlipBCStrategy = 6; - static const char VelocityWithDensityBCStrategy = 7; - static const char NonReflectingOutflowBCStrategy = 8; - static const char ThixotropyVelocityBCStrategy = 9; - static const char ThixotropyDensityBCStrategy = 10; - static const char ThixotropyNoSlipBCStrategy = 11; - static const char ThixotropyNonReflectingOutflowBCStrategy = 12; - static const char ThixotropyVelocityWithDensityBCStrategy = 13; - static const char RheologyBinghamModelNoSlipBCStrategy = 14; - static const char RheologyHerschelBulkleyModelNoSlipBCStrategy = 15; - static const char SimpleVelocityBCStrategy = 16; - static const char SimpleSlipBCStrategy = 17; - static const char RheologyPowellEyringModelNoSlipBCStrategy = 18; - static const char RheologyBinghamModelVelocityBCStrategy = 19; - static const char MultiphaseNoSlipBCStrategy = 20; - static const char MultiphaseVelocityBCStrategy = 21; - static const char NonReflectingInflowBCStrategy = 22; - static const char NonReflectingOutflowWithRelaxationBCStrategy = 23; - static const char MultiphasePressureBCStrategy = 24; -}; +public: + BCStrategyRegister(const BCStrategyRegister &) = delete; + BCStrategyRegister &operator=(const BCStrategyRegister &rhs) = delete; + static std::shared_ptr<BCStrategyRegister> getInstance(); + virtual ~BCStrategyRegister() = default; + + void setBCStrategy(char bcStrategyKey, std::shared_ptr<BCStrategy> bcStrategy); + std::shared_ptr<BCStrategy> getBCStrategy(char type); + +private: + BCStrategyRegister() = default; + static std::mutex instantiation_mutex; + static std::shared_ptr<BCStrategyRegister> instance; + + std::map<char, std::shared_ptr<BCStrategy>> bcMap; +}; #endif \ No newline at end of file diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h index 92cfb6f3c..cbcc2b0da 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h @@ -311,8 +311,8 @@ public: return (((flag >> (optionDigits * direction)) & maxOptionVal) != 0); } - void setBCStrategyType(char alg) { algorithmType = alg; } - char getBCStrategyType() { return algorithmType; } + void setBCStrategyKey(char key) { bcStrategyKey = key; } + char getBCStrategyKey() { return bcStrategyKey; } public: static const int optionDigits = 2; //--> 2 bits for secondary Option --> maxOptionVal = 7 @@ -335,7 +335,7 @@ protected: float nx1{ vf::basics::constant::c0o1 }, nx2{ vf::basics::constant::c0o1 }, nx3{ vf::basics::constant::c0o1 }; - char algorithmType { -1 }; + char bcStrategyKey { -1 }; private: friend class MPIIORestartSimulationObserver; diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/DensityBC.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/DensityBC.cpp index 5dacf756c..1256cfc75 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/DensityBC.cpp +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/DensityBC.cpp @@ -149,7 +149,7 @@ void DensityBC::adaptBC(const D3Q27Interactor &interactor, SPtr<BoundaryConditio const real &worldX2, const real &worldX3, const real &time) { this->setNodeDensity(interactor, bc, worldX1, worldX2, worldX3, time); - bc->setBCStrategyType(strategyType); + bc->setBCStrategyKey(bcStrategyKey); } /*==========================================================*/ void DensityBC::setNodeDensity(const D3Q27Interactor & /*interactor*/, SPtr<BoundaryConditions> bc, diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/EqDensityBCStrategy.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/EqDensityBCStrategy.cpp index 720ad7cc3..26004e89b 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/EqDensityBCStrategy.cpp +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/EqDensityBCStrategy.cpp @@ -33,11 +33,9 @@ #include "EqDensityBCStrategy.h" #include "BoundaryConditions.h" #include "DistributionArray3D.h" -#include "BCStrategyType.h" EqDensityBCStrategy::EqDensityBCStrategy() { - BCStrategy::type = BCStrategyType::EqDensityBCStrategy; BCStrategy::preCollision = false; } ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/HighViscosityNoSlipBCStrategy.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/HighViscosityNoSlipBCStrategy.cpp index 1556be3ee..cae6af9ed 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/HighViscosityNoSlipBCStrategy.cpp +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/HighViscosityNoSlipBCStrategy.cpp @@ -33,11 +33,9 @@ #include "HighViscosityNoSlipBCStrategy.h" #include "BoundaryConditions.h" #include "DistributionArray3D.h" -#include "BCStrategyType.h" HighViscosityNoSlipBCStrategy::HighViscosityNoSlipBCStrategy() { - BCStrategy::type = BCStrategyType::HighViscosityNoSlipBCStrategy; BCStrategy::preCollision = true; } ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseBCStrategyType.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseBCStrategyType.h new file mode 100644 index 000000000..ae5d830b2 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseBCStrategyType.h @@ -0,0 +1,73 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \file BCStrategy.h +//! \ingroup BoundarConditions +//! \author Konstantin Kutscher +//======================================================================================= + +#ifndef MultiphaseBCStrategyType_H +#define MultiphaseBCStrategyType_H + +struct MultiphaseBCStrategyType +{ + //static const char VelocityBCStrategy = 0; + //static const char EqDensityBCStrategy = 1; + //static const char NonEqDensityBCStrategy = 2; + //static const char NoSlipBCStrategy = 3; + //static const char SlipBCStrategy = 4; + //static const char HighViscosityNoSlipBCStrategy = 5; + //static const char ThinWallNoSlipBCStrategy = 6; + //static const char VelocityWithDensityBCStrategy = 7; + //static const char NonReflectingOutflowBCStrategy = 8; + //static const char ThixotropyVelocityBCStrategy = 9; + //static const char ThixotropyDensityBCStrategy = 10; + //static const char ThixotropyNoSlipBCStrategy = 11; + //static const char ThixotropyNonReflectingOutflowBCStrategy = 12; + //static const char ThixotropyVelocityWithDensityBCStrategy = 13; + //static const char RheologyBinghamModelNoSlipBCStrategy = 14; + //static const char RheologyHerschelBulkleyModelNoSlipBCStrategy = 15; + //static const char SimpleVelocityBCStrategy = 16; + //static const char SimpleSlipBCStrategy = 17; + //static const char RheologyPowellEyringModelNoSlipBCStrategy = 18; + //static const char RheologyBinghamModelVelocityBCStrategy = 19; + //static const char MultiphaseNoSlipBCStrategy = 20; + //static const char MultiphaseVelocityBCStrategy = 21; + //static const char NonReflectingInflowBCStrategy = 22; + //static const char NonReflectingOutflowWithRelaxationBCStrategy = 23; + //static const char MultiphasePressureBCStrategy = 24; + + + static const char MultiphaseNoSlipBCStrategy = 0; + static const char MultiphaseVelocityBCStrategy = 1; + static const char MultiphasePressureBCStrategy = 2; + static const char MultiphaseNonReflectingOutflowBCStrategy = 3; + static const char MultiphaseSlipBCStrategy = 4; +}; + +#endif \ No newline at end of file diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBC.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBC.h index fdb8e5854..28c1f2ed1 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBC.h +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBC.h @@ -56,7 +56,7 @@ public: void adaptBC(const D3Q27Interactor & /*interactor*/, SPtr<BoundaryConditions> bc, const real & /*worldX1*/, const real & /*worldX2*/, const real & /*worldX3*/, const real & /*time*/ = 0) override { - bc->setBCStrategyType(strategyType); + bc->setBCStrategyKey(bcStrategyKey); } private: diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCStrategy.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCStrategy.cpp index 1c3cef763..45c2ea759 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCStrategy.cpp +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCStrategy.cpp @@ -34,11 +34,9 @@ #include "NoSlipBCStrategy.h" #include "BoundaryConditions.h" #include "DistributionArray3D.h" -#include "BCStrategyType.h" NoSlipBCStrategy::NoSlipBCStrategy() { - BCStrategy::type = BCStrategyType::NoSlipBCStrategy; BCStrategy::preCollision = false; } ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonEqDensityBCStrategy.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/NonEqDensityBCStrategy.cpp index fd2ed61b8..dd27f84e9 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonEqDensityBCStrategy.cpp +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/NonEqDensityBCStrategy.cpp @@ -34,11 +34,9 @@ #include "BoundaryConditions.h" #include "DistributionArray3D.h" -#include "BCStrategyType.h" NonEqDensityBCStrategy::NonEqDensityBCStrategy() { - BCStrategy::type = BCStrategyType::NonEqDensityBCStrategy; BCStrategy::preCollision = false; } ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingInflowBCStrategy.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingInflowBCStrategy.cpp index a9abc090c..066f59c00 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingInflowBCStrategy.cpp +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingInflowBCStrategy.cpp @@ -35,11 +35,9 @@ #include "BoundaryConditions.h" #include "D3Q27System.h" #include "DistributionArray3D.h" -#include "BCStrategyType.h" NonReflectingInflowBCStrategy::NonReflectingInflowBCStrategy() { - BCStrategy::type = BCStrategyType::NonReflectingInflowBCStrategy; BCStrategy::preCollision = true; } ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCStrategy.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCStrategy.cpp index 8885e6c61..637787dc0 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCStrategy.cpp +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCStrategy.cpp @@ -35,11 +35,9 @@ #include "BoundaryConditions.h" #include "D3Q27System.h" #include "DistributionArray3D.h" -#include "BCStrategyType.h" NonReflectingOutflowBCStrategy::NonReflectingOutflowBCStrategy() { - BCStrategy::type = BCStrategyType::NonReflectingOutflowBCStrategy; BCStrategy::preCollision = true; } ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.cpp index c69d86ba3..0e7be0e3d 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.cpp +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.cpp @@ -35,11 +35,9 @@ #include "BoundaryConditions.h" #include "D3Q27System.h" #include "DistributionArray3D.h" -#include "BCStrategyType.h" NonReflectingOutflowWithRelaxationBCStrategy::NonReflectingOutflowWithRelaxationBCStrategy() { - BCStrategy::type = BCStrategyType::NonReflectingOutflowWithRelaxationBCStrategy; BCStrategy::preCollision = true; } ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleSlipBCStrategy.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleSlipBCStrategy.cpp index 79edfb8e7..c06725760 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleSlipBCStrategy.cpp +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleSlipBCStrategy.cpp @@ -33,11 +33,9 @@ #include "SimpleSlipBCStrategy.h" #include "DistributionArray3D.h" #include "BoundaryConditions.h" -#include "BCStrategyType.h" SimpleSlipBCStrategy::SimpleSlipBCStrategy() { - BCStrategy::type = BCStrategyType::SimpleSlipBCStrategy; BCStrategy::preCollision = false; } ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleVelocityBCStrategy.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleVelocityBCStrategy.cpp index 03a3aeb1b..b37d04922 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleVelocityBCStrategy.cpp +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleVelocityBCStrategy.cpp @@ -34,11 +34,9 @@ #include "SimpleVelocityBCStrategy.h" #include "DistributionArray3D.h" #include "BoundaryConditions.h" -#include "BCStrategyType.h" SimpleVelocityBCStrategy::SimpleVelocityBCStrategy() { - BCStrategy::type = BCStrategyType::SimpleVelocityBCStrategy; BCStrategy::preCollision = false; } ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBC.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBC.cpp index 7f5e69835..35b9e22ec 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBC.cpp +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBC.cpp @@ -71,5 +71,5 @@ void SlipBC::adaptBC(const D3Q27Interactor &interactor, SPtr<BoundaryConditions> else if (bc->hasSlipBoundaryFlag(DIR_00M)) bc->setNormalVector(vf::basics::constant::c0o1, vf::basics::constant::c0o1, -vf::basics::constant::c1o1); - bc->setBCStrategyType(strategyType); + bc->setBCStrategyKey(bcStrategyKey); } diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCStrategy.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCStrategy.cpp index f0e246e57..1c8938e98 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCStrategy.cpp +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCStrategy.cpp @@ -1,11 +1,9 @@ #include "SlipBCStrategy.h" #include "BoundaryConditions.h" #include "DistributionArray3D.h" -#include "BCStrategyType.h" SlipBCStrategy::SlipBCStrategy() { - BCStrategy::type = BCStrategyType::SlipBCStrategy; BCStrategy::preCollision = false; } ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallBCSet.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallBCSet.cpp index b89b015c2..f7413101a 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallBCSet.cpp +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallBCSet.cpp @@ -35,7 +35,6 @@ #include "ThinWallNoSlipBCStrategy.h" #include "LBMKernel.h" -#include "BCStrategyType.h" ////////////////////////////////////////////////////////////////////////// ThinWallBCSet::ThinWallBCSet(SPtr<ILBMKernel> kernel) : BCSet(kernel) {} @@ -51,7 +50,7 @@ void ThinWallBCSet::applyPostCollisionBC() BCSet::applyPostCollisionBC(); for (SPtr<BCStrategy> bc : postBC) { - if (bc->getType() == BCStrategyType::ThinWallNoSlipBCStrategy) { + if (dynamicPointerCast<ThinWallNoSlipBCStrategy>(bc)->isThinWallNoSlipBCStrategy()) { dynamicPointerCast<ThinWallNoSlipBCStrategy>(bc)->setPass(2); bc->applyBC(); dynamicPointerCast<ThinWallNoSlipBCStrategy>(bc)->setPass(1); diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallNoSlipBCStrategy.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallNoSlipBCStrategy.cpp index 3d78fd9cc..01f0d6a4c 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallNoSlipBCStrategy.cpp +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallNoSlipBCStrategy.cpp @@ -34,11 +34,9 @@ #include "BoundaryConditions.h" #include "D3Q27EsoTwist3DSplittedVector.h" -#include "BCStrategyType.h" ThinWallNoSlipBCStrategy::ThinWallNoSlipBCStrategy() { - BCStrategy::type = BCStrategyType::ThinWallNoSlipBCStrategy; BCStrategy::preCollision = false; pass = 1; } @@ -91,4 +89,12 @@ void ThinWallNoSlipBCStrategy::addDistributions(SPtr<DistributionArray3D> distri this->distributions = distributions; } ////////////////////////////////////////////////////////////////////////// -void ThinWallNoSlipBCStrategy::setPass(int pass) { this->pass = pass; } +void ThinWallNoSlipBCStrategy::setPass(int pass) +{ + this->pass = pass; +} + +bool ThinWallNoSlipBCStrategy::isThinWallNoSlipBCStrategy() +{ + return true; +} diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallNoSlipBCStrategy.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallNoSlipBCStrategy.h index deba685a3..441d575dd 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallNoSlipBCStrategy.h +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallNoSlipBCStrategy.h @@ -46,6 +46,7 @@ public: SPtr<BCStrategy> clone() override; void addDistributions(SPtr<DistributionArray3D> distributions) override; void setPass(int pass); + bool isThinWallNoSlipBCStrategy(); void applyBC() override; protected: diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBC.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBC.cpp index 4318cfabb..d88ab8934 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBC.cpp +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBC.cpp @@ -302,7 +302,7 @@ void VelocityBC::adaptBC(const D3Q27Interactor &interactor, SPtr<BoundaryConditi const real &worldX2, const real &worldX3, const real &time) { this->setNodeVelocity(interactor, bc, worldX1, worldX2, worldX3, time); - bc->setBCStrategyType(strategyType); + bc->setBCStrategyKey(bcStrategyKey); } /*==========================================================*/ void VelocityBC::setNodeVelocity(const D3Q27Interactor & /*interactor*/, SPtr<BoundaryConditions> bc, diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCStrategy.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCStrategy.cpp index c5a15631f..1b84b2de6 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCStrategy.cpp +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCStrategy.cpp @@ -35,11 +35,9 @@ #include "BoundaryConditions.h" #include "DistributionArray3D.h" #include "Block3D.h" -#include "BCStrategyType.h" VelocityBCStrategy::VelocityBCStrategy() { - BCStrategy::type = BCStrategyType::VelocityBCStrategy; BCStrategy::preCollision = false; } ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityWithDensityBCStrategy.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityWithDensityBCStrategy.cpp index aa8dc479d..b6a2548ae 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityWithDensityBCStrategy.cpp +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityWithDensityBCStrategy.cpp @@ -33,11 +33,9 @@ #include "VelocityWithDensityBCStrategy.h" #include "BCArray3D.h" #include "DistributionArray3D.h" -#include "BCStrategyType.h" VelocityWithDensityBCStrategy::VelocityWithDensityBCStrategy() { - BCStrategy::type = BCStrategyType::VelocityWithDensityBCStrategy; BCStrategy::preCollision = false; } ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/Parallel/MPIIODataStructures.h b/src/cpu/VirtualFluidsCore/Parallel/MPIIODataStructures.h index dd5b9935a..cb0ed8578 100644 --- a/src/cpu/VirtualFluidsCore/Parallel/MPIIODataStructures.h +++ b/src/cpu/VirtualFluidsCore/Parallel/MPIIODataStructures.h @@ -124,7 +124,7 @@ struct BoundaryCondition { float nx1, nx2, nx3; // not double!!! float q[26]; // not double!!! - char algorithmType; + char bcStrategyKey; }; //! \struct boundCondParam diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationBESimulationObserver.cpp b/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationBESimulationObserver.cpp index 456c92eb0..068390833 100644 --- a/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationBESimulationObserver.cpp +++ b/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationBESimulationObserver.cpp @@ -705,7 +705,7 @@ void MPIIOMigrationBESimulationObserver::writeBoundaryConds(int step) bouCond->nx3 = bcArr->bcvector[bc]->nx3; for (int iq = 0; iq < 26; iq++) bouCond->q[iq] = bcArr->bcvector[bc]->getQ(iq); - bouCond->algorithmType = bcArr->bcvector[bc]->getBCStrategyType(); + bouCond->bcStrategyKey = bcArr->bcvector[bc]->getBCStrategyKey(); } bcVector[ic].push_back(*bouCond); @@ -1668,7 +1668,7 @@ void MPIIOMigrationBESimulationObserver::readBoundaryConds(int step) bc->nx3 = bcArray[ibc].nx3; for (int iq = 0; iq < 26; iq++) bc->setQ(bcArray[ibc].q[iq], iq); - bc->setBCStrategyType(bcArray[ibc].algorithmType); + bc->setBCStrategyKey(bcArray[ibc].bcStrategyKey); } bcVector.push_back(bc); diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationSimulationObserver.cpp b/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationSimulationObserver.cpp index 590a2812b..b6ea1bbf6 100644 --- a/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationSimulationObserver.cpp +++ b/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationSimulationObserver.cpp @@ -786,7 +786,7 @@ void MPIIOMigrationSimulationObserver::writeBoundaryConds(int step) bouCond->nx3 = bcArr->bcvector[bc]->nx3; for (int iq = 0; iq < 26; iq++) bouCond->q[iq] = bcArr->bcvector[bc]->getQ(iq); - bouCond->algorithmType = bcArr->bcvector[bc]->getBCStrategyType(); + bouCond->bcStrategyKey = bcArr->bcvector[bc]->getBCStrategyKey(); } bcVector[ic].push_back(*bouCond); @@ -1477,7 +1477,7 @@ void MPIIOMigrationSimulationObserver::readBoundaryConds(int step) bc->nx3 = bcArray[ibc].nx3; for (int iq = 0; iq < 26; iq++) bc->setQ(bcArray[ibc].q[iq], iq); - bc->setBCStrategyType(bcArray[ibc].algorithmType); + bc->setBCStrategyKey(bcArray[ibc].bcStrategyKey); } bcVector.push_back(bc); diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIORestartSimulationObserver.cpp b/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIORestartSimulationObserver.cpp index 07a63a48b..87de527b6 100644 --- a/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIORestartSimulationObserver.cpp +++ b/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIORestartSimulationObserver.cpp @@ -859,7 +859,7 @@ void MPIIORestartSimulationObserver::writeBoundaryConds(int step) bouCond->nx3 = bcArr->bcvector[bc]->nx3; for (int iq = 0; iq < 26; iq++) bouCond->q[iq] = bcArr->bcvector[bc]->getQ(iq); - bouCond->algorithmType = bcArr->bcvector[bc]->getBCStrategyType(); + bouCond->bcStrategyKey = bcArr->bcvector[bc]->getBCStrategyKey(); } bcVector.push_back(*bouCond); @@ -1546,7 +1546,7 @@ void MPIIORestartSimulationObserver::readBoundaryConds(int step) bc->nx3 = bcArray[index].nx3; for (int iq = 0; iq < 26; iq++) bc->setQ(bcArray[index].q[iq], iq); - bc->setBCStrategyType(bcArray[index].algorithmType); + bc->setBCStrategyKey(bcArray[index].bcStrategyKey); } bcVector.push_back(bc); diff --git a/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.cpp b/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.cpp index af0fb29ca..d379284f0 100644 --- a/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.cpp +++ b/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.cpp @@ -88,8 +88,8 @@ void BoundaryConditionsBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> bloc for (int x1 = minX1; x1 < maxX1; x1++) { if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { if ((bcPtr = bcArray->getBC(x1, x2, x3)) != NULL) { - char alg = bcPtr->getBCStrategyType(); - SPtr<BCStrategy> bca = bcMap[alg]; + char bcStrategyKey = bcPtr->getBCStrategyKey(); + SPtr<BCStrategy> bca = BCStrategyRegister::getInstance()->getBCStrategy(bcStrategyKey); if (bca) { bca = bca->clone(); @@ -109,8 +109,4 @@ void BoundaryConditionsBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> bloc } } } -////////////////////////////////////////////////////////////////////////// -void BoundaryConditionsBlockVisitor::addBC(SPtr<BC> bc) -{ - bcMap.insert(std::make_pair(bc->getBCStrategyType(), bc->getBCStrategy())); -} + diff --git a/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.h b/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.h index 8954bf73a..61697735b 100644 --- a/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.h +++ b/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.h @@ -35,14 +35,11 @@ #define BoundaryConditionBlockVisitor_h__ #include <PointerDefinitions.h> -#include <map> - #include "Block3DVisitor.h" class Grid3D; class Block3D; -class BCStrategy; -class BC; + //! \brief set boundary conditions class BoundaryConditionsBlockVisitor : public Block3DVisitor @@ -52,10 +49,6 @@ public: ~BoundaryConditionsBlockVisitor() override; void visit(SPtr<Grid3D> grid, SPtr<Block3D> block) override; - void addBC(SPtr<BC> bc); -protected: -private: - std::map<char, SPtr<BCStrategy>> bcMap; }; #endif // BoundaryConditionBlockVisitor_h__ -- GitLab