From d202737319243a39422449c62f8c7f5abbff01f4 Mon Sep 17 00:00:00 2001 From: Kutscher <kutscher@irmb.tu-bs.de> Date: Wed, 15 Nov 2023 15:13:07 +0100 Subject: [PATCH] refactoring of kernels --- apps/cpu/ConvectionOfVortex/cov.cpp | 6 +- apps/cpu/LaminarTubeFlow/ltf.cpp | 2 +- apps/cpu/PoiseuilleFlow/pf1.cpp | 2 +- apps/cpu/ViskomatXL/viskomat.cpp | 4 +- apps/cpu/rheometer/rheometer.cpp | 4 +- apps/cpu/sphere/sphere.cpp | 4 +- src/cpu/VirtualFluids.h | 18 +- ....cpp => B92IncompressibleNavierStokes.cpp} | 18 +- ...rnel.h => B92IncompressibleNavierStokes.h} | 18 +- src/cpu/core/LBM/BasicLBMKernel.cpp | 57 - src/cpu/core/LBM/BasicLBMKernel.h | 25 - ...ibleCumulant4thOrderViscosityLBMKernel.cpp | 1076 --------- ...ssibleCumulant4thOrderViscosityLBMKernel.h | 51 - src/cpu/core/LBM/CumulantK17LBMKernel.cpp | 639 ------ src/cpu/core/LBM/CumulantK17LBMKernel.h | 76 - src/cpu/core/LBM/CumulantLBMKernel.cpp | 1966 ----------------- src/cpu/core/LBM/CumulantLBMKernel.h | 55 - ...ssibleCumulantWithSpongeLayerLBMKernel.cpp | 1012 --------- ...ressibleCumulantWithSpongeLayerLBMKernel.h | 42 - src/cpu/core/LBM/InitDensityLBMKernel.cpp | 1075 --------- src/cpu/core/LBM/InitDensityLBMKernel.h | 31 - src/cpu/core/LBM/{ => Interpolation}/ICell.h | 0 ...el.cpp => K15CompressibleNavierStokes.cpp} | 156 +- ...Kernel.h => K15CompressibleNavierStokes.h} | 10 +- ....cpp => K16IncompressibleNavierStokes.cpp} | 24 +- ...rnel.h => K16IncompressibleNavierStokes.h} | 10 +- src/cpu/core/LBM/LBMKernelETD3Q27BGK.cpp | 303 --- src/cpu/core/LBM/LBMKernelETD3Q27BGK.h | 36 - .../InitDistributionsFromFileBlockVisitor.cpp | 241 -- .../InitDistributionsFromFileBlockVisitor.h | 25 - 30 files changed, 73 insertions(+), 6913 deletions(-) rename src/cpu/core/LBM/{BGKLBMKernel.cpp => B92IncompressibleNavierStokes.cpp} (96%) rename src/cpu/core/LBM/{BGKLBMKernel.h => B92IncompressibleNavierStokes.h} (64%) delete mode 100644 src/cpu/core/LBM/BasicLBMKernel.cpp delete mode 100644 src/cpu/core/LBM/BasicLBMKernel.h delete mode 100644 src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.cpp delete mode 100644 src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.h delete mode 100644 src/cpu/core/LBM/CumulantK17LBMKernel.cpp delete mode 100644 src/cpu/core/LBM/CumulantK17LBMKernel.h delete mode 100644 src/cpu/core/LBM/CumulantLBMKernel.cpp delete mode 100644 src/cpu/core/LBM/CumulantLBMKernel.h delete mode 100644 src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.cpp delete mode 100644 src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.h delete mode 100644 src/cpu/core/LBM/InitDensityLBMKernel.cpp delete mode 100644 src/cpu/core/LBM/InitDensityLBMKernel.h rename src/cpu/core/LBM/{ => Interpolation}/ICell.h (100%) rename src/cpu/core/LBM/{CompressibleCumulantLBMKernel.cpp => K15CompressibleNavierStokes.cpp} (84%) rename src/cpu/core/LBM/{CompressibleCumulantLBMKernel.h => K15CompressibleNavierStokes.h} (85%) rename src/cpu/core/LBM/{IncompressibleCumulantLBMKernel.cpp => K16IncompressibleNavierStokes.cpp} (98%) rename src/cpu/core/LBM/{IncompressibleCumulantLBMKernel.h => K16IncompressibleNavierStokes.h} (83%) delete mode 100644 src/cpu/core/LBM/LBMKernelETD3Q27BGK.cpp delete mode 100644 src/cpu/core/LBM/LBMKernelETD3Q27BGK.h delete mode 100644 src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.cpp delete mode 100644 src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.h diff --git a/apps/cpu/ConvectionOfVortex/cov.cpp b/apps/cpu/ConvectionOfVortex/cov.cpp index 6aebd9947..3867ed9a3 100644 --- a/apps/cpu/ConvectionOfVortex/cov.cpp +++ b/apps/cpu/ConvectionOfVortex/cov.cpp @@ -205,10 +205,8 @@ void run() } - SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel()); - //dynamicPointerCast<CompressibleCumulant4thOrderViscosityLBMKernel>(kernel)->setBulkViscosity(10.0*nuLB); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulantLBMKernel()); - //dynamicPointerCast<CompressibleCumulantLBMKernel>(kernel)->setBulkOmegaToOmega(true); + SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new K15CompressibleNavierStokes()); + //dynamicPointerCast<K15CompressibleNavierStokes>(kernel)->setBulkOmegaToOmega(true); // SPtr<BCSet> bcSet(new BCSet()); diff --git a/apps/cpu/LaminarTubeFlow/ltf.cpp b/apps/cpu/LaminarTubeFlow/ltf.cpp index 918bf7753..d03b14b0a 100644 --- a/apps/cpu/LaminarTubeFlow/ltf.cpp +++ b/apps/cpu/LaminarTubeFlow/ltf.cpp @@ -102,7 +102,7 @@ void run(string configname) //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel()); //double bulckViscosity = 3700*nuLB; //dynamicPointerCast<CompressibleCumulant4thOrderViscosityLBMKernel>(kernel)->setBulkViscosity(bulckViscosity); - SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CumulantK17LBMKernel()); + SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new K17CompressibleNavierStokes()); kernel->setBCSet(bcProc); kernel->setBCSet(bcProc); diff --git a/apps/cpu/PoiseuilleFlow/pf1.cpp b/apps/cpu/PoiseuilleFlow/pf1.cpp index 78446e981..393393e71 100644 --- a/apps/cpu/PoiseuilleFlow/pf1.cpp +++ b/apps/cpu/PoiseuilleFlow/pf1.cpp @@ -114,7 +114,7 @@ void pf1() //LBM kernel definition SPtr<LBMKernel> kernel; - kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel()); + kernel = SPtr<LBMKernel>(new K16IncompressibleNavierStokes()); SPtr<BCSet> bcProc(new BCSet()); kernel->setBCSet(bcProc); diff --git a/apps/cpu/ViskomatXL/viskomat.cpp b/apps/cpu/ViskomatXL/viskomat.cpp index e02b8ff51..563e95a6b 100644 --- a/apps/cpu/ViskomatXL/viskomat.cpp +++ b/apps/cpu/ViskomatXL/viskomat.cpp @@ -166,10 +166,10 @@ void bflow(string configname) SPtr<BCSet> bcProc; bcProc = SPtr<BCSet>(new BCSet()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new BGKLBMKernel()); + //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new B92IncompressibleNavierStokes()); //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CumulantLBMKernel()); //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel()); + //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new K16IncompressibleNavierStokes()); //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CumulantK17LBMKernel()); SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyBinghamModelLBMKernel()); //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new HerschelBulkleyModelLBMKernel()); diff --git a/apps/cpu/rheometer/rheometer.cpp b/apps/cpu/rheometer/rheometer.cpp index a7528b8c3..c57bc8c1f 100644 --- a/apps/cpu/rheometer/rheometer.cpp +++ b/apps/cpu/rheometer/rheometer.cpp @@ -198,8 +198,8 @@ void bflow(string configname) SPtr<BCSet> bcProc; bcProc = SPtr<BCSet>(new BCSet()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new BGKLBMKernel()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel()); + //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new B92IncompressibleNavierStokes()); + //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new K16IncompressibleNavierStokes()); //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CumulantLBMKernel()); //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel()); //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CumulantK17LBMKernel()); diff --git a/apps/cpu/sphere/sphere.cpp b/apps/cpu/sphere/sphere.cpp index 5925fe093..d215e1e6f 100644 --- a/apps/cpu/sphere/sphere.cpp +++ b/apps/cpu/sphere/sphere.cpp @@ -212,8 +212,8 @@ void run(string configname) UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); } - SPtr<LBMKernel> kernel(new IncompressibleCumulantLBMKernel()); - //SPtr<LBMKernel> kernel(new CompressibleCumulantLBMKernel()); + SPtr<LBMKernel> kernel(new K16IncompressibleNavierStokes()); + //SPtr<LBMKernel> kernel(new K15CompressibleNavierStokes()); SPtr<BCSet> bcSet(new BCSet()); diff --git a/src/cpu/VirtualFluids.h b/src/cpu/VirtualFluids.h index 81beddf3e..3b0b80225 100644 --- a/src/cpu/VirtualFluids.h +++ b/src/cpu/VirtualFluids.h @@ -213,21 +213,17 @@ #include <LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.h> #include <LBM/Interpolation/IncompressibleOffsetInterpolator.h> #include <LBM/Interpolation/Interpolator.h> -#include <IncompressibleCumulantWithSpongeLayerLBMKernel.h> -#include <LBM/CompressibleCumulant4thOrderViscosityLBMKernel.h> -#include <LBM/CompressibleCumulantLBMKernel.h> #include <LBM/D3Q27System.h> -#include <LBM/ICell.h> -#include <LBM/IncompressibleCumulantLBMKernel.h> -#include <LBM/InitDensityLBMKernel.h> +#include <LBM/Interpolation/ICell.h> #include <LBM/LBMKernel.h> -#include <LBM/LBMKernelETD3Q27BGK.h> #include <LBM/LBMSystem.h> #include <LBM/LBMUnitConverter.h> -#include <LBM/BGKLBMKernel.h> -#include <LBM/CumulantLBMKernel.h> -#include <LBM/CumulantK17LBMKernel.h> + +#include <LBM/B92IncompressibleNavierStokes.h> +#include <LBM/K15CompressibleNavierStokes.h> +#include <LBM/K16IncompressibleNavierStokes.h> +#include <LBM/K17CompressibleNavierStokes.h> #include <geometry3d/CoordinateTransformation3D.h> @@ -277,7 +273,6 @@ #include <Utilities/VoxelMatrixUtil.hpp> #include <CheckRatioBlockVisitor.h> -#include <InitDistributionsFromFileBlockVisitor.h> #include <InitDistributionsWithInterpolationGridVisitor.h> #include <SpongeLayerBlockVisitor.h> #include <Visitors/Block3DVisitor.h> @@ -309,7 +304,6 @@ #include <Visitors/BoundaryConditionsBlockVisitor.h> #include <Visitors/BoundaryConditionsBlockVisitor.h> #include <Visitors/ChangeBoundaryDensityBlockVisitor.h> -#include <InitDistributionsFromFileBlockVisitor.h> #include <InitDistributionsWithInterpolationGridVisitor.h> #include <InitThixotropyBlockVisitor.h> #include <CheckRatioBlockVisitor.h> diff --git a/src/cpu/core/LBM/BGKLBMKernel.cpp b/src/cpu/core/LBM/B92IncompressibleNavierStokes.cpp similarity index 96% rename from src/cpu/core/LBM/BGKLBMKernel.cpp rename to src/cpu/core/LBM/B92IncompressibleNavierStokes.cpp index d5cae0039..755d97ca1 100644 --- a/src/cpu/core/LBM/BGKLBMKernel.cpp +++ b/src/cpu/core/LBM/B92IncompressibleNavierStokes.cpp @@ -1,4 +1,4 @@ -#include "BGKLBMKernel.h" +#include "B92IncompressibleNavierStokes.h" #include "BCArray3D.h" #include "BCSet.h" #include "D3Q27EsoTwist3DSoA.h" @@ -11,21 +11,21 @@ #define PROOF_CORRECTNESS ////////////////////////////////////////////////////////////////////////// -BGKLBMKernel::BGKLBMKernel() { this->compressible = false; } +B92IncompressibleNavierStokes::B92IncompressibleNavierStokes() { this->compressible = false; } ////////////////////////////////////////////////////////////////////////// -BGKLBMKernel::~BGKLBMKernel(void) = default; +B92IncompressibleNavierStokes::~B92IncompressibleNavierStokes(void) = default; ////////////////////////////////////////////////////////////////////////// -void BGKLBMKernel::initDataSet() +void B92IncompressibleNavierStokes::initDataSet() { SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9)); dataSet->setFdistributions(d); } ////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> BGKLBMKernel::clone() +SPtr<LBMKernel> B92IncompressibleNavierStokes::clone() { - SPtr<LBMKernel> kernel(new BGKLBMKernel()); + SPtr<LBMKernel> kernel(new B92IncompressibleNavierStokes()); kernel->setNX(nx); - std::dynamic_pointer_cast<BGKLBMKernel>(kernel)->initDataSet(); + std::dynamic_pointer_cast<B92IncompressibleNavierStokes>(kernel)->initDataSet(); kernel->setCollisionFactor(this->collFactor); kernel->setBCSet(bcSet->clone(kernel)); kernel->setWithForcing(withForcing); @@ -38,7 +38,7 @@ SPtr<LBMKernel> BGKLBMKernel::clone() return kernel; } ////////////////////////////////////////////////////////////////////////// -void BGKLBMKernel::calculate(int step) +void B92IncompressibleNavierStokes::calculate(int step) { using namespace D3Q27System; // using namespace UbMath; @@ -302,4 +302,4 @@ void BGKLBMKernel::calculate(int step) } } ////////////////////////////////////////////////////////////////////////// -real BGKLBMKernel::getCalculationTime() { return vf::basics::constant::c0o1; } +real B92IncompressibleNavierStokes::getCalculationTime() { return vf::basics::constant::c0o1; } diff --git a/src/cpu/core/LBM/BGKLBMKernel.h b/src/cpu/core/LBM/B92IncompressibleNavierStokes.h similarity index 64% rename from src/cpu/core/LBM/BGKLBMKernel.h rename to src/cpu/core/LBM/B92IncompressibleNavierStokes.h index 099e9c093..90a1618bf 100644 --- a/src/cpu/core/LBM/BGKLBMKernel.h +++ b/src/cpu/core/LBM/B92IncompressibleNavierStokes.h @@ -1,32 +1,30 @@ -#ifndef BGKLBMKernel_H -#define BGKLBMKernel_H +#ifndef B92IncompressibleNavierStokes_H +#define B92IncompressibleNavierStokes_H #include "LBMKernel.h" #include "basics/container/CbArray3D.h" #include "basics/container/CbArray4D.h" -class BGKLBMKernel : public LBMKernel +class B92IncompressibleNavierStokes : public LBMKernel { public: - BGKLBMKernel(); - ~BGKLBMKernel() override; + B92IncompressibleNavierStokes(); + ~B92IncompressibleNavierStokes() override; void calculate(int step) override; SPtr<LBMKernel> clone() override; real getCalculationTime() override; private: void initDataSet(); - // void collideAllCompressible(); - // void collideAllIncompressible(); CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributions; CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions; CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributions; mu::value_type muX1, muX2, muX3; - real forcingX1; - real forcingX2; - real forcingX3; + real forcingX1 { 0 }; + real forcingX2 { 0 }; + real forcingX3 { 0 }; }; #endif diff --git a/src/cpu/core/LBM/BasicLBMKernel.cpp b/src/cpu/core/LBM/BasicLBMKernel.cpp deleted file mode 100644 index 97659e93e..000000000 --- a/src/cpu/core/LBM/BasicLBMKernel.cpp +++ /dev/null @@ -1,57 +0,0 @@ -#include "BasicLBMKernel.h" -#include "D3Q27System.h" -#include "BCArray3D.h" -#include "BCSet.h" - -BasicLBMKernel::BasicLBMKernel() -{ - -} - -BasicLBMKernel::~BasicLBMKernel(void) -{ -} - -void BasicLBMKernel::calculate(int step) -{ - using namespace D3Q27System; - using namespace std; - - //timer.resetAndStart(); - - - ///////////////////////////////////// - - //localDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - //nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); - //zeroDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - - initData(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - minX1 = ghostLayerWidth; - minX2 = ghostLayerWidth; - minX3 = ghostLayerWidth; - maxX1 = bcArrayMaxX1 - ghostLayerWidth; - maxX2 = bcArrayMaxX2 - ghostLayerWidth; - maxX3 = bcArrayMaxX3 - ghostLayerWidth; - - 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)) - { - nodeCollision(step, x1, x2, x3); - } - } - } - } -} diff --git a/src/cpu/core/LBM/BasicLBMKernel.h b/src/cpu/core/LBM/BasicLBMKernel.h deleted file mode 100644 index 2e8a6c5b3..000000000 --- a/src/cpu/core/LBM/BasicLBMKernel.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef BasicLBMKernel_h__ -#define BasicLBMKernel_h__ - -#include "LBMKernel.h" - - -class BasicLBMKernel : public LBMKernel -{ -public: - BasicLBMKernel(); - virtual ~BasicLBMKernel(void); - virtual void calculate(int step); - virtual SPtr<LBMKernel> clone() = 0; -protected: - virtual void initData(){} - virtual void nodeCollision(int step, int x1, int x2, int x3) {} - int minX1; - int minX2; - int minX3; - int maxX1; - int maxX2; - int maxX3; -}; - -#endif // BasicLBMKernel_h__ \ No newline at end of file diff --git a/src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.cpp b/src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.cpp deleted file mode 100644 index e4d001701..000000000 --- a/src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.cpp +++ /dev/null @@ -1,1076 +0,0 @@ -#include "CompressibleCumulant4thOrderViscosityLBMKernel.h" -#include "D3Q27System.h" -#include "Interpolator.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include <cmath> -#include "DataSet3D.h" -#include "LBMKernel.h" -#include "Block3D.h" - -#define PROOF_CORRECTNESS - -//using namespace UbMath; -using namespace vf::basics::constant; - -////////////////////////////////////////////////////////////////////////// -CompressibleCumulant4thOrderViscosityLBMKernel::CompressibleCumulant4thOrderViscosityLBMKernel() -{ - this->compressible = true; - this->bulkViscosity = vf::basics::constant::c0o1; - this->OxxPyyPzz = vf::basics::constant::c1o1; -} -////////////////////////////////////////////////////////////////////////// -CompressibleCumulant4thOrderViscosityLBMKernel::~CompressibleCumulant4thOrderViscosityLBMKernel(void) -= default; -////////////////////////////////////////////////////////////////////////// -void CompressibleCumulant4thOrderViscosityLBMKernel::initDataSet() -{ - SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.9)); - dataSet->setFdistributions(d); -} -////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> CompressibleCumulant4thOrderViscosityLBMKernel::clone() -{ - SPtr<LBMKernel> kernel(new CompressibleCumulant4thOrderViscosityLBMKernel()); - kernel->setNX(nx); - dynamicPointerCast<CompressibleCumulant4thOrderViscosityLBMKernel>(kernel)->initDataSet(); - kernel->setCollisionFactor(this->collFactor); - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - kernel->setDeltaT(deltaT); - kernel->setBlock(block.lock()); - - if (bulkViscosity != 0) - { - OxxPyyPzz = LBMSystem::calcOmega2(bulkViscosity, block.lock()->getLevel()); - } - else - { - OxxPyyPzz = c1o1; - } - - dynamicPointerCast<CompressibleCumulant4thOrderViscosityLBMKernel>(kernel)->OxxPyyPzz = this->OxxPyyPzz; - - return kernel; -} -////////////////////////////////////////////////////////////////////////// -void CompressibleCumulant4thOrderViscosityLBMKernel::calculate(int step) -{ - using namespace std; - - //timer.resetAndStart(); - - //initializing of forcing stuff - if (withForcing) - { - muForcingX1.DefineVar("x1", &muX1); muForcingX1.DefineVar("x2", &muX2); muForcingX1.DefineVar("x3", &muX3); - muForcingX2.DefineVar("x1", &muX1); muForcingX2.DefineVar("x2", &muX2); muForcingX2.DefineVar("x3", &muX3); - muForcingX3.DefineVar("x1", &muX1); muForcingX3.DefineVar("x2", &muX2); muForcingX3.DefineVar("x3", &muX3); - - muDeltaT = deltaT; - - muForcingX1.DefineVar("dt", &muDeltaT); - muForcingX2.DefineVar("dt", &muDeltaT); - muForcingX3.DefineVar("dt", &muDeltaT); - - muNu = (c1o1/c3o1)*(c1o1/collFactor - c1o1/c2o1); - - muForcingX1.DefineVar("nu", &muNu); - muForcingX2.DefineVar("nu", &muNu); - muForcingX3.DefineVar("nu", &muNu); - -// LBMReal forcingX1 = 0; -// LBMReal forcingX2 = 0; -// LBMReal forcingX3 = 0; - } - ///////////////////////////////////// - - localDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); - zeroDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1-ghostLayerWidth; - int maxX2 = bcArrayMaxX2-ghostLayerWidth; - int maxX3 = bcArrayMaxX3-ghostLayerWidth; - - real omega = collFactor; - //LBMReal OxyyPxzz = eight*(-two+omega)*(one+two*omega)/(-eight-fourteen*omega+seven*omega*omega);//one; - //LBMReal OxyyMxzz = eight*(-two+omega)*(-seven+four*omega)/(fiftysix-fifty*omega+nine*omega*omega);//one; - //LBMReal Oxyz = twentyfour*(-two+omega)*(-two-seven*omega+three*omega*omega)/(fourtyeight+c152*omega-c130*omega*omega+twentynine*omega*omega*omega); - real OxyyPxzz = c8o1*(omega-c2o1)*(OxxPyyPzz*(c3o1*omega-c1o1)-c5o1*omega)/(c8o1 *(c5o1-c2o1*omega)*omega+OxxPyyPzz*(c8o1+omega*(c9o1*omega-c26o1))); - real OxyyMxzz = c8o1*(omega-c2o1)*(omega+OxxPyyPzz*(c3o1*omega-c7o1))/(OxxPyyPzz*(c56o1-c42o1*omega+c9o1*omega*omega)-c8o1*omega); - real Oxyz = c24o1*(omega-c2o1)*(c4o1*omega*omega+omega*OxxPyyPzz*(c18o1-c13o1*omega)+OxxPyyPzz*OxxPyyPzz*(c2o1+omega*(c6o1*omega-c11o1)))/(c16o1*omega*omega*(omega-c6o1)-c2o1*omega*OxxPyyPzz*(c216o1+c5o1*omega*(c9o1*omega-c46o1))+OxxPyyPzz*OxxPyyPzz*(omega*(c3o1*omega-c10o1)*(c15o1*omega-c28o1)-c48o1)); - - //LBMReal A = (four + two*omega - three*omega*omega) / (two - seven*omega + five*omega*omega); - //LBMReal B = (four + twentyeight*omega - fourteen*omega*omega) / (six - twentyone*omega + fiveteen*omega*omega); - - real A = (c4o1*omega*omega+c2o1*omega*OxxPyyPzz*(omega-c6o1)+OxxPyyPzz*OxxPyyPzz*(omega*(c10o1-c3o1*omega)-c4o1))/((omega-OxxPyyPzz)*(OxxPyyPzz*(c2o1+c3o1*omega)-c8o1*omega)); - //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' ) - real B = (c4o1*omega*OxxPyyPzz*(c9o1*omega-c16o1)-c4o1*omega*omega-c2o1*OxxPyyPzz*OxxPyyPzz*(c2o1+c9o1*omega*(omega-c2o1)))/(c3o1*(omega-OxxPyyPzz)*(OxxPyyPzz*(c2o1+c3o1*omega)-c8o1*omega)); - - 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)) - { - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - ////////////////////////////////////////////////////////////////////////// - //read distribution - //////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - - //E N T - //c c c - ////////// - //W S B - //a a a - - //Rest ist b - - //mfxyz - //a - negative - //b - null - //c - positive - - // a b c - //-1 0 1 - - real mfcbb = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3); - - real mfabb = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributions)(x1, x2, x3); - - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc+mfaaa)+(mfaca+mfcac))+((mfacc+mfcaa)+(mfaac+mfcca)))+ - (((mfbac+mfbca)+(mfbaa+mfbcc))+((mfabc+mfcba)+(mfaba+mfcbc))+((mfacb+mfcab)+(mfaab+mfccb)))+ - ((mfabb+mfcbb)+(mfbab+mfbcb))+(mfbba+mfbbc))+mfbbb; - - real rho = c1o1 +drho; - //////////////////////////////////////////////////////////////////////////////////// - real vvx = ((((mfccc-mfaaa)+(mfcac-mfaca))+((mfcaa-mfacc)+(mfcca-mfaac)))+ - (((mfcba-mfabc)+(mfcbc-mfaba))+((mfcab-mfacb)+(mfccb-mfaab)))+ - (mfcbb-mfabb))/rho; - real vvy = ((((mfccc-mfaaa)+(mfaca-mfcac))+((mfacc-mfcaa)+(mfcca-mfaac)))+ - (((mfbca-mfbac)+(mfbcc-mfbaa))+((mfacb-mfcab)+(mfccb-mfaab)))+ - (mfbcb-mfbab))/rho; - real vvz = ((((mfccc-mfaaa)+(mfcac-mfaca))+((mfacc-mfcaa)+(mfaac-mfcca)))+ - (((mfbac-mfbca)+(mfbcc-mfbaa))+((mfabc-mfcba)+(mfcbc-mfaba)))+ - (mfbbc-mfbba))/rho; - //////////////////////////////////////////////////////////////////////////////////// - - //forcing - /////////////////////////////////////////////////////////////////////////////////////////// - if (withForcing) - { - muX1 = static_cast<real>(x1-1+ix1*maxX1); - muX2 = static_cast<real>(x2-1+ix2*maxX2); - muX3 = static_cast<real>(x3-1+ix3*maxX3); - - forcingX1 = muForcingX1.Eval(); - forcingX2 = muForcingX2.Eval(); - forcingX3 = muForcingX3.Eval(); - - vvx += forcingX1*deltaT*c1o2; // X - vvy += forcingX2*deltaT*c1o2; // Y - vvz += forcingX3*deltaT*c1o2; // Z - } - /////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - real oMdrho = c1o1; // comp special - //////////////////////////////////////////////////////////////////////////////////// - real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2 = vvx*vvx; - vy2 = vvy*vvy; - vz2 = vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimitP = c1o100;// * 0.0001f; - real qudricLimitM = c1o100;// * 0.0001f; - real qudricLimitD = c1o100;// * 0.001f; - //LBMReal s9 = minusomega; - //test - //s9 = 0.; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa+mfaac; - m1 = mfaac-mfaaa; - m0 = m2+mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1-m0 * vvz; - mfaac = m2-c2o1* m1 * vvz+vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba+mfabc; - m1 = mfabc-mfaba; - m0 = m2+mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1-m0 * vvz; - mfabc = m2-c2o1* m1 * vvz+vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca+mfacc; - m1 = mfacc-mfaca; - m0 = m2+mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1-m0 * vvz; - mfacc = m2-c2o1* m1 * vvz+vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa+mfbac; - m1 = mfbac-mfbaa; - m0 = m2+mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1-m0 * vvz; - mfbac = m2-c2o1* m1 * vvz+vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba+mfbbc; - m1 = mfbbc-mfbba; - m0 = m2+mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1-m0 * vvz; - mfbbc = m2-c2o1* m1 * vvz+vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca+mfbcc; - m1 = mfbcc-mfbca; - m0 = m2+mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1-m0 * vvz; - mfbcc = m2-c2o1* m1 * vvz+vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa+mfcac; - m1 = mfcac-mfcaa; - m0 = m2+mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1-m0 * vvz; - mfcac = m2-c2o1* m1 * vvz+vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba+mfcbc; - m1 = mfcbc-mfcba; - m0 = m2+mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1-m0 * vvz; - mfcbc = m2-c2o1* m1 * vvz+vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca+mfccc; - m1 = mfccc-mfcca; - m0 = m2+mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1-m0 * vvz; - mfccc = m2-c2o1* m1 * vvz+vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa+mfaca; - m1 = mfaca-mfaaa; - m0 = m2+mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1-m0 * vvy; - mfaca = m2-c2o1* m1 * vvy+vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab+mfacb; - m1 = mfacb-mfaab; - m0 = m2+mfabb; - mfaab = m0; - mfabb = m1-m0 * vvy; - mfacb = m2-c2o1* m1 * vvy+vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac+mfacc; - m1 = mfacc-mfaac; - m0 = m2+mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1-m0 * vvy; - mfacc = m2-c2o1* m1 * vvy+vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa+mfbca; - m1 = mfbca-mfbaa; - m0 = m2+mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1-m0 * vvy; - mfbca = m2-c2o1* m1 * vvy+vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab+mfbcb; - m1 = mfbcb-mfbab; - m0 = m2+mfbbb; - mfbab = m0; - mfbbb = m1-m0 * vvy; - mfbcb = m2-c2o1* m1 * vvy+vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac+mfbcc; - m1 = mfbcc-mfbac; - m0 = m2+mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1-m0 * vvy; - mfbcc = m2-c2o1* m1 * vvy+vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa+mfcca; - m1 = mfcca-mfcaa; - m0 = m2+mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1-m0 * vvy; - mfcca = m2-c2o1* m1 * vvy+vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab+mfccb; - m1 = mfccb-mfcab; - m0 = m2+mfcbb; - mfcab = m0; - mfcbb = m1-m0 * vvy; - mfccb = m2-c2o1* m1 * vvy+vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac+mfccc; - m1 = mfccc-mfcac; - m0 = m2+mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1-m0 * vvy; - mfccc = m2-c2o1* m1 * vvy+vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa+mfcaa; - m1 = mfcaa-mfaaa; - m0 = m2+mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1-m0 * vvx; - mfcaa = m2-c2o1* m1 * vvx+vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba+mfcba; - m1 = mfcba-mfaba; - m0 = m2+mfbba; - mfaba = m0; - mfbba = m1-m0 * vvx; - mfcba = m2-c2o1* m1 * vvx+vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca+mfcca; - m1 = mfcca-mfaca; - m0 = m2+mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1-m0 * vvx; - mfcca = m2-c2o1* m1 * vvx+vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab+mfcab; - m1 = mfcab-mfaab; - m0 = m2+mfbab; - mfaab = m0; - mfbab = m1-m0 * vvx; - mfcab = m2-c2o1* m1 * vvx+vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb+mfcbb; - m1 = mfcbb-mfabb; - m0 = m2+mfbbb; - mfabb = m0; - mfbbb = m1-m0 * vvx; - mfcbb = m2-c2o1* m1 * vvx+vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb+mfccb; - m1 = mfccb-mfacb; - m0 = m2+mfbcb; - mfacb = m0; - mfbcb = m1-m0 * vvx; - mfccb = m2-c2o1* m1 * vvx+vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac+mfcac; - m1 = mfcac-mfaac; - m0 = m2+mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1-m0 * vvx; - mfcac = m2-c2o1* m1 * vvx+vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc+mfcbc; - m1 = mfcbc-mfabc; - m0 = m2+mfbbc; - mfabc = m0; - mfbbc = m1-m0 * vvx; - mfcbc = m2-c2o1* m1 * vvx+vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc+mfccc; - m1 = mfccc-mfacc; - m0 = m2+mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1-m0 * vvx; - mfccc = m2-c2o1* m1 * vvx+vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - - //LBMReal OxxPyyPzz = one; // bulk viscosity - - //////////////////////////////////////////////////////////// - //3. - ////////////////////////////// - //LBMReal OxyyPxzz = one;//three * (two - omega) / (three - omega);// - //LBMReal OxyyMxzz = one;//six * (two - omega) / (six - omega);// - //LBMReal Oxyz = one;//twelve * (two - omega) / (twelve + omega);// - - //LBMReal OxyyPxzz = eight*(-two+omega)*(one+two*omega)/(-eight-fourteen*omega+seven*omega*omega);//one; - - //LBMReal OxyyMxzz = eight*(-two+omega)*(-seven+four*omega)/(fiftysix-fifty*omega+nine*omega*omega);//one; - - //LBMReal Oxyz = twentyfour*(-two+omega)*(-two-seven*omega+three*omega*omega)/(fourtyeight+c152*omega-c130*omega*omega+twentynine*omega*omega*omega); - ////////////////////////////// - //LBMReal OxyyPxzz = two-omega;// - //LBMReal OxyyMxzz = two-omega;// - ////////////////////////////// - //LBMReal OxyyPxzz = (eight * (omega - two)) / (omega - eight);//Ginzburg - //LBMReal OxyyMxzz = (eight * (omega - two)) / (omega - eight);//Ginzburg - ////////////////////////////// - //LBMReal OxyyPxzz = omega;//BGK - //LBMReal OxyyMxzz = omega;//BGK - ////////////////////////////// - //LBMReal OxyyPxzz = (one + omega) / two;//1P5 - //LBMReal OxyyMxzz = (one + omega) / two;//1P5 - ////////////////////////////// - //LBMReal OxyyPxzz = (three - omega) / two;//0P5 - //LBMReal OxyyMxzz = (three - omega) / two;//0P5 - ////////////////////////////// - //LBMReal OxyyPxzz = (one + (eight * (omega - two)) / (omega - eight)) / two;//one + Ginzburg / two ... Car - //LBMReal OxyyMxzz = (one + (eight * (omega - two)) / (omega - eight)) / two;//one + Ginzburg / two ... Car - //////////////////////////////////////////////////////////// - //4. - ////////////////////////////// - real O4 = c1o1; - ////////////////////////////// - //real O4 = omega;//TRT - //////////////////////////////////////////////////////////// - //5. - ////////////////////////////// - real O5 = c1o1; - //////////////////////////////////////////////////////////// - //6. - ////////////////////////////// - real O6 = c1o1; - //////////////////////////////////////////////////////////// - - - //central moments to cumulants - //4. - real CUMcbb = mfcbb-((mfcaa+c1o3) * mfabb+c2o1 * mfbba * mfbab)/rho; //ab 15.05.2015 verwendet - real CUMbcb = mfbcb-((mfaca+c1o3) * mfbab+c2o1 * mfbba * mfabb)/rho; //ab 15.05.2015 verwendet - real CUMbbc = mfbbc-((mfaac+c1o3) * mfbba+c2o1 * mfbab * mfabb)/rho; //ab 15.05.2015 verwendet - - real CUMcca = mfcca-(((mfcaa * mfaca+c2o1 * mfbba * mfbba)+c1o3 * (mfcaa+mfaca))/rho-c1o9*(drho/rho)); - real CUMcac = mfcac-(((mfcaa * mfaac+c2o1 * mfbab * mfbab)+c1o3 * (mfcaa+mfaac))/rho-c1o9*(drho/rho)); - real CUMacc = mfacc-(((mfaac * mfaca+c2o1 * mfabb * mfabb)+c1o3 * (mfaac+mfaca))/rho-c1o9*(drho/rho)); - - //5. - real CUMbcc = mfbcc-((mfaac * mfbca+mfaca * mfbac+c4o1 * mfabb * mfbbb+c2o1 * (mfbab * mfacb+mfbba * mfabc))+c1o3 * (mfbca+mfbac))/rho; - real CUMcbc = mfcbc-((mfaac * mfcba+mfcaa * mfabc+c4o1 * mfbab * mfbbb+c2o1 * (mfabb * mfcab+mfbba * mfbac))+c1o3 * (mfcba+mfabc))/rho; - real CUMccb = mfccb-((mfcaa * mfacb+mfaca * mfcab+c4o1 * mfbba * mfbbb+c2o1 * (mfbab * mfbca+mfabb * mfcba))+c1o3 * (mfacb+mfcab))/rho; - - //6. - - real CUMccc = mfccc+((-c4o1 * mfbbb * mfbbb - -(mfcaa * mfacc+mfaca * mfcac+mfaac * mfcca) - - c4o1 * (mfabb * mfcbb+mfbab * mfbcb+mfbba * mfbbc) - - c2o1 * (mfbca * mfbac+mfcba * mfabc+mfcab * mfacb))/rho - +(c4o1 * (mfbab * mfbab * mfaca+mfabb * mfabb * mfcaa+mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb)/(rho * rho) - -c1o3 * (mfacc+mfcac+mfcca)/rho - -c1o9 * (mfcaa+mfaca+mfaac)/rho - +(c2o1 * (mfbab * mfbab+mfabb * mfabb+mfbba * mfbba) - +(mfaac * mfaca+mfaac * mfcaa+mfaca * mfcaa)+c1o3 *(mfaac+mfaca+mfcaa))/(rho * rho) * c2o3 - +c1o27*((drho * drho-drho)/(rho*rho))); - //+ c1o27*(one -three/rho +two/(rho*rho))); - - - - - //2. - // linear combinations - real mxxPyyPzz = mfcaa+mfaca+mfaac; - real mxxMyy = mfcaa-mfaca; - real mxxMzz = mfcaa-mfaac; - - ////////////////////////////////////////////////////////////////////////// - // LBMReal magicBulk=(CUMacc+CUMcac+CUMcca)*(one/OxxPyyPzz-c1o2)*c3o2*8.; - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 1 - //LBMReal oxxyy,oxxzz,oxy,oxz,oyz; - //LBMReal smag=0.001; - //oxxyy = omega+(one-omega)*fabs(mxxMyy)/(fabs(mxxMyy)+smag); - //oxxzz = omega+(one-omega)*fabs(mxxMzz)/(fabs(mxxMzz)+smag); - //oxy = omega+(one-omega)*fabs(mfbba)/(fabs(mfbba)+smag); - //oxz = omega+(one-omega)*fabs(mfbab)/(fabs(mfbab)+smag); - //oyz = omega+(one-omega)*fabs(mfabb)/(fabs(mfabb)+smag); - - //////////////////////////////////////////////////////////////////////////// - ////Teil 1b - //LBMReal constante = 1000.0; - //LBMReal nuEddi = constante * fabs(mxxPyyPzz); - //LBMReal omegaLimit = one / (one / omega + three * nuEddi); - - //{ - // LBMReal dxux = c1o2 * (-omegaLimit) *(mxxMyy + mxxMzz) + OxxPyyPzz * (mfaaa - mxxPyyPzz); - // LBMReal dyuy = dxux + omegaLimit * c3o2 * mxxMyy; - // LBMReal dzuz = dxux + omegaLimit * c3o2 * mxxMzz; - - ////relax - //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - //mxxMyy += omegaLimit * (-mxxMyy) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vy2 * dyuy); - //mxxMzz += omegaLimit * (-mxxMzz) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vz2 * dzuz); - - //} - //mfabb += omegaLimit * (-mfabb); - //mfbab += omegaLimit * (-mfbab); - //mfbba += omegaLimit * (-mfbba); - //////////////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) - - real dxux = c1o2 * (-omega) *(mxxMyy+mxxMzz)+c1o2 * OxxPyyPzz * (mfaaa-mxxPyyPzz); - real dyuy = dxux+omega * c3o2 * mxxMyy; - real dzuz = dxux+omega * c3o2 * mxxMzz; - - real Dxy =-c3o1 *omega*mfbba; - real Dxz =-c3o1 *omega*mfbab; - real Dyz =-c3o1 *omega*mfabb; - - - - //relax - - wadjust = OxxPyyPzz+(c1o1 -OxxPyyPzz)*fabs((mfaaa-mxxPyyPzz))/(fabs((mfaaa-mxxPyyPzz))+qudricLimitD); - mxxPyyPzz += wadjust*(mfaaa-mxxPyyPzz)- c3o1 * (c1o1 -c1o2 * OxxPyyPzz) * (vx2 * dxux+vy2 * dyuy+vz2 * dzuz); - - // mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz)-three * (one-c1o2 * OxxPyyPzz) * (vx2 * dxux+vy2 * dyuy+vz2 * dzuz);//-magicBulk*OxxPyyPzz; - mxxMyy += omega * (-mxxMyy)-c3o1 * (c1o1 +c1o2 * (-omega)) * (vx2 * dxux-vy2 * dyuy); - mxxMzz += omega * (-mxxMzz)-c3o1 * (c1o1 +c1o2 * (-omega)) * (vx2 * dxux-vz2 * dzuz); - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 2 - //mxxMyy += oxxyy * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy); - //mxxMzz += oxxzz * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz); - ////////////////////////////////////////////////////////////////////////// - - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 3 - //mfabb += oyz * (-mfabb); - //mfbab += oxz * (-mfbab); - //mfbba += oxy * (-mfbba); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcaa = c1o3 * (mxxMyy+mxxMzz+mxxPyyPzz); - mfaca = c1o3 * (-c2o1 * mxxMyy+mxxMzz+mxxPyyPzz); - mfaac = c1o3 * (mxxMyy-c2o1 * mxxMzz+mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba+mfabc; - real mxxyMyzz = mfcba-mfabc; - - real mxxzPyyz = mfcab+mfacb; - real mxxzMyyz = mfcab-mfacb; - - real mxyyPxzz = mfbca+mfbac; - real mxyyMxzz = mfbca-mfbac; - - //relax - ////////////////////////////////////////////////////////////////////////// - //das ist der limiter - wadjust = Oxyz+(c1o1-Oxyz)*fabs(mfbbb)/(fabs(mfbbb)+qudricLimitD); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*fabs(mxxyPyzz)/(fabs(mxxyPyzz)+qudricLimitP); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*fabs(mxxyMyzz)/(fabs(mxxyMyzz)+qudricLimitM); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*fabs(mxxzPyyz)/(fabs(mxxzPyyz)+qudricLimitP); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*fabs(mxxzMyyz)/(fabs(mxxzMyyz)+qudricLimitM); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*fabs(mxyyPxzz)/(fabs(mxyyPxzz)+qudricLimitP); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*fabs(mxyyMxzz)/(fabs(mxyyMxzz)+qudricLimitM); - mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - //mfbbb += OxyyMxzz * (-mfbbb); - //mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - //mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - //mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - //mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - //mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - //mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - - //// linear combinations back - mfcba = (mxxyMyzz+mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz+mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz+mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz+mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz+mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz+mxyyPxzz) * c1o2; - - //4. - ////////////////////////////////////////////////////////////////////////// - //mit limiter - // wadjust = O4+(one-O4)*fabs(CUMacc)/(fabs(CUMacc)+qudricLimit); - //CUMacc += wadjust * (-CUMacc); - // wadjust = O4+(one-O4)*fabs(CUMcac)/(fabs(CUMcac)+qudricLimit); - //CUMcac += wadjust * (-CUMcac); - // wadjust = O4+(one-O4)*fabs(CUMcca)/(fabs(CUMcca)+qudricLimit); - //CUMcca += wadjust * (-CUMcca); - - // wadjust = O4+(one-O4)*fabs(CUMbbc)/(fabs(CUMbbc)+qudricLimit); - //CUMbbc += wadjust * (-CUMbbc); - // wadjust = O4+(one-O4)*fabs(CUMbcb)/(fabs(CUMbcb)+qudricLimit); - //CUMbcb += wadjust * (-CUMbcb); - // wadjust = O4+(one-O4)*fabs(CUMcbb)/(fabs(CUMcbb)+qudricLimit); - //CUMcbb += wadjust * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - - - //ohne limiter - //CUMacc += O4 * (-CUMacc); - //CUMcac += O4 * (-CUMcac); - //CUMcca += O4 * (-CUMcca); - - //CUMbbc += O4 * (-CUMbbc); - //CUMbcb += O4 * (-CUMbcb); - //CUMcbb += O4 * (-CUMcbb); - CUMacc = -O4*(c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc); - CUMcac = -O4*(c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac); - CUMcca = -O4*(c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4*(c1o1 / omega - c1o2) * Dxy * c1o3 * B + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4*(c1o1 / omega - c1o2) * Dxz * c1o3 * B + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4*(c1o1 / omega - c1o2) * Dyz * c1o3 * B + (c1o1 - O4) * (CUMcbb); - ////////////////////////////////////////////////////////////////////////// - - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb+((mfcaa+c1o3) * mfabb+c2o1 * mfbba * mfbab)/rho; - mfbcb = CUMbcb+((mfaca+c1o3) * mfbab+c2o1 * mfbba * mfabb)/rho; - mfbbc = CUMbbc+((mfaac+c1o3) * mfbba+c2o1 * mfbab * mfabb)/rho; - - mfcca = CUMcca+(((mfcaa * mfaca+c2o1 * mfbba * mfbba)+c1o3 * (mfcaa+mfaca))/rho-c1o9*(drho/rho));//(one/rho-one)); - mfcac = CUMcac+(((mfcaa * mfaac+c2o1 * mfbab * mfbab)+c1o3 * (mfcaa+mfaac))/rho-c1o9*(drho/rho));//(one/rho-one)); - mfacc = CUMacc+(((mfaac * mfaca+c2o1 * mfabb * mfabb)+c1o3 * (mfaac+mfaca))/rho-c1o9*(drho/rho));//(one/rho-one)); - - //5. - mfbcc = CUMbcc+((mfaac * mfbca+mfaca * mfbac+c4o1 * mfabb * mfbbb+c2o1 * (mfbab * mfacb+mfbba * mfabc))+c1o3 * (mfbca+mfbac))/rho; - mfcbc = CUMcbc+((mfaac * mfcba+mfcaa * mfabc+c4o1 * mfbab * mfbbb+c2o1 * (mfabb * mfcab+mfbba * mfbac))+c1o3 * (mfcba+mfabc))/rho; - mfccb = CUMccb+((mfcaa * mfacb+mfaca * mfcab+c4o1 * mfbba * mfbbb+c2o1 * (mfbab * mfbca+mfabb * mfcba))+c1o3 * (mfacb+mfcab))/rho; - - //6. - - mfccc = CUMccc-((-c4o1 * mfbbb * mfbbb - -(mfcaa * mfacc+mfaca * mfcac+mfaac * mfcca) - - c4o1 * (mfabb * mfcbb+mfbab * mfbcb+mfbba * mfbbc) - - c2o1 * (mfbca * mfbac+mfcba * mfabc+mfcab * mfacb))/rho - +(c4o1 * (mfbab * mfbab * mfaca+mfabb * mfabb * mfcaa+mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb)/(rho * rho) - -c1o3 * (mfacc+mfcac+mfcca)/rho - -c1o9 * (mfcaa+mfaca+mfaac)/rho - +(c2o1 * (mfbab * mfbab+mfabb * mfabb+mfbba * mfbba) - +(mfaac * mfaca+mfaac * mfcaa+mfaca * mfcaa)+c1o3 *(mfaac+mfaca+mfcaa))/(rho * rho) * c2o3 - +c1o27*((drho * drho-drho)/(rho*rho))); - //////////////////////////////////////////////////////////////////////////////////// - //forcing - mfbaa=-mfbaa; - mfaba=-mfaba; - mfaab=-mfaab; - ////////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2+mfaab * (vvz-c1o2)+(mfaaa+ c1o1 * oMdrho) * (vz2-vvz) * c1o2; - m1 = -mfaac-c2o1* mfaab * vvz+mfaaa * (c1o1-vz2)- c1o1 * oMdrho * vz2; - m2 = mfaac * c1o2+mfaab * (vvz+c1o2)+(mfaaa+ c1o1 * oMdrho) * (vz2+vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2+mfabb * (vvz-c1o2)+mfaba * (vz2-vvz) * c1o2; - m1 = -mfabc-c2o1* mfabb * vvz+mfaba * (c1o1-vz2); - m2 = mfabc * c1o2+mfabb * (vvz+c1o2)+mfaba * (vz2+vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2+mfacb * (vvz-c1o2)+(mfaca+c1o3 * oMdrho) * (vz2-vvz) * c1o2; - m1 = -mfacc-c2o1* mfacb * vvz+mfaca * (c1o1-vz2)-c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2+mfacb * (vvz+c1o2)+(mfaca+c1o3 * oMdrho) * (vz2+vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2+mfbab * (vvz-c1o2)+mfbaa * (vz2-vvz) * c1o2; - m1 = -mfbac-c2o1* mfbab * vvz+mfbaa * (c1o1-vz2); - m2 = mfbac * c1o2+mfbab * (vvz+c1o2)+mfbaa * (vz2+vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2+mfbbb * (vvz-c1o2)+mfbba * (vz2-vvz) * c1o2; - m1 = -mfbbc-c2o1* mfbbb * vvz+mfbba * (c1o1-vz2); - m2 = mfbbc * c1o2+mfbbb * (vvz+c1o2)+mfbba * (vz2+vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2+mfbcb * (vvz-c1o2)+mfbca * (vz2-vvz) * c1o2; - m1 = -mfbcc-c2o1* mfbcb * vvz+mfbca * (c1o1-vz2); - m2 = mfbcc * c1o2+mfbcb * (vvz+c1o2)+mfbca * (vz2+vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2+mfcab * (vvz-c1o2)+(mfcaa+c1o3 * oMdrho) * (vz2-vvz) * c1o2; - m1 = -mfcac- c2o1* mfcab * vvz+mfcaa * (c1o1-vz2)-c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2+mfcab * (vvz+c1o2)+(mfcaa+c1o3 * oMdrho) * (vz2+vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2+mfcbb * (vvz-c1o2)+mfcba * (vz2-vvz) * c1o2; - m1 = -mfcbc-c2o1* mfcbb * vvz+mfcba * (c1o1-vz2); - m2 = mfcbc * c1o2+mfcbb * (vvz+c1o2)+mfcba * (vz2+vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2+mfccb * (vvz-c1o2)+(mfcca+c1o9 * oMdrho) * (vz2-vvz) * c1o2; - m1 = -mfccc-c2o1* mfccb * vvz+mfcca * (c1o1-vz2)-c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2+mfccb * (vvz+c1o2)+(mfcca+c1o9 * oMdrho) * (vz2+vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2+mfaba * (vvy-c1o2)+(mfaaa+c1o6 * oMdrho) * (vy2-vvy) * c1o2; - m1 = -mfaca-c2o1* mfaba * vvy+mfaaa * (c1o1-vy2)-c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2+mfaba * (vvy+c1o2)+(mfaaa+c1o6 * oMdrho) * (vy2+vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2+mfabb * (vvy-c1o2)+(mfaab+c2o3 * oMdrho) * (vy2-vvy) * c1o2; - m1 = -mfacb-c2o1* mfabb * vvy+mfaab * (c1o1-vy2)-c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2+mfabb * (vvy+c1o2)+(mfaab+c2o3 * oMdrho) * (vy2+vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2+mfabc * (vvy-c1o2)+(mfaac+c1o6 * oMdrho) * (vy2-vvy) * c1o2; - m1 = -mfacc-c2o1* mfabc * vvy+mfaac * (c1o1-vy2)-c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2+mfabc * (vvy+c1o2)+(mfaac+c1o6 * oMdrho) * (vy2+vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2+mfbba * (vvy-c1o2)+mfbaa * (vy2-vvy) * c1o2; - m1 = -mfbca-c2o1* mfbba * vvy+mfbaa * (c1o1-vy2); - m2 = mfbca * c1o2+mfbba * (vvy+c1o2)+mfbaa * (vy2+vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2+mfbbb * (vvy-c1o2)+mfbab * (vy2-vvy) * c1o2; - m1 = -mfbcb-c2o1* mfbbb * vvy+mfbab * (c1o1-vy2); - m2 = mfbcb * c1o2+mfbbb * (vvy+c1o2)+mfbab * (vy2+vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2+mfbbc * (vvy-c1o2)+mfbac * (vy2-vvy) * c1o2; - m1 = -mfbcc-c2o1* mfbbc * vvy+mfbac * (c1o1-vy2); - m2 = mfbcc * c1o2+mfbbc * (vvy+c1o2)+mfbac * (vy2+vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2+mfcba * (vvy-c1o2)+(mfcaa+c1o18 * oMdrho) * (vy2-vvy) * c1o2; - m1 = -mfcca-c2o1* mfcba * vvy+mfcaa * (c1o1-vy2)-c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2+mfcba * (vvy+c1o2)+(mfcaa+c1o18 * oMdrho) * (vy2+vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2+mfcbb * (vvy-c1o2)+(mfcab+c2o9 * oMdrho) * (vy2-vvy) * c1o2; - m1 = -mfccb-c2o1* mfcbb * vvy+mfcab * (c1o1-vy2)-c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2+mfcbb * (vvy+c1o2)+(mfcab+c2o9 * oMdrho) * (vy2+vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2+mfcbc * (vvy-c1o2)+(mfcac+c1o18 * oMdrho) * (vy2-vvy) * c1o2; - m1 = -mfccc-c2o1* mfcbc * vvy+mfcac * (c1o1-vy2)-c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2+mfcbc * (vvy+c1o2)+(mfcac+c1o18 * oMdrho) * (vy2+vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2+mfbaa * (vvx-c1o2)+(mfaaa+c1o36 * oMdrho) * (vx2-vvx) * c1o2; - m1 = -mfcaa-c2o1* mfbaa * vvx+mfaaa * (c1o1-vx2)-c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2+mfbaa * (vvx+c1o2)+(mfaaa+c1o36 * oMdrho) * (vx2+vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2+mfbba * (vvx-c1o2)+(mfaba+c1o9 * oMdrho) * (vx2-vvx) * c1o2; - m1 = -mfcba-c2o1* mfbba * vvx+mfaba * (c1o1-vx2)-c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2+mfbba * (vvx+c1o2)+(mfaba+c1o9 * oMdrho) * (vx2+vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2+mfbca * (vvx-c1o2)+(mfaca+c1o36 * oMdrho) * (vx2-vvx) * c1o2; - m1 = -mfcca-c2o1* mfbca * vvx+mfaca * (c1o1-vx2)-c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2+mfbca * (vvx+c1o2)+(mfaca+c1o36 * oMdrho) * (vx2+vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2+mfbab * (vvx-c1o2)+(mfaab+c1o9 * oMdrho) * (vx2-vvx) * c1o2; - m1 = -mfcab-c2o1* mfbab * vvx+mfaab * (c1o1-vx2)-c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2+mfbab * (vvx+c1o2)+(mfaab+c1o9 * oMdrho) * (vx2+vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2+mfbbb * (vvx-c1o2)+(mfabb+c4o9 * oMdrho) * (vx2-vvx) * c1o2; - m1 = -mfcbb-c2o1* mfbbb * vvx+mfabb * (c1o1-vx2)-c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2+mfbbb * (vvx+c1o2)+(mfabb+c4o9 * oMdrho) * (vx2+vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2+mfbcb * (vvx-c1o2)+(mfacb+c1o9 * oMdrho) * (vx2-vvx) * c1o2; - m1 = -mfccb-c2o1* mfbcb * vvx+mfacb * (c1o1-vx2)-c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2+mfbcb * (vvx+c1o2)+(mfacb+c1o9 * oMdrho) * (vx2+vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2+mfbac * (vvx-c1o2)+(mfaac+c1o36 * oMdrho) * (vx2-vvx) * c1o2; - m1 = -mfcac-c2o1* mfbac * vvx+mfaac * (c1o1-vx2)-c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2+mfbac * (vvx+c1o2)+(mfaac+c1o36 * oMdrho) * (vx2+vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2+mfbbc * (vvx-c1o2)+(mfabc+c1o9 * oMdrho) * (vx2-vvx) * c1o2; - m1 = -mfcbc-c2o1* mfbbc * vvx+mfabc * (c1o1-vx2)-c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2+mfbbc * (vvx+c1o2)+(mfabc+c1o9 * oMdrho) * (vx2+vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2+mfbcc * (vvx-c1o2)+(mfacc+c1o36 * oMdrho) * (vx2-vvx) * c1o2; - m1 = -mfccc-c2o1* mfbcc * vvx+mfacc * (c1o1-vx2)-c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2+mfbcc * (vvx+c1o2)+(mfacc+c1o36 * oMdrho) * (vx2+vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - //proof correctness - ////////////////////////////////////////////////////////////////////////// -#ifdef PROOF_CORRECTNESS - real drho_post = (mfaaa+mfaac+mfaca+mfcaa+mfacc+mfcac+mfccc+mfcca) - +(mfaab+mfacb+mfcab+mfccb)+(mfaba+mfabc+mfcba+mfcbc)+(mfbaa+mfbac+mfbca+mfbcc) - +(mfabb+mfcbb)+(mfbab+mfbcb)+(mfbba+mfbbc)+mfbbb; - //LBMReal dif = fabs(rho - rho_post); - real dif = drho - drho_post; -#ifdef SINGLEPRECISION - if (dif > 10.0E-7 || dif < -10.0E-7) -#else - if (dif > 10.0E-15 || dif < -10.0E-15) -#endif - { - UB_THROW(UbException(UB_EXARGS, "rho="+UbSystem::toString(drho)+", rho_post="+UbSystem::toString(drho_post) - +" dif="+UbSystem::toString(dif) - +" rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3) - +" in " + block.lock()->toString()+" step = "+UbSystem::toString(step))); - } -#endif - ////////////////////////////////////////////////////////////////////////// - //write distribution - ////////////////////////////////////////////////////////////////////////// - (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = mfabb; - (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = mfbab; - (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = mfbba; - (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; - (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; - (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; - (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; - (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; - (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; - (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; - (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; - (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; - (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; - - (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb; - (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb; - (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; - (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb; - (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb; - (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; - (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; - (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; - (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; - (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; - (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; - (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; - (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; - - (*this->zeroDistributions)(x1, x2, x3) = mfbbb; - ////////////////////////////////////////////////////////////////////////// - - } - } - } - } - //timer.stop(); -} -////////////////////////////////////////////////////////////////////////// -real CompressibleCumulant4thOrderViscosityLBMKernel::getCalculationTime() -{ - //return timer.getDuration(); - return timer.getTotalTime(); -} -////////////////////////////////////////////////////////////////////////// -void CompressibleCumulant4thOrderViscosityLBMKernel::setBulkViscosity(real value) -{ - bulkViscosity = value; -} - -////////////////////////////////////////////////////////////////////////// -//void CompressibleCumulant4thOrderViscosityLBMKernel::setBulkOmegaToOmega(bool value) -//{ -// bulkOmegaToOmega = value; -//} - -//void CompressibleCumulant4thOrderViscosityLBMKernel::setViscosityFlag(bool vf) -//{ -// viscosityFlag = vf; -//} diff --git a/src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.h b/src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.h deleted file mode 100644 index 3b7ee8f84..000000000 --- a/src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef CompressibleCumulant4thOrderViscosityLBMKernel_h__ -#define CompressibleCumulant4thOrderViscosityLBMKernel_h__ - -#include "LBMKernel.h" -#include "BCSet.h" -#include "D3Q27System.h" -#include "basics/utilities/UbTiming.h" -#include "basics/container/CbArray4D.h" -#include "basics/container/CbArray3D.h" - -//! \brief compressible cumulant LBM kernel. -//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model -//! \author K. Kutscher, M. Geier -class CompressibleCumulant4thOrderViscosityLBMKernel : public LBMKernel -{ -public: - //! This option set relaxation parameter: NORMAL - enum Parameter{NORMAL, MAGIC}; -public: - CompressibleCumulant4thOrderViscosityLBMKernel(); - ~CompressibleCumulant4thOrderViscosityLBMKernel() override; - void calculate(int step) override; - SPtr<LBMKernel> clone() override; - real getCalculationTime() override; - //! The value should not be equal to a shear viscosity - void setBulkViscosity(real value); -protected: - virtual void initDataSet(); - real f[D3Q27System::ENDF+1]; - - UbTimer timer; - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributions; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributions; - - mu::value_type muX1,muX2,muX3; - mu::value_type muDeltaT; - mu::value_type muNu; - real forcingX1; - real forcingX2; - real forcingX3; - - // bulk viscosity - real OxxPyyPzz; //omega2 (bulk viscosity) - real bulkViscosity; - -}; -#endif // CompressibleCumulant4thOrderViscosityLBMKernel_h__ - - diff --git a/src/cpu/core/LBM/CumulantK17LBMKernel.cpp b/src/cpu/core/LBM/CumulantK17LBMKernel.cpp deleted file mode 100644 index ec59cf349..000000000 --- a/src/cpu/core/LBM/CumulantK17LBMKernel.cpp +++ /dev/null @@ -1,639 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// 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 CumulantK17LBMKernel.cpp -//! \ingroup LBM -//! \author Konstantin Kutscher, Martin Geier -//======================================================================================= -#include "CumulantK17LBMKernel.h" -#include "D3Q27System.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include <cmath> -#include "DataSet3D.h" -#include "LBMKernel.h" -#include "Block3D.h" -#include "BCArray3D.h" - -#include <lbm/ChimeraTransformation.h> - -#define PROOF_CORRECTNESS - -//using namespace UbMath; -using namespace vf::basics::constant; -using namespace vf::lbm; - -////////////////////////////////////////////////////////////////////////// -CumulantK17LBMKernel::CumulantK17LBMKernel() -{ - this->compressible = true; -} -////////////////////////////////////////////////////////////////////////// -void CumulantK17LBMKernel::initDataSet() -{ - SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9)); - dataSet->setFdistributions(d); -} -////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> CumulantK17LBMKernel::clone() -{ - SPtr<LBMKernel> kernel(new CumulantK17LBMKernel()); - kernel->setNX(nx); - std::dynamic_pointer_cast<CumulantK17LBMKernel>(kernel)->initDataSet(); - kernel->setCollisionFactor(this->collFactor); - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - kernel->setDeltaT(deltaT); - kernel->setBlock(block.lock()); - - return kernel; -} -////////////////////////////////////////////////////////////////////////// -void CumulantK17LBMKernel::calculate(int step) -{ - ////////////////////////////////////////////////////////////////////////// - //! Cumulant K17 Kernel is based on - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! and - //! <a href="https://doi.org/10.1016/j.jcp.2017.07.004"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.07.004 ]</b></a> - //! - //! The cumulant kernel is executed in the following steps - //! - //////////////////////////////////////////////////////////////////////////////// - //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim. - //! - - using namespace std; - - //initializing of forcing stuff - if (withForcing) - { - muForcingX1.DefineVar("x1", &muX1); muForcingX1.DefineVar("x2", &muX2); muForcingX1.DefineVar("x3", &muX3); - muForcingX2.DefineVar("x1", &muX1); muForcingX2.DefineVar("x2", &muX2); muForcingX2.DefineVar("x3", &muX3); - muForcingX3.DefineVar("x1", &muX1); muForcingX3.DefineVar("x2", &muX2); muForcingX3.DefineVar("x3", &muX3); - - muDeltaT = deltaT; - - muForcingX1.DefineVar("dt", &muDeltaT); - muForcingX2.DefineVar("dt", &muDeltaT); - muForcingX3.DefineVar("dt", &muDeltaT); - - muNu = (c1o1 / c3o1) * (c1o1 / collFactor - c1o1 / c2o1); - - muForcingX1.DefineVar("nu", &muNu); - muForcingX2.DefineVar("nu", &muNu); - muForcingX3.DefineVar("nu", &muNu); - } - ///////////////////////////////////// - - localDistributions = dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - nonLocalDistributions = dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); - restDistributions = dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1 - ghostLayerWidth; - int maxX2 = bcArrayMaxX2 - ghostLayerWidth; - int maxX3 = bcArrayMaxX3 - ghostLayerWidth; - - real omega = collFactor; - - 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)) - { - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm - //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - - //E N T - //c c c - ////////// - //W S B - //a a a - - //Rest is b - - //mfxyz - //a - negative - //b - null - //c - positive - - // a b c - //-1 0 1 - - real mfcbb = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3); - - real mfabb = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->restDistributions)(x1, x2, x3); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb)) + (mfbba + mfbbc)) + mfbbb; - - real rho = c1o1 + drho; - real OOrho = c1o1 / rho; - //////////////////////////////////////////////////////////////////////////////////// - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)) / rho; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)) / rho; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)) / rho; - //////////////////////////////////////////////////////////////////////////////////// - //forcing - /////////////////////////////////////////////////////////////////////////////////////////// - if (withForcing) - { - muX1 = static_cast<real>(x1 - 1 + ix1 * maxX1); - muX2 = static_cast<real>(x2 - 1 + ix2 * maxX2); - muX3 = static_cast<real>(x3 - 1 + ix3 * maxX3); - - forcingX1 = muForcingX1.Eval(); - forcingX2 = muForcingX2.Eval(); - forcingX3 = muForcingX3.Eval(); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - vvx += forcingX1 * deltaT * c1o2; // X - vvy += forcingX2 * deltaT * c1o2; // Y - vvz += forcingX3 * deltaT * c1o2; // Z - } - //////////////////////////////////////////////////////////////////////////////////// - // calculate the square of velocities for this lattice node - real vx2 = vvx * vvx; - real vy2 = vvy * vvy; - real vz2 = vvz * vvz; - //////////////////////////////////////////////////////////////////////////////////// - //! - Set relaxation limiters for third order cumulants to default value \f$ \lambda=0.001 \f$ according to section 6 in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - real wadjust; - real qudricLimitP = c1o100; - real qudricLimitM = c1o100; - real qudricLimitD = c1o100; - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (6)-(14) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - forwardInverseChimeraWithK(mfaaa, mfaab, mfaac, vvz, vz2, c36o1, c1o36); - forwardInverseChimeraWithK(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9); - forwardInverseChimeraWithK(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36); - forwardInverseChimeraWithK(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9); - forwardInverseChimeraWithK(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9); - forwardInverseChimeraWithK(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9); - forwardInverseChimeraWithK(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36); - forwardInverseChimeraWithK(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9); - forwardInverseChimeraWithK(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - forwardInverseChimeraWithK(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6); - forwardChimera(mfaab, mfabb, mfacb, vvy, vy2); - forwardInverseChimeraWithK(mfaac, mfabc, mfacc, vvy, vy2, c18o1, c1o18); - forwardInverseChimeraWithK(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3); - forwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); - forwardInverseChimeraWithK(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9); - forwardInverseChimeraWithK(mfcaa, mfcba, mfcca, vvy, vy2, c6o1, c1o6); - forwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); - forwardInverseChimeraWithK(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18); - - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - forwardInverseChimeraWithK(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1); - forwardChimera(mfaba, mfbba, mfcba, vvx, vx2); - forwardInverseChimeraWithK(mfaca, mfbca, mfcca, vvx, vx2, c3o1, c1o3); - forwardChimera(mfaab, mfbab, mfcab, vvx, vx2); - forwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); - forwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); - forwardInverseChimeraWithK(mfaac, mfbac, mfcac, vvx, vx2, c3o1, c1o3); - forwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); - forwardInverseChimeraWithK(mfacc, mfbcc, mfccc, vvx, vx2, c9o1, c1o9); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Setting relaxation rates for non-hydrodynamic cumulants (default values). Variable names and equations according to - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! => [NAME IN PAPER]=[NAME IN CODE]=[DEFAULT VALUE]. - //! - Trace of second order cumulants \f$ C_{200}+C_{020}+C_{002} \f$ used to adjust bulk viscosity:\f$\omega_2=OxxPyyPzz=1.0 \f$. - //! - Third order cumulants \f$ C_{120}+C_{102} \f$, \f$ C_{210}+C_{012} \f$, \f$ C_{201}+C_{021} \f$: \f$\omega_3=OxyyPxzz\f$ set according to Eq. (111) with simplifications assuming \f$\omega_2=1.0\f$. - //! - Third order cumulants \f$ C_{120}-C_{102} \f$, \f$ C_{210}-C_{012} \f$, \f$ C_{201}-C_{021} \f$: \f$\omega_4 = OxyyMxzz\f$ set according to Eq. (112) with simplifications assuming \f$\omega_2 = 1.0\f$. - //! - Third order cumulants \f$ C_{111} \f$: \f$\omega_5 = Oxyz\f$ set according to Eq. (113) with simplifications assuming \f$\omega_2 = 1.0\f$ (modify for different bulk viscosity). - //! - Fourth order cumulants \f$ C_{220} \f$, \f$ C_{202} \f$, \f$ C_{022} \f$, \f$ C_{211} \f$, \f$ C_{121} \f$, \f$ C_{112} \f$: for simplification all set to the same default value \f$ \omega_6=\omega_7=\omega_8=O4=1.0 \f$. - //! - Fifth order cumulants \f$ C_{221}\f$, \f$C_{212}\f$, \f$C_{122}\f$: \f$\omega_9=O5=1.0\f$. - //! - Sixth order cumulant \f$ C_{222}\f$: \f$\omega_{10}=O6=1.0\f$. - //! - //////////////////////////////////////////////////////////// - //2. - real OxxPyyPzz = c1o1; - //////////////////////////////////////////////////////////// - //3. - real OxyyPxzz = c8o1 * (-c2o1 + omega) * ( c1o1 + c2o1 *omega) / (-c8o1 - c14o1 *omega + c7o1 *omega*omega); - real OxyyMxzz = c8o1 * (-c2o1 + omega) * (-c7o1 + c4o1 *omega) / (c56o1 - c50o1 *omega + c9o1 *omega*omega); - real Oxyz = c24o1 * (-c2o1 + omega) * (-c2o1 - c7o1 *omega + c3o1 *omega*omega) / (c48o1 + c152o1 *omega - c130o1 *omega*omega + c29o1 *omega*omega*omega); - //////////////////////////////////////////////////////////// - //4. - real O4 = c1o1; - //////////////////////////////////////////////////////////// - //5. - real O5 = c1o1; - //////////////////////////////////////////////////////////// - //6. - real O6 = c1o1; - - //////////////////////////////////////////////////////////////////////////////////// - //! - A and B: parameters for fourth order convergence of the diffusion term according to Eq. (115) and (116) - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! with simplifications assuming \f$\omega_2 = 1.0\f$ (modify for different bulk viscosity). - //! - real A = (c4o1 + c2o1 *omega - c3o1 *omega*omega) / (c2o1 - c7o1 *omega + c5o1 *omega*omega); - real B = (c4o1 + c28o1 *omega - c14o1 *omega*omega) / (c6o1 - c21o1 *omega + c15o1 *omega*omega); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Compute cumulants from central moments according to Eq. (20)-(23) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////// - //4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) * OOrho; - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) * OOrho; - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) * OOrho; - - real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) * OOrho - c1o9 * (drho * OOrho)); - real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) * OOrho - c1o9 * (drho * OOrho)); - real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) * OOrho - c1o9 * (drho * OOrho)); - //////////////////////////////////////////////////////////// - //5. - real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) * OOrho; - real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) * OOrho; - real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) * OOrho; - //////////////////////////////////////////////////////////// - //6. - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) * OOrho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) * OOrho * OOrho - - c1o3 * (mfacc + mfcac + mfcca) * OOrho - - c1o9 * (mfcaa + mfaca + mfaac) * OOrho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 * (mfaac + mfaca + mfcaa)) * OOrho * OOrho * c2o3 - + c1o27 * ((drho * drho - drho) * OOrho * OOrho)); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Compute linear combinations of second and third order cumulants - //! - //////////////////////////////////////////////////////////// - //2. - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - //////////////////////////////////////////////////////////// - //3. - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //////////////////////////////////////////////////////////////////////////////////// - //incl. correction - //////////////////////////////////////////////////////////// - //! - Compute velocity gradients from second order cumulants according to Eq. (27)-(32) - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! Further explanations of the correction in viscosity in Appendix H of - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! Note that the division by rho is omitted here as we need rho times the gradients later. - //! - real Dxy = -c3o1 * omega * mfbba; - real Dxz = -c3o1 * omega * mfbab; - real Dyz = -c3o1 * omega * mfabb; - real dxux = c1o2 * (-omega) * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - //////////////////////////////////////////////////////////// - //! - Relaxation of second order cumulants with correction terms according to Eq. (33)-(35) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz); - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - - //////////////////////////////////////////////////////////////////////////////////// - //relax - ////////////////////////////////////////////////////////////////////////// - // incl. limiter - //! - Relaxation of third order cumulants including limiter according to Eq. (116)-(123) - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - wadjust = Oxyz + (c1o1 - Oxyz) * abs(mfbbb) / (abs(mfbbb) + qudricLimitD); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz) * abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimitP); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz) * abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimitM); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz) * abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimitP); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz) * abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimitM); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz) * abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimitP); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz) * abs(mxyyMxzz) / (abs(mxyyMxzz) + qudricLimitM); - mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - // no limiter - //mfbbb += OxyyMxzz * (-mfbbb); - //mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - //mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - //mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - //mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - //mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - //mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Compute inverse linear combinations of second and third order cumulants - //! - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1 * mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1 * mxxMzz + mxxPyyPzz); - - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - //4. - // no limiter - //! - Relax fourth order cumulants to modified equilibrium for fourth order convergence of diffusion according to Eq. (43)-(48) - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - CUMacc = -O4 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc); - CUMcac = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac); - CUMcca = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4 * (c1o1 / omega - c1o2) * Dxy * c1o3 * B + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4 * (c1o1 / omega - c1o2) * Dxz * c1o3 * B + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4 * (c1o1 / omega - c1o2) * Dyz * c1o3 * B + (c1o1 - O4) * (CUMcbb); - - ////////////////////////////////////////////////////////////////////////// - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - ////////////////////////////////////////////////////////////////////////// - //6. - CUMccc += O6 * (-CUMccc); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Compute central moments from post collision cumulants according to Eq. (53)-(56) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - - ////////////////////////////////////////////////////////////////////////// - //4. - mfcbb = CUMcbb + c1o3 * ((c3o1 * mfcaa + c1o1) * mfabb + c6o1 * mfbba * mfbab) * OOrho; - mfbcb = CUMbcb + c1o3 * ((c3o1 * mfaca + c1o1) * mfbab + c6o1 * mfbba * mfabb) * OOrho; - mfbbc = CUMbbc + c1o3 * ((c3o1 * mfaac + c1o1) * mfbba + c6o1 * mfbab * mfabb) * OOrho; - - mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba) * c9o1 + c3o1 * (mfcaa + mfaca)) * OOrho - (drho * OOrho)) * c1o9; - mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab) * c9o1 + c3o1 * (mfcaa + mfaac)) * OOrho - (drho * OOrho)) * c1o9; - mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) * c9o1 + c3o1 * (mfaac + mfaca)) * OOrho - (drho * OOrho)) * c1o9; - - ////////////////////////////////////////////////////////////////////////// - //5. - mfbcc = CUMbcc + c1o3 * (c3o1 * (mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + (mfbca + mfbac)) * OOrho; - mfcbc = CUMcbc + c1o3 * (c3o1 * (mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + (mfcba + mfabc)) * OOrho; - mfccb = CUMccb + c1o3 * (c3o1 * (mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + (mfacb + mfcab)) * OOrho; - - ////////////////////////////////////////////////////////////////////////// - //6. - mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) * OOrho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) * OOrho * OOrho - - c1o3 * (mfacc + mfcac + mfcca) * OOrho - - c1o9 * (mfcaa + mfaca + mfaac) * OOrho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 * (mfaac + mfaca + mfcaa)) * OOrho * OOrho * c2o3 - + c1o27 * ((drho * drho - drho) * OOrho * OOrho)); - - - //////////////////////////////////////////////////////////////////////////////////// - //! - Add acceleration (body force) to first order cumulants according to Eq. (85)-(87) in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (88)-(96) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - backwardInverseChimeraWithK(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1); - backwardChimera(mfaba, mfbba, mfcba, vvx, vx2); - backwardInverseChimeraWithK(mfaca, mfbca, mfcca, vvx, vx2, c3o1, c1o3); - backwardChimera(mfaab, mfbab, mfcab, vvx, vx2); - backwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); - backwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); - backwardInverseChimeraWithK(mfaac, mfbac, mfcac, vvx, vx2, c3o1, c1o3); - backwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); - backwardInverseChimeraWithK(mfacc, mfbcc, mfccc, vvx, vx2, c9o1, c1o9); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - backwardInverseChimeraWithK(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6); - backwardChimera(mfaab, mfabb, mfacb, vvy, vy2); - backwardInverseChimeraWithK(mfaac, mfabc, mfacc, vvy, vy2, c18o1, c1o18); - backwardInverseChimeraWithK(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3); - backwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); - backwardInverseChimeraWithK(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9); - backwardInverseChimeraWithK(mfcaa, mfcba, mfcca, vvy, vy2, c6o1, c1o6); - backwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); - backwardInverseChimeraWithK(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18); - - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - backwardInverseChimeraWithK(mfaaa, mfaab, mfaac, vvz, vz2, c36o1, c1o36); - backwardInverseChimeraWithK(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9); - backwardInverseChimeraWithK(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36); - backwardInverseChimeraWithK(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9); - backwardInverseChimeraWithK(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9); - backwardInverseChimeraWithK(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9); - backwardInverseChimeraWithK(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36); - backwardInverseChimeraWithK(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9); - backwardInverseChimeraWithK(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36); - //////////////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - //proof correctness - ////////////////////////////////////////////////////////////////////////// -#ifdef PROOF_CORRECTNESS - real drho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - real dif = drho - drho_post; -#ifdef SINGLEPRECISION - if (dif > 10.0E-7 || dif < -10.0E-7) -#else - if (dif > 10.0E-15 || dif < -10.0E-15) -#endif - { - UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(drho_post) - + " dif=" + UbSystem::toString(dif) - + " rho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3) - + " in " + block.lock()->toString() + " step = " + UbSystem::toString(step))); - } -#endif - //////////////////////////////////////////////////////////////////////////////////// - //! - Write distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm - //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> - //! - (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = mfabb; - (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = mfbab; - (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = mfbba; - (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; - (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; - (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; - (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; - (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; - (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; - (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; - (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; - (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; - (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; - - (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb; - (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb; - (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; - (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb; - (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb; - (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; - (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; - (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; - (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; - (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; - (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; - (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; - (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; - - (*this->restDistributions)(x1, x2, x3) = mfbbb; - ////////////////////////////////////////////////////////////////////////// - - } - } - } - } -} -////////////////////////////////////////////////////////////////////////// - diff --git a/src/cpu/core/LBM/CumulantK17LBMKernel.h b/src/cpu/core/LBM/CumulantK17LBMKernel.h deleted file mode 100644 index aa202d789..000000000 --- a/src/cpu/core/LBM/CumulantK17LBMKernel.h +++ /dev/null @@ -1,76 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// 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 CumulantK17LBMKernel.h -//! \ingroup LBM -//! \author Konstantin Kutscher, Martin Geier -//======================================================================================= - -#ifndef CumulantK17LBMKernel_h__ -#define CumulantK17LBMKernel_h__ - -#include "LBMKernel.h" -#include "BCSet.h" -#include "D3Q27System.h" -#include "basics/utilities/UbTiming.h" -#include "basics/container/CbArray4D.h" -#include "basics/container/CbArray3D.h" - -//! \brief Compressible cumulant LBM kernel. -//! \details LBM implementation that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model -//! -//! The model is publisched in -//! <a href="http://dx.doi.org/10.1016/j.jcp.2017.05.040"><b>[ Geier et al., (2017), 10.1016/j.jcp.2017.05.040]</b></a>, -//! <a href="http://dx.doi.org/10.1016/j.jcp.2017.07.004"><b>[ Geier et al., (2017), 10.1016/j.jcp.2017.07.004]</b></a> -//! -class CumulantK17LBMKernel : public LBMKernel -{ -public: - CumulantK17LBMKernel(); - ~CumulantK17LBMKernel() = default; - void calculate(int step) override; - SPtr<LBMKernel> clone() override; - real getCalculationTime() override { return .0; } - -protected: - virtual void initDataSet(); - real f[D3Q27System::ENDF + 1]; - - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributions; - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr restDistributions; - - mu::value_type muX1, muX2, muX3; - mu::value_type muDeltaT; - mu::value_type muNu; - real forcingX1; - real forcingX2; - real forcingX3; -}; - -#endif // CumulantK17LBMKernel_h__ diff --git a/src/cpu/core/LBM/CumulantLBMKernel.cpp b/src/cpu/core/LBM/CumulantLBMKernel.cpp deleted file mode 100644 index 1b8d5a230..000000000 --- a/src/cpu/core/LBM/CumulantLBMKernel.cpp +++ /dev/null @@ -1,1966 +0,0 @@ -#include "CumulantLBMKernel.h" -#include "D3Q27System.h" -#include "Interpolator.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include <math.h> -#include "DataSet3D.h" -#include "Block3D.h" - -#define PROOF_CORRECTNESS - -//using namespace UbMath; -using namespace vf::basics::constant; - -////////////////////////////////////////////////////////////////////////// -CumulantLBMKernel::CumulantLBMKernel() -{ - this->compressible = true; - this->parameter = CumulantLBMKernel::NORMAL; - this->OxyyMxzz = c1o1; - this->bulkOmegaToOmega = false; - this->OxxPyyPzz = c1o1; -} -////////////////////////////////////////////////////////////////////////// -void CumulantLBMKernel::initDataSet() -{ - SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9)); - dataSet->setFdistributions(d); -} -////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> CumulantLBMKernel::clone() -{ - SPtr<LBMKernel> kernel(new CumulantLBMKernel()); - kernel->setNX(nx); - dynamicPointerCast<CumulantLBMKernel>(kernel)->initDataSet(); - kernel->setCollisionFactor(this->collFactor); - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - kernel->setDeltaT(deltaT); - kernel->setBlock(block.lock()); - - switch (parameter) - { - case NORMAL: - dynamicPointerCast<CumulantLBMKernel>(kernel)->OxyyMxzz = c1o1; - break; - case MAGIC: - dynamicPointerCast<CumulantLBMKernel>(kernel)->OxyyMxzz = c2o1 + (-collFactor); - break; - } - - if (bulkOmegaToOmega) - { - dynamicPointerCast<CumulantLBMKernel>(kernel)->OxxPyyPzz = collFactor; - } - else - { - dynamicPointerCast<CumulantLBMKernel>(kernel)->OxxPyyPzz = c1o1; - } - return kernel; -} -////////////////////////////////////////////////////////////////////////// -//void CumulantLBMKernel::calculate(int step) -//{ -// using namespace D3Q27System; -// using namespace std; -// -// //timer.resetAndStart(); -// -// //initializing of forcing stuff -// if (withForcing) -// { -// muForcingX1.DefineVar("x1", &muX1); muForcingX1.DefineVar("x2", &muX2); muForcingX1.DefineVar("x3", &muX3); -// muForcingX2.DefineVar("x1", &muX1); muForcingX2.DefineVar("x2", &muX2); muForcingX2.DefineVar("x3", &muX3); -// muForcingX3.DefineVar("x1", &muX1); muForcingX3.DefineVar("x2", &muX2); muForcingX3.DefineVar("x3", &muX3); -// -// muDeltaT = deltaT; -// -// muForcingX1.DefineVar("dt", &muDeltaT); -// muForcingX2.DefineVar("dt", &muDeltaT); -// muForcingX3.DefineVar("dt", &muDeltaT); -// -// muNu = (1.0 / 3.0) * (1.0 / collFactor - 1.0 / 2.0); -// -// muForcingX1.DefineVar("nu", &muNu); -// muForcingX2.DefineVar("nu", &muNu); -// muForcingX3.DefineVar("nu", &muNu); -// -// LBMReal forcingX1 = 0; -// LBMReal forcingX2 = 0; -// LBMReal forcingX3 = 0; -// } -// ///////////////////////////////////// -// -// localDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); -// nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); -// zeroDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); -// -// SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); -// -// const int bcArrayMaxX1 = (int)bcArray->getNX1(); -// const int bcArrayMaxX2 = (int)bcArray->getNX2(); -// const int bcArrayMaxX3 = (int)bcArray->getNX3(); -// -// int minX1 = ghostLayerWidth; -// int minX2 = ghostLayerWidth; -// int minX3 = ghostLayerWidth; -// int maxX1 = bcArrayMaxX1 - ghostLayerWidth; -// int maxX2 = bcArrayMaxX2 - ghostLayerWidth; -// int maxX3 = bcArrayMaxX3 - ghostLayerWidth; -// -// LBMReal omega = collFactor; -// -// -// //#pragma omp parallel num_threads(8) -// { -// // int i = omp_get_thread_num(); -// // printf_s("Hello from thread %d\n", i); -// //} -// //#pragma omp for -// 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)) -// { -// int x1p = x1 + 1; -// int x2p = x2 + 1; -// int x3p = x3 + 1; -// ////////////////////////////////////////////////////////////////////////// -// //read distribution -// //////////////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////////////// -// -// //E N T -// //c c c -// ////////// -// //W S B -// //a a a -// -// //Rest ist b -// -// //mfxyz -// //a - negative -// //b - null -// //c - positive -// -// // a b c -// //-1 0 1 -// -// LBMReal mfcbb = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3); -// LBMReal mfbcb = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3); -// LBMReal mfbbc = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3); -// LBMReal mfccb = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3); -// LBMReal mfacb = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3); -// LBMReal mfcbc = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3); -// LBMReal mfabc = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3); -// LBMReal mfbcc = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3); -// LBMReal mfbac = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3); -// LBMReal mfccc = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3); -// LBMReal mfacc = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3); -// LBMReal mfcac = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3); -// LBMReal mfaac = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3); -// -// LBMReal mfabb = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3); -// LBMReal mfbab = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3); -// LBMReal mfbba = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p); -// LBMReal mfaab = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3); -// LBMReal mfcab = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3); -// LBMReal mfaba = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p); -// LBMReal mfcba = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p); -// LBMReal mfbaa = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p); -// LBMReal mfbca = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p); -// LBMReal mfaaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p); -// LBMReal mfcaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p); -// LBMReal mfaca = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p); -// LBMReal mfcca = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p); -// -// LBMReal mfbbb = (*this->zeroDistributions)(x1, x2, x3); -// -// //////////////////////////////////////////////////////////////////////////////////// -// LBMReal drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + -// (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + -// ((mfabb + mfcbb) + (mfbab + mfbcb)) + (mfbba + mfbbc)) + mfbbb; -// -// LBMReal rho = one + drho; -// //////////////////////////////////////////////////////////////////////////////////// -// LBMReal vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + -// (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + -// (mfcbb - mfabb)) / rho; -// LBMReal vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + -// (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + -// (mfbcb - mfbab)) / rho; -// LBMReal vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + -// (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + -// (mfbbc - mfbba)) / rho; -// //////////////////////////////////////////////////////////////////////////////////// -// -// //forcing -// /////////////////////////////////////////////////////////////////////////////////////////// -// if (withForcing) -// { -// muX1 = static_cast<double>(x1 - 1 + ix1 * maxX1); -// muX2 = static_cast<double>(x2 - 1 + ix2 * maxX2); -// muX3 = static_cast<double>(x3 - 1 + ix3 * maxX3); -// -// forcingX1 = muForcingX1.Eval(); -// forcingX2 = muForcingX2.Eval(); -// forcingX3 = muForcingX3.Eval(); -// -// vvx += forcingX1 * deltaT * 0.5; // X -// vvy += forcingX2 * deltaT * 0.5; // Y -// vvz += forcingX3 * deltaT * 0.5; // Z -// } -// /////////////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// LBMReal oMdrho = one; // comp special -// //////////////////////////////////////////////////////////////////////////////////// -// LBMReal m0, m1, m2; -// LBMReal vx2; -// LBMReal vy2; -// LBMReal vz2; -// vx2 = vvx * vvx; -// vy2 = vvy * vvy; -// vz2 = vvz * vvz; -// //////////////////////////////////////////////////////////////////////////////////// -// //LBMReal wadjust; -// //LBMReal qudricLimitP = 0.01f;// * 0.0001f; -// //LBMReal qudricLimitM = 0.01f;// * 0.0001f; -// //LBMReal qudricLimitD = 0.01f;// * 0.001f; -// //LBMReal s9 = minusomega; -// //test -// //s9 = 0.; -// //////////////////////////////////////////////////////////////////////////////////// -// //Hin -// //////////////////////////////////////////////////////////////////////////////////// -// // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // Z - Dir -// m2 = mfaaa + mfaac; -// m1 = mfaac - mfaaa; -// m0 = m2 + mfaab; -// mfaaa = m0; -// m0 += c1o36 * oMdrho; -// mfaab = m1 - m0 * vvz; -// mfaac = m2 - two * m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaba + mfabc; -// m1 = mfabc - mfaba; -// m0 = m2 + mfabb; -// mfaba = m0; -// m0 += c1o9 * oMdrho; -// mfabb = m1 - m0 * vvz; -// mfabc = m2 - two * m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaca + mfacc; -// m1 = mfacc - mfaca; -// m0 = m2 + mfacb; -// mfaca = m0; -// m0 += c1o36 * oMdrho; -// mfacb = m1 - m0 * vvz; -// mfacc = m2 - two * m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbaa + mfbac; -// m1 = mfbac - mfbaa; -// m0 = m2 + mfbab; -// mfbaa = m0; -// m0 += c1o9 * oMdrho; -// mfbab = m1 - m0 * vvz; -// mfbac = m2 - two * m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbba + mfbbc; -// m1 = mfbbc - mfbba; -// m0 = m2 + mfbbb; -// mfbba = m0; -// m0 += c4o9 * oMdrho; -// mfbbb = m1 - m0 * vvz; -// mfbbc = m2 - two * m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbca + mfbcc; -// m1 = mfbcc - mfbca; -// m0 = m2 + mfbcb; -// mfbca = m0; -// m0 += c1o9 * oMdrho; -// mfbcb = m1 - m0 * vvz; -// mfbcc = m2 - two * m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcaa + mfcac; -// m1 = mfcac - mfcaa; -// m0 = m2 + mfcab; -// mfcaa = m0; -// m0 += c1o36 * oMdrho; -// mfcab = m1 - m0 * vvz; -// mfcac = m2 - two * m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcba + mfcbc; -// m1 = mfcbc - mfcba; -// m0 = m2 + mfcbb; -// mfcba = m0; -// m0 += c1o9 * oMdrho; -// mfcbb = m1 - m0 * vvz; -// mfcbc = m2 - two * m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcca + mfccc; -// m1 = mfccc - mfcca; -// m0 = m2 + mfccb; -// mfcca = m0; -// m0 += c1o36 * oMdrho; -// mfccb = m1 - m0 * vvz; -// mfccc = m2 - two * m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // Y - Dir -// m2 = mfaaa + mfaca; -// m1 = mfaca - mfaaa; -// m0 = m2 + mfaba; -// mfaaa = m0; -// m0 += c1o6 * oMdrho; -// mfaba = m1 - m0 * vvy; -// mfaca = m2 - two * m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaab + mfacb; -// m1 = mfacb - mfaab; -// m0 = m2 + mfabb; -// mfaab = m0; -// mfabb = m1 - m0 * vvy; -// mfacb = m2 - two * m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaac + mfacc; -// m1 = mfacc - mfaac; -// m0 = m2 + mfabc; -// mfaac = m0; -// m0 += c1o18 * oMdrho; -// mfabc = m1 - m0 * vvy; -// mfacc = m2 - two * m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbaa + mfbca; -// m1 = mfbca - mfbaa; -// m0 = m2 + mfbba; -// mfbaa = m0; -// m0 += c2o3 * oMdrho; -// mfbba = m1 - m0 * vvy; -// mfbca = m2 - two * m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbab + mfbcb; -// m1 = mfbcb - mfbab; -// m0 = m2 + mfbbb; -// mfbab = m0; -// mfbbb = m1 - m0 * vvy; -// mfbcb = m2 - two * m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbac + mfbcc; -// m1 = mfbcc - mfbac; -// m0 = m2 + mfbbc; -// mfbac = m0; -// m0 += c2o9 * oMdrho; -// mfbbc = m1 - m0 * vvy; -// mfbcc = m2 - two * m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcaa + mfcca; -// m1 = mfcca - mfcaa; -// m0 = m2 + mfcba; -// mfcaa = m0; -// m0 += c1o6 * oMdrho; -// mfcba = m1 - m0 * vvy; -// mfcca = m2 - two * m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcab + mfccb; -// m1 = mfccb - mfcab; -// m0 = m2 + mfcbb; -// mfcab = m0; -// mfcbb = m1 - m0 * vvy; -// mfccb = m2 - two * m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcac + mfccc; -// m1 = mfccc - mfcac; -// m0 = m2 + mfcbc; -// mfcac = m0; -// m0 += c1o18 * oMdrho; -// mfcbc = m1 - m0 * vvy; -// mfccc = m2 - two * m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // X - Dir -// m2 = mfaaa + mfcaa; -// m1 = mfcaa - mfaaa; -// m0 = m2 + mfbaa; -// mfaaa = m0; -// m0 += one * oMdrho; -// mfbaa = m1 - m0 * vvx; -// mfcaa = m2 - two * m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaba + mfcba; -// m1 = mfcba - mfaba; -// m0 = m2 + mfbba; -// mfaba = m0; -// mfbba = m1 - m0 * vvx; -// mfcba = m2 - two * m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaca + mfcca; -// m1 = mfcca - mfaca; -// m0 = m2 + mfbca; -// mfaca = m0; -// m0 += c1o3 * oMdrho; -// mfbca = m1 - m0 * vvx; -// mfcca = m2 - two * m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaab + mfcab; -// m1 = mfcab - mfaab; -// m0 = m2 + mfbab; -// mfaab = m0; -// mfbab = m1 - m0 * vvx; -// mfcab = m2 - two * m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfabb + mfcbb; -// m1 = mfcbb - mfabb; -// m0 = m2 + mfbbb; -// mfabb = m0; -// mfbbb = m1 - m0 * vvx; -// mfcbb = m2 - two * m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfacb + mfccb; -// m1 = mfccb - mfacb; -// m0 = m2 + mfbcb; -// mfacb = m0; -// mfbcb = m1 - m0 * vvx; -// mfccb = m2 - two * m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaac + mfcac; -// m1 = mfcac - mfaac; -// m0 = m2 + mfbac; -// mfaac = m0; -// m0 += c1o3 * oMdrho; -// mfbac = m1 - m0 * vvx; -// mfcac = m2 - two * m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfabc + mfcbc; -// m1 = mfcbc - mfabc; -// m0 = m2 + mfbbc; -// mfabc = m0; -// mfbbc = m1 - m0 * vvx; -// mfcbc = m2 - two * m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfacc + mfccc; -// m1 = mfccc - mfacc; -// m0 = m2 + mfbcc; -// mfacc = m0; -// m0 += c1o9 * oMdrho; -// mfbcc = m1 - m0 * vvx; -// mfccc = m2 - two * m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// -// -// //////////////////////////////////////////////////////////////////////////////////// -// // Cumulants -// //////////////////////////////////////////////////////////////////////////////////// -// -// //LBMReal OxxPyyPzz = one; // bulk viscosity -// -// //////////////////////////////////////////////////////////// -// //3. -// ////////////////////////////// -// LBMReal OxyyPxzz = one;//three * (two - omega) / (three - omega);// -// //LBMReal OxyyMxzz = one;//six * (two - omega) / (six - omega);// -// LBMReal Oxyz = one;//twelve * (two - omega) / (twelve + omega);// -// ////////////////////////////// -// //LBMReal OxyyPxzz = two-omega;// -// //LBMReal OxyyMxzz = two-omega;// -// ////////////////////////////// -// //LBMReal OxyyPxzz = (eight * (omega - two)) / (omega - eight);//Ginzburg -// //LBMReal OxyyMxzz = (eight * (omega - two)) / (omega - eight);//Ginzburg -// ////////////////////////////// -// //LBMReal OxyyPxzz = omega;//BGK -// //LBMReal OxyyMxzz = omega;//BGK -// ////////////////////////////// -// //LBMReal OxyyPxzz = (one + omega) / two;//1P5 -// //LBMReal OxyyMxzz = (one + omega) / two;//1P5 -// ////////////////////////////// -// //LBMReal OxyyPxzz = (three - omega) / two;//0P5 -// //LBMReal OxyyMxzz = (three - omega) / two;//0P5 -// ////////////////////////////// -// //LBMReal OxyyPxzz = (one + (eight * (omega - two)) / (omega - eight)) / two;//one + Ginzburg / two ... Car -// //LBMReal OxyyMxzz = (one + (eight * (omega - two)) / (omega - eight)) / two;//one + Ginzburg / two ... Car -// //////////////////////////////////////////////////////////// -// //4. -// ////////////////////////////// -// LBMReal O4 = one; -// ////////////////////////////// -// //LBMReal O4 = omega;//TRT -// //////////////////////////////////////////////////////////// -// //5. -// ////////////////////////////// -// LBMReal O5 = one; -// //////////////////////////////////////////////////////////// -// //6. -// ////////////////////////////// -// LBMReal O6 = one; -// //////////////////////////////////////////////////////////// -// -// -// //central moments to cumulants -// //4. -// LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + two * mfbba * mfbab) / rho; //ab 15.05.2015 verwendet -// LBMReal CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + two * mfbba * mfabb) / rho; //ab 15.05.2015 verwendet -// LBMReal CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + two * mfbab * mfabb) / rho; //ab 15.05.2015 verwendet -// -// LBMReal CUMcca = mfcca - (((mfcaa * mfaca + two * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9 * (drho / rho)); -// LBMReal CUMcac = mfcac - (((mfcaa * mfaac + two * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9 * (drho / rho)); -// LBMReal CUMacc = mfacc - (((mfaac * mfaca + two * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9 * (drho / rho)); -// -// //5. -// LBMReal CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + four * mfabb * mfbbb + two * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; -// LBMReal CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + four * mfbab * mfbbb + two * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; -// LBMReal CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + four * mfbba * mfbbb + two * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; -// -// //6. -// -// LBMReal CUMccc = mfccc + ((-four * mfbbb * mfbbb -// - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -// - four * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) -// - two * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho -// + (four * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) -// + two * (mfcaa * mfaca * mfaac) -// + sixteen * mfbba * mfbab * mfabb) / (rho * rho) -// - c1o3 * (mfacc + mfcac + mfcca) / rho -// - c1o9 * (mfcaa + mfaca + mfaac) / rho -// + (two * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) -// + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 * (mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 -// + c1o27 * ((drho * drho - drho) / (rho * rho))); -// //+ c1o27*(one -three/rho +two/(rho*rho))); -// -// -// -// -// //2. -// // linear combinations -// LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac; -// LBMReal mxxMyy = mfcaa - mfaca; -// LBMReal mxxMzz = mfcaa - mfaac; -// -// ////////////////////////////////////////////////////////////////////////// -// // LBMReal magicBulk=(CUMacc+CUMcac+CUMcca)*(one/OxxPyyPzz-c1o2)*c3o2*8.; -// -// ////////////////////////////////////////////////////////////////////////// -// //limiter-Scheise Teil 1 -// //LBMReal oxxyy,oxxzz,oxy,oxz,oyz; -// //LBMReal smag=0.001; -// //oxxyy = omega+(one-omega)*fabs(mxxMyy)/(fabs(mxxMyy)+smag); -// //oxxzz = omega+(one-omega)*fabs(mxxMzz)/(fabs(mxxMzz)+smag); -// //oxy = omega+(one-omega)*fabs(mfbba)/(fabs(mfbba)+smag); -// //oxz = omega+(one-omega)*fabs(mfbab)/(fabs(mfbab)+smag); -// //oyz = omega+(one-omega)*fabs(mfabb)/(fabs(mfabb)+smag); -// -// //////////////////////////////////////////////////////////////////////////// -// ////Teil 1b -// //LBMReal constante = 1000.0; -// //LBMReal nuEddi = constante * fabs(mxxPyyPzz); -// //LBMReal omegaLimit = one / (one / omega + three * nuEddi); -// -// //{ -// // LBMReal dxux = c1o2 * (-omegaLimit) *(mxxMyy + mxxMzz) + OxxPyyPzz * (mfaaa - mxxPyyPzz); -// // LBMReal dyuy = dxux + omegaLimit * c3o2 * mxxMyy; -// // LBMReal dzuz = dxux + omegaLimit * c3o2 * mxxMzz; -// -// ////relax -// //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); -// //mxxMyy += omegaLimit * (-mxxMyy) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vy2 * dyuy); -// //mxxMzz += omegaLimit * (-mxxMzz) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vz2 * dzuz); -// -// //} -// //mfabb += omegaLimit * (-mfabb); -// //mfbab += omegaLimit * (-mfbab); -// //mfbba += omegaLimit * (-mfbba); -// //////////////////////////////////////////////////////////////////////////// -// -// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) -// { -// LBMReal dxux = c1o2 * (-omega) * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); -// LBMReal dyuy = dxux + omega * c3o2 * mxxMyy; -// LBMReal dzuz = dxux + omega * c3o2 * mxxMzz; -// -// //relax -// mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) - three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; -// mxxMyy += omega * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); -// mxxMzz += omega * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); -// -// ////////////////////////////////////////////////////////////////////////// -// //limiter-Scheise Teil 2 -// //mxxMyy += oxxyy * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy); -// //mxxMzz += oxxzz * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz); -// ////////////////////////////////////////////////////////////////////////// -// -// } -// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ////no correction -// //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; -// //mxxMyy += -(-omega) * (-mxxMyy); -// //mxxMzz += -(-omega) * (-mxxMzz); -// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// mfabb += omega * (-mfabb); -// mfbab += omega * (-mfbab); -// mfbba += omega * (-mfbba); -// -// ////////////////////////////////////////////////////////////////////////// -// //limiter-Scheise Teil 3 -// //mfabb += oyz * (-mfabb); -// //mfbab += oxz * (-mfbab); -// //mfbba += oxy * (-mfbba); -// ////////////////////////////////////////////////////////////////////////// -// -// // linear combinations back -// mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); -// mfaca = c1o3 * (-two * mxxMyy + mxxMzz + mxxPyyPzz); -// mfaac = c1o3 * (mxxMyy - two * mxxMzz + mxxPyyPzz); -// -// //3. -// // linear combinations -// -// LBMReal mxxyPyzz = mfcba + mfabc; -// LBMReal mxxyMyzz = mfcba - mfabc; -// -// LBMReal mxxzPyyz = mfcab + mfacb; -// LBMReal mxxzMyyz = mfcab - mfacb; -// -// LBMReal mxyyPxzz = mfbca + mfbac; -// LBMReal mxyyMxzz = mfbca - mfbac; -// -// //relax -// ////////////////////////////////////////////////////////////////////////// -// //das ist der limiter -// //wadjust = Oxyz+(one-Oxyz)*fabs(mfbbb)/(fabs(mfbbb)+qudricLimitD); -// //mfbbb += wadjust * (-mfbbb); -// //wadjust = OxyyPxzz+(one-OxyyPxzz)*fabs(mxxyPyzz)/(fabs(mxxyPyzz)+qudricLimitP); -// //mxxyPyzz += wadjust * (-mxxyPyzz); -// //wadjust = OxyyMxzz+(one-OxyyMxzz)*fabs(mxxyMyzz)/(fabs(mxxyMyzz)+qudricLimitM); -// //mxxyMyzz += wadjust * (-mxxyMyzz); -// //wadjust = OxyyPxzz+(one-OxyyPxzz)*fabs(mxxzPyyz)/(fabs(mxxzPyyz)+qudricLimitP); -// //mxxzPyyz += wadjust * (-mxxzPyyz); -// //wadjust = OxyyMxzz+(one-OxyyMxzz)*fabs(mxxzMyyz)/(fabs(mxxzMyyz)+qudricLimitM); -// //mxxzMyyz += wadjust * (-mxxzMyyz); -// //wadjust = OxyyPxzz+(one-OxyyPxzz)*fabs(mxyyPxzz)/(fabs(mxyyPxzz)+qudricLimitP); -// //mxyyPxzz += wadjust * (-mxyyPxzz); -// //wadjust = OxyyMxzz+(one-OxyyMxzz)*fabs(mxyyMxzz)/(fabs(mxyyMxzz)+qudricLimitM); -// //mxyyMxzz += wadjust * (-mxyyMxzz); -// ////////////////////////////////////////////////////////////////////////// -// //ohne limiter -// mfbbb += OxyyMxzz * (-mfbbb); -// mxxyPyzz += OxyyPxzz * (-mxxyPyzz); -// mxxyMyzz += OxyyMxzz * (-mxxyMyzz); -// mxxzPyyz += OxyyPxzz * (-mxxzPyyz); -// mxxzMyyz += OxyyMxzz * (-mxxzMyyz); -// mxyyPxzz += OxyyPxzz * (-mxyyPxzz); -// mxyyMxzz += OxyyMxzz * (-mxyyMxzz); -// ////////////////////////////////////////////////////////////////////////// -// -// //// linear combinations back -// mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; -// mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; -// mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; -// mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; -// mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; -// mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; -// -// //4. -// ////////////////////////////////////////////////////////////////////////// -// //mit limiter -// // wadjust = O4+(one-O4)*fabs(CUMacc)/(fabs(CUMacc)+qudricLimit); -// //CUMacc += wadjust * (-CUMacc); -// // wadjust = O4+(one-O4)*fabs(CUMcac)/(fabs(CUMcac)+qudricLimit); -// //CUMcac += wadjust * (-CUMcac); -// // wadjust = O4+(one-O4)*fabs(CUMcca)/(fabs(CUMcca)+qudricLimit); -// //CUMcca += wadjust * (-CUMcca); -// -// // wadjust = O4+(one-O4)*fabs(CUMbbc)/(fabs(CUMbbc)+qudricLimit); -// //CUMbbc += wadjust * (-CUMbbc); -// // wadjust = O4+(one-O4)*fabs(CUMbcb)/(fabs(CUMbcb)+qudricLimit); -// //CUMbcb += wadjust * (-CUMbcb); -// // wadjust = O4+(one-O4)*fabs(CUMcbb)/(fabs(CUMcbb)+qudricLimit); -// //CUMcbb += wadjust * (-CUMcbb); -// ////////////////////////////////////////////////////////////////////////// -// //ohne limiter -// CUMacc += O4 * (-CUMacc); -// CUMcac += O4 * (-CUMcac); -// CUMcca += O4 * (-CUMcca); -// -// CUMbbc += O4 * (-CUMbbc); -// CUMbcb += O4 * (-CUMbcb); -// CUMcbb += O4 * (-CUMcbb); -// ////////////////////////////////////////////////////////////////////////// -// -// -// //5. -// CUMbcc += O5 * (-CUMbcc); -// CUMcbc += O5 * (-CUMcbc); -// CUMccb += O5 * (-CUMccb); -// -// //6. -// CUMccc += O6 * (-CUMccc); -// -// -// -// //back cumulants to central moments -// //4. -// mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + two * mfbba * mfbab) / rho; -// mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + two * mfbba * mfabb) / rho; -// mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + two * mfbab * mfabb) / rho; -// -// mfcca = CUMcca + (((mfcaa * mfaca + two * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9 * (drho / rho));//(one/rho-one)); -// mfcac = CUMcac + (((mfcaa * mfaac + two * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9 * (drho / rho));//(one/rho-one)); -// mfacc = CUMacc + (((mfaac * mfaca + two * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9 * (drho / rho));//(one/rho-one)); -// -// //5. -// mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + four * mfabb * mfbbb + two * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; -// mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + four * mfbab * mfbbb + two * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; -// mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + four * mfbba * mfbbb + two * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; -// -// //6. -// -// mfccc = CUMccc - ((-four * mfbbb * mfbbb -// - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -// - four * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) -// - two * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho -// + (four * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) -// + two * (mfcaa * mfaca * mfaac) -// + sixteen * mfbba * mfbab * mfabb) / (rho * rho) -// - c1o3 * (mfacc + mfcac + mfcca) / rho -// - c1o9 * (mfcaa + mfaca + mfaac) / rho -// + (two * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) -// + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 * (mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 -// + c1o27 * ((drho * drho - drho) / (rho * rho))); -// //////////////////////////////////////////////////////////////////////////////////// -// //forcing -// mfbaa = -mfbaa; -// mfaba = -mfaba; -// mfaab = -mfaab; -// ////////////////////////////////////////////////////////////////////////////////////// -// -// //////////////////////////////////////////////////////////////////////////////////// -// //back -// //////////////////////////////////////////////////////////////////////////////////// -// //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // Z - Dir -// m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + one * oMdrho) * (vz2 - vvz) * c1o2; -// m1 = -mfaac - two * mfaab * vvz + mfaaa * (one - vz2) - one * oMdrho * vz2; -// m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + one * oMdrho) * (vz2 + vvz) * c1o2; -// mfaaa = m0; -// mfaab = m1; -// mfaac = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; -// m1 = -mfabc - two * mfabb * vvz + mfaba * (one - vz2); -// m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; -// mfaba = m0; -// mfabb = m1; -// mfabc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; -// m1 = -mfacc - two * mfacb * vvz + mfaca * (one - vz2) - c1o3 * oMdrho * vz2; -// m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; -// mfaca = m0; -// mfacb = m1; -// mfacc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; -// m1 = -mfbac - two * mfbab * vvz + mfbaa * (one - vz2); -// m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; -// mfbaa = m0; -// mfbab = m1; -// mfbac = m2; -// /////////b////////////////////////////////////////////////////////////////////////// -// m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; -// m1 = -mfbbc - two * mfbbb * vvz + mfbba * (one - vz2); -// m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; -// mfbba = m0; -// mfbbb = m1; -// mfbbc = m2; -// /////////b////////////////////////////////////////////////////////////////////////// -// m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; -// m1 = -mfbcc - two * mfbcb * vvz + mfbca * (one - vz2); -// m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; -// mfbca = m0; -// mfbcb = m1; -// mfbcc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; -// m1 = -mfcac - two * mfcab * vvz + mfcaa * (one - vz2) - c1o3 * oMdrho * vz2; -// m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; -// mfcaa = m0; -// mfcab = m1; -// mfcac = m2; -// /////////c////////////////////////////////////////////////////////////////////////// -// m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; -// m1 = -mfcbc - two * mfcbb * vvz + mfcba * (one - vz2); -// m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; -// mfcba = m0; -// mfcbb = m1; -// mfcbc = m2; -// /////////c////////////////////////////////////////////////////////////////////////// -// m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; -// m1 = -mfccc - two * mfccb * vvz + mfcca * (one - vz2) - c1o9 * oMdrho * vz2; -// m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; -// mfcca = m0; -// mfccb = m1; -// mfccc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // Y - Dir -// m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfaca - two * mfaba * vvy + mfaaa * (one - vy2) - c1o6 * oMdrho * vy2; -// m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; -// mfaaa = m0; -// mfaba = m1; -// mfaca = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfacb - two * mfabb * vvy + mfaab * (one - vy2) - c2o3 * oMdrho * vy2; -// m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; -// mfaab = m0; -// mfabb = m1; -// mfacb = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfacc - two * mfabc * vvy + mfaac * (one - vy2) - c1o6 * oMdrho * vy2; -// m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; -// mfaac = m0; -// mfabc = m1; -// mfacc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; -// m1 = -mfbca - two * mfbba * vvy + mfbaa * (one - vy2); -// m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; -// mfbaa = m0; -// mfbba = m1; -// mfbca = m2; -// /////////b////////////////////////////////////////////////////////////////////////// -// m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; -// m1 = -mfbcb - two * mfbbb * vvy + mfbab * (one - vy2); -// m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; -// mfbab = m0; -// mfbbb = m1; -// mfbcb = m2; -// /////////b////////////////////////////////////////////////////////////////////////// -// m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; -// m1 = -mfbcc - two * mfbbc * vvy + mfbac * (one - vy2); -// m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; -// mfbac = m0; -// mfbbc = m1; -// mfbcc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfcca - two * mfcba * vvy + mfcaa * (one - vy2) - c1o18 * oMdrho * vy2; -// m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; -// mfcaa = m0; -// mfcba = m1; -// mfcca = m2; -// /////////c////////////////////////////////////////////////////////////////////////// -// m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfccb - two * mfcbb * vvy + mfcab * (one - vy2) - c2o9 * oMdrho * vy2; -// m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; -// mfcab = m0; -// mfcbb = m1; -// mfccb = m2; -// /////////c////////////////////////////////////////////////////////////////////////// -// m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfccc - two * mfcbc * vvy + mfcac * (one - vy2) - c1o18 * oMdrho * vy2; -// m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; -// mfcac = m0; -// mfcbc = m1; -// mfccc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // X - Dir -// m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcaa - two * mfbaa * vvx + mfaaa * (one - vx2) - c1o36 * oMdrho * vx2; -// m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; -// mfaaa = m0; -// mfbaa = m1; -// mfcaa = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcba - two * mfbba * vvx + mfaba * (one - vx2) - c1o9 * oMdrho * vx2; -// m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; -// mfaba = m0; -// mfbba = m1; -// mfcba = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcca - two * mfbca * vvx + mfaca * (one - vx2) - c1o36 * oMdrho * vx2; -// m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; -// mfaca = m0; -// mfbca = m1; -// mfcca = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcab - two * mfbab * vvx + mfaab * (one - vx2) - c1o9 * oMdrho * vx2; -// m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; -// mfaab = m0; -// mfbab = m1; -// mfcab = m2; -// ///////////b//////////////////////////////////////////////////////////////////////// -// m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcbb - two * mfbbb * vvx + mfabb * (one - vx2) - c4o9 * oMdrho * vx2; -// m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; -// mfabb = m0; -// mfbbb = m1; -// mfcbb = m2; -// ///////////b//////////////////////////////////////////////////////////////////////// -// m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfccb - two * mfbcb * vvx + mfacb * (one - vx2) - c1o9 * oMdrho * vx2; -// m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; -// mfacb = m0; -// mfbcb = m1; -// mfccb = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcac - two * mfbac * vvx + mfaac * (one - vx2) - c1o36 * oMdrho * vx2; -// m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; -// mfaac = m0; -// mfbac = m1; -// mfcac = m2; -// ///////////c//////////////////////////////////////////////////////////////////////// -// m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcbc - two * mfbbc * vvx + mfabc * (one - vx2) - c1o9 * oMdrho * vx2; -// m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; -// mfabc = m0; -// mfbbc = m1; -// mfcbc = m2; -// ///////////c//////////////////////////////////////////////////////////////////////// -// m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfccc - two * mfbcc * vvx + mfacc * (one - vx2) - c1o36 * oMdrho * vx2; -// m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; -// mfacc = m0; -// mfbcc = m1; -// mfccc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// -// ////////////////////////////////////////////////////////////////////////// -// //proof correctness -// ////////////////////////////////////////////////////////////////////////// -//#ifdef PROOF_CORRECTNESS -// LBMReal drho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) -// + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) -// + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; -// //LBMReal dif = fabs(rho - rho_post); -// LBMReal dif = drho - drho_post; -//#ifdef SINGLEPRECISION -// if (dif > 10.0E-7 || dif < -10.0E-7) -//#else -// if (dif > 10.0E-15 || dif < -10.0E-15) -//#endif -// { -// UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(drho_post) -// + " dif=" + UbSystem::toString(dif) -// + " rho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3) -// + " in " + block.lock()->toString() + " step = " + UbSystem::toString(step))); -// } -//#endif -// ////////////////////////////////////////////////////////////////////////// -// //write distribution -// ////////////////////////////////////////////////////////////////////////// -// (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = mfabb; -// (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = mfbab; -// (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = mfbba; -// (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; -// (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; -// (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; -// (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; -// (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; -// (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; -// (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; -// (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; -// (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; -// (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; -// -// (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb; -// (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb; -// (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; -// (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb; -// (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb; -// (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; -// (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; -// (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; -// (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; -// (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; -// (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; -// (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; -// (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; -// -// (*this->zeroDistributions)(x1, x2, x3) = mfbbb; -// ////////////////////////////////////////////////////////////////////////// -// -// } -// } -// } -// } -// -// } -// -// //timer.stop(); -//} -////////////////////////////////////////////////////////////////////////// -real CumulantLBMKernel::getCalculationTime() -{ - //return timer.getDuration(); - return timer.getTotalTime(); -} -////////////////////////////////////////////////////////////////////////// -void CumulantLBMKernel::setBulkOmegaToOmega(bool value) -{ - bulkOmegaToOmega = value; -} -////////////////////////////////////////////////////////////////////////// -void CumulantLBMKernel::setRelaxationParameter(Parameter p) -{ - parameter = p; -} - -void CumulantLBMKernel::initData() -{ - //initializing of forcing stuff - if (withForcing) - { - muForcingX1.DefineVar("x1", &muX1); muForcingX1.DefineVar("x2", &muX2); muForcingX1.DefineVar("x3", &muX3); - muForcingX2.DefineVar("x1", &muX1); muForcingX2.DefineVar("x2", &muX2); muForcingX2.DefineVar("x3", &muX3); - muForcingX3.DefineVar("x1", &muX1); muForcingX3.DefineVar("x2", &muX2); muForcingX3.DefineVar("x3", &muX3); - - muDeltaT = deltaT; - - muForcingX1.DefineVar("dt", &muDeltaT); - muForcingX2.DefineVar("dt", &muDeltaT); - muForcingX3.DefineVar("dt", &muDeltaT); - - muNu = (c1o1 / c3o1) * (c1o1 / collFactor - c1o1 / c2o1); - - muForcingX1.DefineVar("nu", &muNu); - muForcingX2.DefineVar("nu", &muNu); - muForcingX3.DefineVar("nu", &muNu); - } - localDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); - zeroDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - omega = collFactor; -} - -void CumulantLBMKernel::nodeCollision(int step, int x1, int x2, int x3) -{ - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - ////////////////////////////////////////////////////////////////////////// - //read distribution - //////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - - //E N T - //c c c - ////////// - //W S B - //a a a - - //Rest ist b - - //mfxyz - //a - negative - //b - null - //c - positive - - // a b c - //-1 0 1 - - real mfcbb = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3); - - real mfabb = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributions)(x1, x2, x3); - - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb)) + (mfbba + mfbbc)) + mfbbb; - - real rho = c1o1 + drho; - //////////////////////////////////////////////////////////////////////////////////// - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)) / rho; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)) / rho; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)) / rho; - //////////////////////////////////////////////////////////////////////////////////// - - //forcing - /////////////////////////////////////////////////////////////////////////////////////////// - if (withForcing) - { - muX1 = static_cast<real>(x1 - 1 + ix1 * maxX1); - muX2 = static_cast<real>(x2 - 1 + ix2 * maxX2); - muX3 = static_cast<real>(x3 - 1 + ix3 * maxX3); - - forcingX1 = muForcingX1.Eval(); - forcingX2 = muForcingX2.Eval(); - forcingX3 = muForcingX3.Eval(); - - vvx += forcingX1 * deltaT * c1o2; // X - vvy += forcingX2 * deltaT * c1o2; // Y - vvz += forcingX3 * deltaT * c1o2; // Z - } - /////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////// - real oMdrho = c1o1; // comp special - //////////////////////////////////////////////////////////////////////////////////// - real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2 = vvx * vvx; - vy2 = vvy * vvy; - vz2 = vvz * vvz; - //////////////////////////////////////////////////////////////////////////////////// - //LBMReal wadjust; - //LBMReal qudricLimitP = 0.01f;// * 0.0001f; - //LBMReal qudricLimitM = 0.01f;// * 0.0001f; - //LBMReal qudricLimitD = 0.01f;// * 0.001f; - //LBMReal s9 = minusomega; - //test - //s9 = 0.; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1 * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1 * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1 * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1 * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1 * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1 * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1 * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1 * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1 * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1 * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1 * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1 * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1 * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1 * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1 * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1 * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1 * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1 * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1 * oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1 * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1 * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1 * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1 * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1 * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1 * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1 * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1 * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1 * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - - //LBMReal OxxPyyPzz = one; // bulk viscosity - - //////////////////////////////////////////////////////////// - //3. - ////////////////////////////// - real OxyyPxzz = c1o1;//three * (two - omega) / (three - omega);// - //LBMReal OxyyMxzz = one;//six * (two - omega) / (six - omega);// - //LBMReal Oxyz = one;//twelve * (two - omega) / (twelve + omega);// - ////////////////////////////// - //LBMReal OxyyPxzz = two-omega;// - //LBMReal OxyyMxzz = two-omega;// - ////////////////////////////// - //LBMReal OxyyPxzz = (eight * (omega - two)) / (omega - eight);//Ginzburg - //LBMReal OxyyMxzz = (eight * (omega - two)) / (omega - eight);//Ginzburg - ////////////////////////////// - //LBMReal OxyyPxzz = omega;//BGK - //LBMReal OxyyMxzz = omega;//BGK - ////////////////////////////// - //LBMReal OxyyPxzz = (one + omega) / two;//1P5 - //LBMReal OxyyMxzz = (one + omega) / two;//1P5 - ////////////////////////////// - //LBMReal OxyyPxzz = (three - omega) / two;//0P5 - //LBMReal OxyyMxzz = (three - omega) / two;//0P5 - ////////////////////////////// - //LBMReal OxyyPxzz = (one + (eight * (omega - two)) / (omega - eight)) / two;//one + Ginzburg / two ... Car - //LBMReal OxyyMxzz = (one + (eight * (omega - two)) / (omega - eight)) / two;//one + Ginzburg / two ... Car - //////////////////////////////////////////////////////////// - //4. - ////////////////////////////// - real O4 = c1o1; - ////////////////////////////// - //real O4 = omega;//TRT - //////////////////////////////////////////////////////////// - //5. - ////////////////////////////// - real O5 = c1o1; - //////////////////////////////////////////////////////////// - //6. - ////////////////////////////// - real O6 = c1o1; - //////////////////////////////////////////////////////////// - - - //central moments to cumulants - //4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; //ab 15.05.2015 verwendet - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; //ab 15.05.2015 verwendet - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; //ab 15.05.2015 verwendet - - real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9 * (drho / rho)); - real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9 * (drho / rho)); - real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9 * (drho / rho)); - - //5. - real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 * (mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27 * ((drho * drho - drho) / (rho * rho))); - //+ c1o27*(one -three/rho +two/(rho*rho))); - - - - -//2. -// linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - ////////////////////////////////////////////////////////////////////////// -// LBMReal magicBulk=(CUMacc+CUMcac+CUMcca)*(one/OxxPyyPzz-c1o2)*c3o2*8.; - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 1 - //LBMReal oxxyy,oxxzz,oxy,oxz,oyz; - //LBMReal smag=0.001; - //oxxyy = omega+(one-omega)*fabs(mxxMyy)/(fabs(mxxMyy)+smag); - //oxxzz = omega+(one-omega)*fabs(mxxMzz)/(fabs(mxxMzz)+smag); - //oxy = omega+(one-omega)*fabs(mfbba)/(fabs(mfbba)+smag); - //oxz = omega+(one-omega)*fabs(mfbab)/(fabs(mfbab)+smag); - //oyz = omega+(one-omega)*fabs(mfabb)/(fabs(mfabb)+smag); - - //////////////////////////////////////////////////////////////////////////// - ////Teil 1b - //LBMReal constante = 1000.0; - //LBMReal nuEddi = constante * fabs(mxxPyyPzz); - //LBMReal omegaLimit = one / (one / omega + three * nuEddi); - - //{ - // LBMReal dxux = c1o2 * (-omegaLimit) *(mxxMyy + mxxMzz) + OxxPyyPzz * (mfaaa - mxxPyyPzz); - // LBMReal dyuy = dxux + omegaLimit * c3o2 * mxxMyy; - // LBMReal dzuz = dxux + omegaLimit * c3o2 * mxxMzz; - - ////relax - //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - //mxxMyy += omegaLimit * (-mxxMyy) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vy2 * dyuy); - //mxxMzz += omegaLimit * (-mxxMzz) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vz2 * dzuz); - - //} - //mfabb += omegaLimit * (-mfabb); - //mfbab += omegaLimit * (-mfbab); - //mfbba += omegaLimit * (-mfbba); - //////////////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) - { - real dxux = c1o2 * (-omega) * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - //relax - mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 2 - //mxxMyy += oxxyy * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy); - //mxxMzz += oxxzz * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz); - ////////////////////////////////////////////////////////////////////////// - - } - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 3 - //mfabb += oyz * (-mfabb); - //mfbab += oxz * (-mfbab); - //mfbba += oxy * (-mfbba); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1 * mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1 * mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - ////////////////////////////////////////////////////////////////////////// - //das ist der limiter - //wadjust = Oxyz+(one-Oxyz)*fabs(mfbbb)/(fabs(mfbbb)+qudricLimitD); - //mfbbb += wadjust * (-mfbbb); - //wadjust = OxyyPxzz+(one-OxyyPxzz)*fabs(mxxyPyzz)/(fabs(mxxyPyzz)+qudricLimitP); - //mxxyPyzz += wadjust * (-mxxyPyzz); - //wadjust = OxyyMxzz+(one-OxyyMxzz)*fabs(mxxyMyzz)/(fabs(mxxyMyzz)+qudricLimitM); - //mxxyMyzz += wadjust * (-mxxyMyzz); - //wadjust = OxyyPxzz+(one-OxyyPxzz)*fabs(mxxzPyyz)/(fabs(mxxzPyyz)+qudricLimitP); - //mxxzPyyz += wadjust * (-mxxzPyyz); - //wadjust = OxyyMxzz+(one-OxyyMxzz)*fabs(mxxzMyyz)/(fabs(mxxzMyyz)+qudricLimitM); - //mxxzMyyz += wadjust * (-mxxzMyyz); - //wadjust = OxyyPxzz+(one-OxyyPxzz)*fabs(mxyyPxzz)/(fabs(mxyyPxzz)+qudricLimitP); - //mxyyPxzz += wadjust * (-mxyyPxzz); - //wadjust = OxyyMxzz+(one-OxyyMxzz)*fabs(mxyyMxzz)/(fabs(mxyyMxzz)+qudricLimitM); - //mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - mfbbb += OxyyMxzz * (-mfbbb); - mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - - //// linear combinations back - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - ////////////////////////////////////////////////////////////////////////// - //mit limiter -// wadjust = O4+(one-O4)*fabs(CUMacc)/(fabs(CUMacc)+qudricLimit); - //CUMacc += wadjust * (-CUMacc); -// wadjust = O4+(one-O4)*fabs(CUMcac)/(fabs(CUMcac)+qudricLimit); - //CUMcac += wadjust * (-CUMcac); -// wadjust = O4+(one-O4)*fabs(CUMcca)/(fabs(CUMcca)+qudricLimit); - //CUMcca += wadjust * (-CUMcca); - -// wadjust = O4+(one-O4)*fabs(CUMbbc)/(fabs(CUMbbc)+qudricLimit); - //CUMbbc += wadjust * (-CUMbbc); -// wadjust = O4+(one-O4)*fabs(CUMbcb)/(fabs(CUMbcb)+qudricLimit); - //CUMbcb += wadjust * (-CUMbcb); -// wadjust = O4+(one-O4)*fabs(CUMcbb)/(fabs(CUMcbb)+qudricLimit); - //CUMcbb += wadjust * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - CUMacc += O4 * (-CUMacc); - CUMcac += O4 * (-CUMcac); - CUMcca += O4 * (-CUMcca); - - CUMbbc += O4 * (-CUMbbc); - CUMbcb += O4 * (-CUMbcb); - CUMcbb += O4 * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9 * (drho / rho));//(one/rho-one)); - mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9 * (drho / rho));//(one/rho-one)); - mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9 * (drho / rho));//(one/rho-one)); - - //5. - mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - - mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 * (mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27 * ((drho * drho - drho) / (rho * rho))); - //////////////////////////////////////////////////////////////////////////////////// - //forcing - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - ////////////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////////// -//back -//////////////////////////////////////////////////////////////////////////////////// -//mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren -//////////////////////////////////////////////////////////////////////////////////// -// Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1 * mfaab * vvz + mfaaa * (c1o1 - vz2) - c1o1 * oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1 * oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1 * mfabb * vvz + mfaba * (c1o1 - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1 * mfacb * vvz + mfaca * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1 * mfbab * vvz + mfbaa * (c1o1 - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1 * mfbbb * vvz + mfbba * (c1o1 - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1 * mfbcb * vvz + mfbca * (c1o1 - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1 * mfcab * vvz + mfcaa * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1 * mfcbb * vvz + mfcba * (c1o1 - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1 * mfccb * vvz + mfcca * (c1o1 - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1 * mfaba * vvy + mfaaa * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1 * mfabb * vvy + mfaab * (c1o1 - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1 * mfabc * vvy + mfaac * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1 * mfbba * vvy + mfbaa * (c1o1 - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1 * mfbbb * vvy + mfbab * (c1o1 - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1 * mfbbc * vvy + mfbac * (c1o1 - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1 * mfcba * vvy + mfcaa * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1 * mfcbb * vvy + mfcab * (c1o1 - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1 * mfcbc * vvy + mfcac * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1 * mfbaa * vvx + mfaaa * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1 * mfbba * vvx + mfaba * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1 * mfbca * vvx + mfaca * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1 * mfbab * vvx + mfaab * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1 * mfbbb * vvx + mfabb * (c1o1 - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1 * mfbcb * vvx + mfacb * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1 * mfbac * vvx + mfaac * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1 * mfbbc * vvx + mfabc * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1 * mfbcc * vvx + mfacc * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - //proof correctness - ////////////////////////////////////////////////////////////////////////// -#ifdef PROOF_CORRECTNESS - real drho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - //LBMReal dif = fabs(rho - rho_post); - real dif = drho - drho_post; -#ifdef SINGLEPRECISION - if (dif > 10.0E-7 || dif < -10.0E-7) -#else - if (dif > 10.0E-15 || dif < -10.0E-15) -#endif - { - UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(drho_post) - + " dif=" + UbSystem::toString(dif) - + " rho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3) - + " in " + block.lock()->toString() + " step = " + UbSystem::toString(step))); - } -#endif - ////////////////////////////////////////////////////////////////////////// - //write distribution - ////////////////////////////////////////////////////////////////////////// - (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = mfabb; - (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = mfbab; - (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = mfbba; - (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; - (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; - (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; - (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; - (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; - (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; - (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; - (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; - (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; - (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; - - (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb; - (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb; - (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; - (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb; - (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb; - (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; - (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; - (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; - (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; - (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; - (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; - (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; - (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; - - (*this->zeroDistributions)(x1, x2, x3) = mfbbb; - ////////////////////////////////////////////////////////////////////////// -} diff --git a/src/cpu/core/LBM/CumulantLBMKernel.h b/src/cpu/core/LBM/CumulantLBMKernel.h deleted file mode 100644 index 3ba644ccc..000000000 --- a/src/cpu/core/LBM/CumulantLBMKernel.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef CumulantLBMKernel_h__ -#define CumulantLBMKernel_h__ - -#include "BasicLBMKernel.h" -#include "BCSet.h" -#include "D3Q27System.h" -#include "basics/utilities/UbTiming.h" -#include "basics/container/CbArray4D.h" -#include "basics/container/CbArray3D.h" - -//! \brief compressible cumulant LBM kernel. -//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model -//! \author K. Kutscher, M. Geier -class CumulantLBMKernel : public BasicLBMKernel -{ -public: - //! This option set relaxation parameter: NORMAL - enum Parameter { NORMAL, MAGIC }; -public: - CumulantLBMKernel(); - virtual ~CumulantLBMKernel() = default; - //virtual void calculate(int step); - SPtr<LBMKernel> clone() override; - real getCalculationTime() override; - void setBulkOmegaToOmega(bool value); - void setRelaxationParameter(Parameter p); -protected: - void initData() override; - void nodeCollision(int step, int x1, int x2, int x3) override; - void initDataSet(); - real f[D3Q27System::ENDF + 1]; - - UbTimer timer; - - real OxyyMxzz; - Parameter parameter; - - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributions; - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributions; - - mu::value_type muX1, muX2, muX3; - mu::value_type muDeltaT; - mu::value_type muNu; - real forcingX1; - real forcingX2; - real forcingX3; - - // bulk viscosity - bool bulkOmegaToOmega; - real OxxPyyPzz; - - real omega; -}; -#endif // CumulantLBMKernel_h__ \ No newline at end of file diff --git a/src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.cpp b/src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.cpp deleted file mode 100644 index d052f4f71..000000000 --- a/src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.cpp +++ /dev/null @@ -1,1012 +0,0 @@ -#include "IncompressibleCumulantWithSpongeLayerLBMKernel.h" -#include "D3Q27System.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include <cmath> -#include "DataSet3D.h" -#include "BCArray3D.h" -#include "Block3D.h" - -#define PROOF_CORRECTNESS - -//using namespace UbMath; -using namespace vf::basics::constant; - -////////////////////////////////////////////////////////////////////////// -IncompressibleCumulantWithSpongeLayerLBMKernel::IncompressibleCumulantWithSpongeLayerLBMKernel() -= default; -////////////////////////////////////////////////////////////////////////// -IncompressibleCumulantWithSpongeLayerLBMKernel::~IncompressibleCumulantWithSpongeLayerLBMKernel(void) -= default; -////////////////////////////////////////////////////////////////////////// -void IncompressibleCumulantWithSpongeLayerLBMKernel::initDataSet() -{ - SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.9)); - dataSet->setFdistributions(d); -} -////////////////////////////////////////////////////////////////////////// -void IncompressibleCumulantWithSpongeLayerLBMKernel::setRelaxFactorParam(int vdir, real vL1, real vdx, real vSP) -{ - direction = vdir; - L1 = vL1; - dx = vdx; - SP = vSP; -} -////////////////////////////////////////////////////////////////////////// -void IncompressibleCumulantWithSpongeLayerLBMKernel::initRelaxFactor(int vdir, real vL1, real vdx, real vSP) -{ - using namespace vf::lbm::dir; - - direction = vdir; - L1 = vL1; - dx = vdx; - SP = vSP; - - real sizeX = L1 / dx; - real sizeSP = SP / dx; - real muX1, muX2, muX3; - - real spongeFactor; - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = 0; - int minX2 = 0; - int minX3 = 0; - int maxX1 = bcArrayMaxX1 - ghostLayerWidth - 1; - int maxX2 = bcArrayMaxX2 - ghostLayerWidth - 1; - int maxX3 = bcArrayMaxX3 - ghostLayerWidth - 1; - - SPtr<RelaxationFactorArray3D> relaxationFactorPtr = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(maxX1, maxX2, maxX3)); - dataSet->setRelaxationFactor(relaxationFactorPtr); - - for (int x3 = minX3; x3 < maxX3; x3++) - { - for (int x2 = minX2; x2 < maxX2; x2++) - { - for (int x1 = minX1; x1 < maxX1; x1++) - { - switch (direction) - { - case dP00: - muX1 = (real)(x1 + ix1 * maxX1); - if (muX1 >= (sizeX - sizeSP) / deltaT) - spongeFactor = (sizeX - (muX1 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2; - else spongeFactor = c1o1; - break; - case dM00: - muX1 = (real)(x1 + ix1 * maxX1); - if (muX1 <= sizeSP / deltaT) - spongeFactor = (sizeSP - (muX1 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2; - else spongeFactor = c1o1; - break; - case d0P0: - muX2 = (real)(x2 + ix2 * maxX2); - if (muX2 >= (sizeX - sizeSP) / deltaT) - spongeFactor = (sizeX - (muX2 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2; - else spongeFactor = c1o1; - break; - case d0M0: - muX2 = (real)(x2 + ix2 * maxX2); - if (muX2 <= sizeSP / deltaT) - spongeFactor = (sizeSP - (muX2 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2; - else spongeFactor = c1o1; - break; - case d00P: - muX3 = (real)(x3 + ix3 * maxX3); - if (muX3 >= (sizeX - sizeSP) / deltaT) - spongeFactor = (sizeX - (muX3 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2; - else spongeFactor = c1o1; - break; - case d00M: - muX3 = (real)(x3 + ix3 * maxX3); - if (muX3 <= sizeSP / deltaT) - spongeFactor = (sizeSP - (muX3 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2; - else spongeFactor = c1o1; - break; - default: throw UbException(UB_EXARGS, "unknown dir"); - } - (*relaxationFactorPtr)(x1, x2, x3) = spongeFactor; - } - } - } -} - -////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> IncompressibleCumulantWithSpongeLayerLBMKernel::clone() -{ - SPtr<LBMKernel> kernel(new IncompressibleCumulantWithSpongeLayerLBMKernel()); - kernel->setNX(nx); - dynamicPointerCast<IncompressibleCumulantWithSpongeLayerLBMKernel>(kernel)->initDataSet(); - kernel->setCollisionFactor(this->collFactor); - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - kernel->setDeltaT(deltaT); - kernel->setBlock(block.lock()); - - switch (parameter) - { - case NORMAL: - dynamicPointerCast<IncompressibleCumulantWithSpongeLayerLBMKernel>(kernel)->OxyyMxzz = c1o1; - break; - case MAGIC: - dynamicPointerCast<IncompressibleCumulantWithSpongeLayerLBMKernel>(kernel)->OxyyMxzz = c2o1 +(-collFactor); - break; - } - - kernel->setWithSpongeLayer(withSpongeLayer); - if(withSpongeLayer) kernel->setSpongeLayer(muSpongeLayer); - dynamicPointerCast<IncompressibleCumulantWithSpongeLayerLBMKernel>(kernel)->initRelaxFactor(direction, L1, dx, SP); - return kernel; -} -////////////////////////////////////////////////////////////////////////// -void IncompressibleCumulantWithSpongeLayerLBMKernel::calculate(int step) -{ - using namespace D3Q27System; - using namespace std; - - if(!withSpongeLayer) - { - UB_THROW(UbException(UB_EXARGS,"Sponge layer isn't initialized!")); - } - //initializing of forcing stuff - //if (withForcing) - //{ - // muForcingX1.DefineVar("x1",&muX1); muForcingX1.DefineVar("x2",&muX2); muForcingX1.DefineVar("x3",&muX3); - // muForcingX2.DefineVar("x1",&muX1); muForcingX2.DefineVar("x2",&muX2); muForcingX2.DefineVar("x3",&muX3); - // muForcingX3.DefineVar("x1",&muX1); muForcingX3.DefineVar("x2",&muX2); muForcingX3.DefineVar("x3",&muX3); - - // muDeltaT = deltaT; - - // muForcingX1.DefineVar("dx",&muDeltaT); - // muForcingX2.DefineVar("dx",&muDeltaT); - // muForcingX3.DefineVar("dx",&muDeltaT); - - // muNu = (1.0/3.0)*(1.0/collFactor - 1.0/c2o10); - - // muForcingX1.DefineVar("nu",&muNu); - // muForcingX2.DefineVar("nu",&muNu); - // muForcingX3.DefineVar("nu",&muNu); - - // LBMReal forcingX1 = 0; - // LBMReal forcingX2 = 0; - // LBMReal forcingX3 = 0; - //} - ///////////////////////////////////// - //initialization of sponge layer variables - //if (withSpongeLayer) - //{ - //muDeltaT = deltaT; - //muSpongeLayer.DefineVar("dt",&muDeltaT); - //muSpongeLayer.DefineVar("x1",&muX1); muSpongeLayer.DefineVar("x2",&muX2); muSpongeLayer.DefineVar("x3",&muX3); - //} - ///////////////////////////////////// - - localDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); - zeroDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - SPtr<RelaxationFactorArray3D> relaxationFactorPtr = dataSet->getRelaxationFactor(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1-ghostLayerWidth-1; - int maxX2 = bcArrayMaxX2-ghostLayerWidth-1; - int maxX3 = bcArrayMaxX3-ghostLayerWidth-1; - - real collFactor0 = collFactor; - real spongeFactor; - - 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)) - { - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - ////////////////////////////////////////////////////////////////////////// - //read distribution - //////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - - //E N T - //c c c - ////////// - //W S B - //a a a - - //Rest ist b - - real mfcbb = (*this->localDistributions)(D3Q27System::ET_E, x1,x2,x3); - real mfbcb = (*this->localDistributions)(D3Q27System::ET_N,x1,x2,x3); - real mfbbc = (*this->localDistributions)(D3Q27System::ET_T,x1,x2,x3); - real mfccb = (*this->localDistributions)(D3Q27System::ET_NE,x1,x2,x3); - real mfacb = (*this->localDistributions)(D3Q27System::ET_NW,x1p,x2,x3); - real mfcbc = (*this->localDistributions)(D3Q27System::ET_TE,x1,x2,x3); - real mfabc = (*this->localDistributions)(D3Q27System::ET_TW, x1p,x2,x3); - real mfbcc = (*this->localDistributions)(D3Q27System::ET_TN,x1,x2,x3); - real mfbac = (*this->localDistributions)(D3Q27System::ET_TS,x1,x2p,x3); - real mfccc = (*this->localDistributions)(D3Q27System::ET_TNE,x1,x2,x3); - real mfacc = (*this->localDistributions)(D3Q27System::ET_TNW,x1p,x2,x3); - real mfcac = (*this->localDistributions)(D3Q27System::ET_TSE,x1,x2p,x3); - real mfaac = (*this->localDistributions)(D3Q27System::ET_TSW,x1p,x2p,x3); - - real mfabb = (*this->nonLocalDistributions)(D3Q27System::ET_W,x1p,x2,x3 ); - real mfbab = (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,x2p,x3 ); - real mfbba = (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,x2,x3p ); - real mfaab = (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1p,x2p,x3 ); - real mfcab = (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,x2p,x3 ); - real mfaba = (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1p,x2,x3p ); - real mfcba = (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,x2,x3p ); - real mfbaa = (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,x2p,x3p ); - real mfbca = (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,x2,x3p ); - real mfaaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1p,x2p,x3p); - real mfcaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,x2p,x3p); - real mfaca = (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1p,x2,x3p); - real mfcca = (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,x2,x3p); - - real mfbbb = (*this->zeroDistributions)(x1,x2,x3); - - real m0, m1, m2; - - real rho=(mfaaa+mfaac+mfaca+mfcaa+mfacc+mfcac+mfccc+mfcca) - +(mfaab+mfacb+mfcab+mfccb)+(mfaba+mfabc+mfcba+mfcbc)+(mfbaa+mfbac+mfbca+mfbcc) - +(mfabb+mfcbb)+(mfbab+mfbcb)+(mfbba+mfbbc)+mfbbb; - - real vvx =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + - (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) + - (mfcbb-mfabb)); - real vvy =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + - (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) + - (mfbcb-mfbab)); - real vvz =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + - (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) + - (mfbbc-mfbba)); - ////////////////////////////////////////////////////////////////////////// - //forcing - /////////////////////////////////////////////////////////////////////////////////////////// - //if (withForcing) - //{ - // muX1 = (double)(x1-1+ix1*maxX1); - // muX2 = (double)(x2-1+ix2*maxX2); - // muX3 = (double)(x3-1+ix3*maxX3); - - // forcingX1 = muForcingX1.Eval(); - // forcingX2 = muForcingX2.Eval(); - // forcingX3 = muForcingX3.Eval(); - - // vvx += forcingX1*0.5; // X - // vvy += forcingX2*0.5; // Y - // vvz += forcingX3*0.5; // Z - //} - /////////////////////////////////////////////////////////////////////////////////////////// - //sponge layer - /////////////////////////////////////////////////////////////////////////////////////////// - //if (withSpongeLayer) - //{ - //if (!withForcing) - //{ - //lk// muX1 = (double)(x1-1+ix1*maxX1); - //muX2 = (double)(x2-1+ix2*maxX2); - //muX3 = (double)(x3-1+ix3*maxX3); - //} - //spongeFactor ist von Funktion in muSpongeLayer abh�ngich und variiert zwischen 1 (nix tun) und 0.5 (collFactor etwa auf 1); - //lk //LBMReal spongeFactor = muSpongeLayer.Eval(); - - //if (spongeFactor == 0.5) - //{ - // int Test=0; - //} - - //if(muX3 == ix3*maxX3/2 && muX2==ix2*maxX2/2) - // UBLOG(logINFO," x1="<<muX1<<" spongeFactor = " << spongeFactor <<" collFactor="<<collFactor); - - spongeFactor = (*relaxationFactorPtr)(x1-1, x2-1, x3-1); - collFactor *= spongeFactor; - //if(muX3 == ix3*maxX3/2 && muX2==ix2*maxX2/2) - // UBLOG(logINFO," x1="<<muX1<<" spongeFactor = " << spongeFactor <<" collFactor="<<collFactor); - - //} - ////////////////////////////////////////////////////////////////////////// - - real oMdrho; - - oMdrho=mfccc+mfaaa; - m0=mfaca+mfcac; - m1=mfacc+mfcaa; - m2=mfaac+mfcca; - oMdrho+=m0; - m1+=m2; - oMdrho+=m1; - m0=mfbac+mfbca; - m1=mfbaa+mfbcc; - m0+=m1; - m1=mfabc+mfcba; - m2=mfaba+mfcbc; - m1+=m2; - m0+=m1; - m1=mfacb+mfcab; - m2=mfaab+mfccb; - m1+=m2; - m0+=m1; - oMdrho+=m0; - m0=mfabb+mfcbb; - m1=mfbab+mfbcb; - m2=mfbba+mfbbc; - m0+=m1+m2; - m0+=mfbbb; //hat gefehlt - oMdrho = c1o1 - (oMdrho + m0); - - real vx2; - real vy2; - real vz2; - vx2=vvx*vvx; - vy2=vvy*vvy; - vz2=vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimit = c1o100; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1 * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1 * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1 * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1 * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1 * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1 * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1 * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1 * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1 * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1 * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1 * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1 * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1 * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1 * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1 * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1 * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1 * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1 * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1 * oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1 * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1 * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1 * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1 * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1 * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1 * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1 * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1 * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1 * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; - real OxyyPxzz = c1o1;//-s9;//2+s9;// - //real OxyyMxzz = c1o1;//2+s9;// - real O4 = c1o1; - real O5 = c1o1; - real O6 = c1o1; - - //Cum c4o1 - real CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + c2o1 * mfbba * mfbab); - real CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + c2o1 * mfbba * mfabb); - real CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + c2o1 * mfbab * mfabb); - - real CUMcca = mfcca - (mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho; - real CUMcac = mfcac - (mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho-1)*oMdrho; - real CUMacc = mfacc - (mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho; - - //Cum 5. - real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; - real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; - real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; - - //Cum 6. - real CUMccc = mfccc +((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) - +( c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) - - c1o3* (mfacc + mfcac + mfcca) * oMdrho -c1o9*oMdrho*oMdrho - - c1o9* (mfcaa + mfaca + mfaac) * oMdrho*(c1o1-c2o1* oMdrho)- c1o27* oMdrho * oMdrho*(-c2o1* oMdrho) - +( c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) +c1o27*oMdrho; - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - real dxux = -c1o2 * collFactor *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz*(mfaaa - mxxPyyPzz); - real dyuy = dxux + collFactor * c3o2 * mxxMyy; - real dzuz = dxux + collFactor * c3o2 * mxxMzz; - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += collFactor * (-mxxMyy) - c3o1 * (c1o1 - c1o2 * collFactor) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += collFactor * (-mxxMzz) - c3o1 * (c1o1 - c1o2 * collFactor) * (vx2 * dxux - vz2 * dzuz); - - mfabb += collFactor * (-mfabb); - mfbab += collFactor * (-mfbab); - mfbba += collFactor * (-mfbba); - - // linear combinations back - mfcaa = c1o3 * ( mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1 * mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * ( mxxMyy - c2o1 * mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*fabs(mfbbb)/(fabs(mfbbb)+qudricLimit); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*fabs(mxxyPyzz)/(fabs(mxxyPyzz)+qudricLimit); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*fabs(mxxyMyzz)/(fabs(mxxyMyzz)+qudricLimit); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*fabs(mxxzPyyz)/(fabs(mxxzPyyz)+qudricLimit); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*fabs(mxxzMyyz)/(fabs(mxxzMyyz)+qudricLimit); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*fabs(mxyyPxzz)/(fabs(mxyyPxzz)+qudricLimit); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*fabs(mxyyMxzz)/(fabs(mxyyMxzz)+qudricLimit); - mxyyMxzz += wadjust * (-mxyyMxzz); - - // linear combinations back - mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - CUMacc += O4 * (-CUMacc); - CUMcac += O4 * (-CUMcac); - CUMcca += O4 * (-CUMcca); - - CUMbbc += O4 * (-CUMbbc); - CUMbcb += O4 * (-CUMbcb); - CUMcbb += O4 * (-CUMcbb); - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + c2o1 * mfbba * mfbab); - mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + c2o1 * mfbba * mfabb); - mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + c2o1 * mfbab * mfabb); - - mfcca = CUMcca + (mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho; - mfcac = CUMcac + (mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho-1)*oMdrho; - mfacc = CUMacc + (mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho; - - //5. - mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho; - mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho; - mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho; - - //6. - mfccc = CUMccc -((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) - +( c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) - - c1o3* (mfacc + mfcac + mfcca) * oMdrho -c1o9*oMdrho*oMdrho - - c1o9* (mfcaa + mfaca + mfaac) * oMdrho*(c1o1-c2o1* oMdrho)- c1o27* oMdrho * oMdrho*(-c2o1* oMdrho) - +( c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) -c1o27*oMdrho; - - //////////////////////////////////////////////////////////////////////////////////// - //forcing - mfbaa=-mfbaa; - mfaba=-mfaba; - mfaab=-mfaab; - ////////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1 * mfaab * vvz + mfaaa * (c1o1 - vz2) - c1o1 * oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1 * oMdrho) * ( vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * ( vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1 * mfabb * vvz + mfaba * (c1o1 - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * ( vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1 * mfacb * vvz + mfaca * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * ( vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * ( vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1 * mfbab * vvz + mfbaa * (c1o1 - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * ( vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * ( vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1 * mfbbb * vvz + mfbba * (c1o1 - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * ( vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * ( vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1 * mfbcb * vvz + mfbca * (c1o1 - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * ( vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1 * mfcab * vvz + mfcaa * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * ( vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * ( vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1 * mfcbb * vvz + mfcba * (c1o1 - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * ( vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1 * mfccb * vvz + mfcca * (c1o1 - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * ( vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1 * mfaba * vvy + mfaaa * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1 * mfabb * vvy + mfaab * (c1o1 - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1 * mfabc * vvy + mfaac * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * ( vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1 * mfbba * vvy + mfbaa * (c1o1 - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * ( vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * ( vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1 * mfbbb * vvy + mfbab * (c1o1 - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * ( vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * ( vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1 * mfbbc * vvy + mfbac * (c1o1 - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * ( vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1 * mfcba * vvy + mfcaa * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1 * mfcbb * vvy + mfcab * (c1o1 - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1 * mfcbc * vvy + mfcac * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1 * mfbaa * vvx + mfaaa * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1 * mfbba * vvx + mfaba * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1 * mfbca * vvx + mfaca * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1 * mfbab * vvx + mfaab * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1 * mfbbb * vvx + mfabb * (c1o1 - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1 * mfbcb * vvx + mfacb * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1 * mfbac * vvx + mfaac * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1 * mfbbc * vvx + mfabc * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1 * mfbcc * vvx + mfacc * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - - ////////////////////////////////////////////////////////////////////////// - //proof correctness - ////////////////////////////////////////////////////////////////////////// -#ifdef PROOF_CORRECTNESS - real rho_post = (mfaaa+mfaac+mfaca+mfcaa+mfacc+mfcac+mfccc+mfcca) - +(mfaab+mfacb+mfcab+mfccb)+(mfaba+mfabc+mfcba+mfcbc)+(mfbaa+mfbac+mfbca+mfbcc) - +(mfabb+mfcbb)+(mfbab+mfbcb)+(mfbba+mfbbc)+mfbbb; - //LBMReal dif = fabs(rho - rho_post); - real dif = rho - rho_post; -#ifdef SINGLEPRECISION - if(dif > 10.0E-7 || dif < -10.0E-7) -#else - if(dif > 10.0E-15 || dif < -10.0E-15) -#endif - { - UB_THROW(UbException(UB_EXARGS,"rho="+UbSystem::toString(rho)+", rho_post="+UbSystem::toString(rho_post) - +" dif="+UbSystem::toString(dif) - +" rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3) - +" in " + block.lock()->toString()+" step = "+UbSystem::toString(step))); - } -#endif - ////////////////////////////////////////////////////////////////////////// - //write distribution - ////////////////////////////////////////////////////////////////////////// - (*this->localDistributions)(D3Q27System::ET_E,x1, x2, x3) = mfabb; - (*this->localDistributions)(D3Q27System::ET_N,x1, x2, x3) = mfbab; - (*this->localDistributions)(D3Q27System::ET_T,x1, x2, x3) = mfbba; - (*this->localDistributions)(D3Q27System::ET_NE,x1, x2, x3) = mfaab; - (*this->localDistributions)(D3Q27System::ET_NW,x1p,x2, x3) = mfcab; - (*this->localDistributions)(D3Q27System::ET_TE,x1, x2, x3) = mfaba; - (*this->localDistributions)(D3Q27System::ET_TW,x1p,x2, x3) = mfcba; - (*this->localDistributions)(D3Q27System::ET_TN,x1, x2, x3) = mfbaa; - (*this->localDistributions)(D3Q27System::ET_TS,x1, x2p,x3) = mfbca; - (*this->localDistributions)(D3Q27System::ET_TNE,x1, x2, x3) = mfaaa; - (*this->localDistributions)(D3Q27System::ET_TNW,x1p,x2, x3) = mfcaa; - (*this->localDistributions)(D3Q27System::ET_TSE,x1, x2p,x3) = mfaca; - (*this->localDistributions)(D3Q27System::ET_TSW,x1p,x2p,x3) = mfcca; - - (*this->nonLocalDistributions)(D3Q27System::ET_W,x1p,x2, x3 ) = mfcbb; - (*this->nonLocalDistributions)(D3Q27System::ET_S,x1, x2p,x3 ) = mfbcb; - (*this->nonLocalDistributions)(D3Q27System::ET_B,x1, x2, x3p ) = mfbbc; - (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1p,x2p,x3 ) = mfccb; - (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1, x2p,x3 ) = mfacb; - (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1p,x2, x3p ) = mfcbc; - (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1, x2, x3p ) = mfabc; - (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1, x2p,x3p ) = mfbcc; - (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1, x2, x3p ) = mfbac; - (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1p,x2p,x3p) = mfccc; - (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1, x2p,x3p) = mfacc; - (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1p,x2, x3p) = mfcac; - (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1, x2, x3p) = mfaac; - - (*this->zeroDistributions)(x1,x2,x3) = mfbbb; - ////////////////////////////////////////////////////////////////////////// - - collFactor = collFactor0; - - } - } - } - } -} - diff --git a/src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.h b/src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.h deleted file mode 100644 index 760ad30fb..000000000 --- a/src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef IncompressibleCumulantWithSpongeLayerLBMKernel_H -#define IncompressibleCumulantWithSpongeLayerLBMKernel_H - -#include "IncompressibleCumulantLBMKernel.h" - -//! \brief Cascaded Cumulant LBM kernel. -//! \details CFD solver with sponge layer that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model <br> -//! variable spongeFactor is depending on funktion in muSpongeLayer and varies between 1 (do nothing) und 0.5 (collFactor about 1); -//! Initialization in test case (example): <br> -//! \code{.cpp} -//! int sizeSP=8; //width of sponge layer in blocks -//! mu::Parser spongeLayer; -//! spongeLayer.SetExpr("x1>=(sizeX-sizeSP)/dt ? (sizeX-(x1+1))/sizeSP/2.0 + 0.5 : 1.0"); -//! spongeLayer.DefineConst("sizeX", nx[0]*blocknx[0]); // width of grid for X in coarse nodes -//! spongeLayer.DefineConst("sizeSP", sizeSP*blocknx[0]); // width of sponge layer in coarse nodes -//! kernel->setWithSpongeLayer(true); -//! kernel->setSpongeLayer(spongeLayer); -//! \endcode -//! \author K. Kucher, M. Geier, A. Karanchuk -class IncompressibleCumulantWithSpongeLayerLBMKernel : public IncompressibleCumulantLBMKernel -{ -public: - IncompressibleCumulantWithSpongeLayerLBMKernel(); - ~IncompressibleCumulantWithSpongeLayerLBMKernel() override; - SPtr<LBMKernel> clone() override; - void calculate(int step) override; - void initRelaxFactor(int vdir, real vL1, real vdx, real vSP); - //! \param vdir where the sponge layer is placed - //! \param vL1 length of simulation domain - //! \param vdx subgrid space - //! \param vSP length of sponge layer - void setRelaxFactorParam(int vdir, real vL1, real vdx, real vSP); -protected: - void initDataSet() override; - real OxyyMxzz; - int direction; - real L1; - real dx; - real SP; -}; - -#endif diff --git a/src/cpu/core/LBM/InitDensityLBMKernel.cpp b/src/cpu/core/LBM/InitDensityLBMKernel.cpp deleted file mode 100644 index 734e2e33f..000000000 --- a/src/cpu/core/LBM/InitDensityLBMKernel.cpp +++ /dev/null @@ -1,1075 +0,0 @@ -#include "InitDensityLBMKernel.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include "BCSet.h" -#include "DataSet3D.h" -#include "BCArray3D.h" -#include "basics/constants/NumericConstants.h" - -//using namespace UbMath; -using namespace vf::basics::constant; - -InitDensityLBMKernel::InitDensityLBMKernel() -{ - this->compressible = false; -} - -InitDensityLBMKernel::~InitDensityLBMKernel() -= default; - -void InitDensityLBMKernel::initDataSet() -{ - SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.9)); - dataSet->setFdistributions(d); - v.resize(3, nx[0]+2, nx[1]+2, nx[2]+2); - -} - -SPtr<LBMKernel> InitDensityLBMKernel::clone() -{ - SPtr<LBMKernel> kernel(new InitDensityLBMKernel()); - kernel->setNX(nx); - dynamicPointerCast<InitDensityLBMKernel>(kernel)->initDataSet(); - kernel->setCollisionFactor(this->collFactor); - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - kernel->setDeltaT(deltaT); -// dynamicPointerCast<InitDensityLBMKernel>(kernel)->OxyyMxzz = 1.0; - return kernel; -} - -void InitDensityLBMKernel::setVelocity(int x1, int x2, int x3, real vvx, real vvy, real vvz) -{ - v(0, x1, x2, x3) = vvx; - v(1, x1, x2, x3) = vvy; - v(2, x1, x2, x3) = vvz; -} - -real InitDensityLBMKernel::getCalculationTime() -{ - return 0; -} - -//void InitDensityLBMKernel::collideAll() -//{ -// using namespace D3Q27System; -// -// localDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); -// nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); -// zeroDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); -// -// BCArray3D<D3Q27BoundaryCondition>& bcArray = dynamicPointerCast<D3Q27ETBCSet>(this->getBCSet())->getBCArray(); -// -// const int bcArrayMaxX1 = (int)bcArray->getNX1(); -// const int bcArrayMaxX2 = (int)bcArray->getNX2(); -// const int bcArrayMaxX3 = (int)bcArray->getNX3(); -// -// int minX1 = ghostLayerWidth; -// int minX2 = ghostLayerWidth; -// int minX3 = ghostLayerWidth; -// int maxX1 = bcArrayMaxX1-ghostLayerWidth; -// int maxX2 = bcArrayMaxX2-ghostLayerWidth; -// int maxX3 = bcArrayMaxX3-ghostLayerWidth; -// -// -// 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)) -// { -// int x1p = x1+1; -// int x2p = x2+1; -// int x3p = x3+1; -// ////////////////////////////////////////////////////////////////////////// -// //read distribution -// //////////////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////////////// -// -// //E N T -// //c c c -// ////////// -// //W S B -// //a a a -// -// //Rest ist b -// -// //mfxyz -// //a - negative -// //b - null -// //c - positive -// -// // a b c -// //-1 0 1 -// -// LBMReal mfcbb = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3); -// LBMReal mfbcb = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3); -// LBMReal mfbbc = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3); -// LBMReal mfccb = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3); -// LBMReal mfacb = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3); -// LBMReal mfcbc = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3); -// LBMReal mfabc = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3); -// LBMReal mfbcc = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3); -// LBMReal mfbac = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3); -// LBMReal mfccc = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3); -// LBMReal mfacc = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3); -// LBMReal mfcac = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3); -// LBMReal mfaac = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3); -// -// LBMReal mfabb = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3); -// LBMReal mfbab = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3); -// LBMReal mfbba = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p); -// LBMReal mfaab = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3); -// LBMReal mfcab = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3); -// LBMReal mfaba = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p); -// LBMReal mfcba = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p); -// LBMReal mfbaa = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p); -// LBMReal mfbca = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p); -// LBMReal mfaaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p); -// LBMReal mfcaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p); -// LBMReal mfaca = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p); -// LBMReal mfcca = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p); -// -// LBMReal mfbbb = (*this->zeroDistributions)(x1, x2, x3); -// -// LBMReal m0, m1, m2; -// -// LBMReal rho = (mfaaa+mfaac+mfaca+mfcaa+mfacc+mfcac+mfccc+mfcca) -// +(mfaab+mfacb+mfcab+mfccb)+(mfaba+mfabc+mfcba+mfcbc)+(mfbaa+mfbac+mfbca+mfbcc) -// +(mfabb+mfcbb)+(mfbab+mfbcb)+(mfbba+mfbbc)+mfbbb; -// -// //LBMReal vvx = ((((mfccc-mfaaa)+(mfcac-mfaca))+((mfcaa-mfacc)+(mfcca-mfaac)))+ -// // (((mfcba-mfabc)+(mfcbc-mfaba))+((mfcab-mfacb)+(mfccb-mfaab)))+ -// // (mfcbb-mfabb)); -// //LBMReal vvy = ((((mfccc-mfaaa)+(mfaca-mfcac))+((mfacc-mfcaa)+(mfcca-mfaac)))+ -// // (((mfbca-mfbac)+(mfbcc-mfbaa))+((mfacb-mfcab)+(mfccb-mfaab)))+ -// // (mfbcb-mfbab)); -// //LBMReal vvz = ((((mfccc-mfaaa)+(mfcac-mfaca))+((mfacc-mfcaa)+(mfaac-mfcca)))+ -// // (((mfbac-mfbca)+(mfbcc-mfbaa))+((mfabc-mfcba)+(mfcbc-mfaba)))+ -// // (mfbbc-mfbba)); -// -// LBMReal vvx = v(0,x1,x2,x3); -// LBMReal vvy = v(1,x1,x2,x3); -// LBMReal vvz = v(2,x1,x2,x3); -// //LBMReal rho = v(3,x1,x2,x3); -// -// LBMReal oMdrho; -// -// oMdrho = mfccc+mfaaa; -// m0 = mfaca+mfcac; -// m1 = mfacc+mfcaa; -// m2 = mfaac+mfcca; -// oMdrho += m0; -// m1 += m2; -// oMdrho += m1; -// m0 = mfbac+mfbca; -// m1 = mfbaa+mfbcc; -// m0 += m1; -// m1 = mfabc+mfcba; -// m2 = mfaba+mfcbc; -// m1 += m2; -// m0 += m1; -// m1 = mfacb+mfcab; -// m2 = mfaab+mfccb; -// m1 += m2; -// m0 += m1; -// oMdrho += m0; -// m0 = mfabb+mfcbb; -// m1 = mfbab+mfbcb; -// m2 = mfbba+mfbbc; -// m0 += m1+m2; -// m0 += mfbbb; //hat gefehlt -// oMdrho = 1.-(oMdrho+m0); -// -// LBMReal vx2; -// LBMReal vy2; -// LBMReal vz2; -// vx2 = vvx*vvx; -// vy2 = vvy*vvy; -// vz2 = vvz*vvz; -// //////////////////////////////////////////////////////////////////////////////////// -// LBMReal wadjust; -// LBMReal qudricLimit = 0.01; -// //////////////////////////////////////////////////////////////////////////////////// -// //Hin -// //////////////////////////////////////////////////////////////////////////////////// -// // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // Z - Dir -// m2 = mfaaa+mfaac; -// m1 = mfaac-mfaaa; -// m0 = m2+mfaab; -// mfaaa = m0; -// m0 += c1o36 * oMdrho; -// mfaab = m1-m0 * vvz; -// mfaac = m2-2. * m1 * vvz+vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaba+mfabc; -// m1 = mfabc-mfaba; -// m0 = m2+mfabb; -// mfaba = m0; -// m0 += c1o9 * oMdrho; -// mfabb = m1-m0 * vvz; -// mfabc = m2-2. * m1 * vvz+vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaca+mfacc; -// m1 = mfacc-mfaca; -// m0 = m2+mfacb; -// mfaca = m0; -// m0 += c1o36 * oMdrho; -// mfacb = m1-m0 * vvz; -// mfacc = m2-2. * m1 * vvz+vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbaa+mfbac; -// m1 = mfbac-mfbaa; -// m0 = m2+mfbab; -// mfbaa = m0; -// m0 += c1o9 * oMdrho; -// mfbab = m1-m0 * vvz; -// mfbac = m2-2. * m1 * vvz+vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbba+mfbbc; -// m1 = mfbbc-mfbba; -// m0 = m2+mfbbb; -// mfbba = m0; -// m0 += c4o9 * oMdrho; -// mfbbb = m1-m0 * vvz; -// mfbbc = m2-2. * m1 * vvz+vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbca+mfbcc; -// m1 = mfbcc-mfbca; -// m0 = m2+mfbcb; -// mfbca = m0; -// m0 += c1o9 * oMdrho; -// mfbcb = m1-m0 * vvz; -// mfbcc = m2-2. * m1 * vvz+vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcaa+mfcac; -// m1 = mfcac-mfcaa; -// m0 = m2+mfcab; -// mfcaa = m0; -// m0 += c1o36 * oMdrho; -// mfcab = m1-m0 * vvz; -// mfcac = m2-2. * m1 * vvz+vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcba+mfcbc; -// m1 = mfcbc-mfcba; -// m0 = m2+mfcbb; -// mfcba = m0; -// m0 += c1o9 * oMdrho; -// mfcbb = m1-m0 * vvz; -// mfcbc = m2-2. * m1 * vvz+vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcca+mfccc; -// m1 = mfccc-mfcca; -// m0 = m2+mfccb; -// mfcca = m0; -// m0 += c1o36 * oMdrho; -// mfccb = m1-m0 * vvz; -// mfccc = m2-2. * m1 * vvz+vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // Y - Dir -// m2 = mfaaa+mfaca; -// m1 = mfaca-mfaaa; -// m0 = m2+mfaba; -// mfaaa = m0; -// m0 += c1o6 * oMdrho; -// mfaba = m1-m0 * vvy; -// mfaca = m2-2. * m1 * vvy+vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaab+mfacb; -// m1 = mfacb-mfaab; -// m0 = m2+mfabb; -// mfaab = m0; -// mfabb = m1-m0 * vvy; -// mfacb = m2-2. * m1 * vvy+vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaac+mfacc; -// m1 = mfacc-mfaac; -// m0 = m2+mfabc; -// mfaac = m0; -// m0 += c1o18 * oMdrho; -// mfabc = m1-m0 * vvy; -// mfacc = m2-2. * m1 * vvy+vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbaa+mfbca; -// m1 = mfbca-mfbaa; -// m0 = m2+mfbba; -// mfbaa = m0; -// m0 += c2o3 * oMdrho; -// mfbba = m1-m0 * vvy; -// mfbca = m2-2. * m1 * vvy+vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbab+mfbcb; -// m1 = mfbcb-mfbab; -// m0 = m2+mfbbb; -// mfbab = m0; -// mfbbb = m1-m0 * vvy; -// mfbcb = m2-2. * m1 * vvy+vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbac+mfbcc; -// m1 = mfbcc-mfbac; -// m0 = m2+mfbbc; -// mfbac = m0; -// m0 += c2o9 * oMdrho; -// mfbbc = m1-m0 * vvy; -// mfbcc = m2-2. * m1 * vvy+vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcaa+mfcca; -// m1 = mfcca-mfcaa; -// m0 = m2+mfcba; -// mfcaa = m0; -// m0 += c1o6 * oMdrho; -// mfcba = m1-m0 * vvy; -// mfcca = m2-2. * m1 * vvy+vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcab+mfccb; -// m1 = mfccb-mfcab; -// m0 = m2+mfcbb; -// mfcab = m0; -// mfcbb = m1-m0 * vvy; -// mfccb = m2-2. * m1 * vvy+vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcac+mfccc; -// m1 = mfccc-mfcac; -// m0 = m2+mfcbc; -// mfcac = m0; -// m0 += c1o18 * oMdrho; -// mfcbc = m1-m0 * vvy; -// mfccc = m2-2. * m1 * vvy+vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // X - Dir -// m2 = mfaaa+mfcaa; -// m1 = mfcaa-mfaaa; -// m0 = m2+mfbaa; -// mfaaa = m0; -// m0 += 1. * oMdrho; -// mfbaa = m1-m0 * vvx; -// mfcaa = m2-2. * m1 * vvx+vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaba+mfcba; -// m1 = mfcba-mfaba; -// m0 = m2+mfbba; -// mfaba = m0; -// mfbba = m1-m0 * vvx; -// mfcba = m2-2. * m1 * vvx+vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaca+mfcca; -// m1 = mfcca-mfaca; -// m0 = m2+mfbca; -// mfaca = m0; -// m0 += c1o3 * oMdrho; -// mfbca = m1-m0 * vvx; -// mfcca = m2-2. * m1 * vvx+vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaab+mfcab; -// m1 = mfcab-mfaab; -// m0 = m2+mfbab; -// mfaab = m0; -// mfbab = m1-m0 * vvx; -// mfcab = m2-2. * m1 * vvx+vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfabb+mfcbb; -// m1 = mfcbb-mfabb; -// m0 = m2+mfbbb; -// mfabb = m0; -// mfbbb = m1-m0 * vvx; -// mfcbb = m2-2. * m1 * vvx+vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfacb+mfccb; -// m1 = mfccb-mfacb; -// m0 = m2+mfbcb; -// mfacb = m0; -// mfbcb = m1-m0 * vvx; -// mfccb = m2-2. * m1 * vvx+vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaac+mfcac; -// m1 = mfcac-mfaac; -// m0 = m2+mfbac; -// mfaac = m0; -// m0 += c1o3 * oMdrho; -// mfbac = m1-m0 * vvx; -// mfcac = m2-2. * m1 * vvx+vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfabc+mfcbc; -// m1 = mfcbc-mfabc; -// m0 = m2+mfbbc; -// mfabc = m0; -// mfbbc = m1-m0 * vvx; -// mfcbc = m2-2. * m1 * vvx+vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfacc+mfccc; -// m1 = mfccc-mfacc; -// m0 = m2+mfbcc; -// mfacc = m0; -// m0 += c1o9 * oMdrho; -// mfbcc = m1-m0 * vvx; -// mfccc = m2-2. * m1 * vvx+vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// // Cumulants -// //////////////////////////////////////////////////////////////////////////////////// -// LBMReal OxxPyyPzz = 1.; //omega2 or bulk viscosity -// LBMReal OxyyPxzz = 1.;//-s9;//2+s9;// -// //LBMReal OxyyMxzz = 1.;//2+s9;// -// LBMReal O4 = 1.; -// LBMReal O5 = 1.; -// LBMReal O6 = 1.; -// -// //Cum 4. -// //LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 -// //LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 -// //LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 -// -// LBMReal CUMcbb = mfcbb-((mfcaa+c1o3) * mfabb+2. * mfbba * mfbab); -// LBMReal CUMbcb = mfbcb-((mfaca+c1o3) * mfbab+2. * mfbba * mfabb); -// LBMReal CUMbbc = mfbbc-((mfaac+c1o3) * mfbba+2. * mfbab * mfabb); -// -// LBMReal CUMcca = mfcca-((mfcaa * mfaca+2. * mfbba * mfbba)+c1o3 * (mfcaa+mfaca) * oMdrho+c1o9*(oMdrho-1)*oMdrho); -// LBMReal CUMcac = mfcac-((mfcaa * mfaac+2. * mfbab * mfbab)+c1o3 * (mfcaa+mfaac) * oMdrho+c1o9*(oMdrho-1)*oMdrho); -// LBMReal CUMacc = mfacc-((mfaac * mfaca+2. * mfabb * mfabb)+c1o3 * (mfaac+mfaca) * oMdrho+c1o9*(oMdrho-1)*oMdrho); -// -// //Cum 5. -// LBMReal CUMbcc = mfbcc-(mfaac * mfbca+mfaca * mfbac+4. * mfabb * mfbbb+2. * (mfbab * mfacb+mfbba * mfabc))-c1o3 * (mfbca+mfbac) * oMdrho; -// LBMReal CUMcbc = mfcbc-(mfaac * mfcba+mfcaa * mfabc+4. * mfbab * mfbbb+2. * (mfabb * mfcab+mfbba * mfbac))-c1o3 * (mfcba+mfabc) * oMdrho; -// LBMReal CUMccb = mfccb-(mfcaa * mfacb+mfaca * mfcab+4. * mfbba * mfbbb+2. * (mfbab * mfbca+mfabb * mfcba))-c1o3 * (mfacb+mfcab) * oMdrho; -// -// //Cum 6. -// LBMReal CUMccc = mfccc+((-4. * mfbbb * mfbbb -// -(mfcaa * mfacc+mfaca * mfcac+mfaac * mfcca) -// -4. * (mfabb * mfcbb+mfbab * mfbcb+mfbba * mfbbc) -// -2. * (mfbca * mfbac+mfcba * mfabc+mfcab * mfacb)) -// +(4. * (mfbab * mfbab * mfaca+mfabb * mfabb * mfcaa+mfbba * mfbba * mfaac) -// +2. * (mfcaa * mfaca * mfaac) -// +16. * mfbba * mfbab * mfabb) -// -c1o3* (mfacc+mfcac+mfcca) * oMdrho-c1o9*oMdrho*oMdrho -// -c1o9* (mfcaa+mfaca+mfaac) * oMdrho*(1.-2.* oMdrho)-c1o27* oMdrho * oMdrho*(-2.* oMdrho) -// +(2. * (mfbab * mfbab+mfabb * mfabb+mfbba * mfbba) -// +(mfaac * mfaca+mfaac * mfcaa+mfaca * mfcaa)) * c2o3*oMdrho)+c1o27*oMdrho; -// -// //2. -// // linear combinations -// LBMReal mxxPyyPzz = mfcaa+mfaca+mfaac; -// LBMReal mxxMyy = mfcaa-mfaca; -// LBMReal mxxMzz = mfcaa-mfaac; -// -// LBMReal dxux = -c1o2 * collFactor *(mxxMyy+mxxMzz)+c1o2 * OxxPyyPzz*(mfaaa-mxxPyyPzz); -// LBMReal dyuy = dxux+collFactor * c3o2 * mxxMyy; -// LBMReal dzuz = dxux+collFactor * c3o2 * mxxMzz; -// -// //relax -// mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz)-3. * (1.-c1o2 * OxxPyyPzz) * (vx2 * dxux+vy2 * dyuy+vz2 * dzuz); -// mxxMyy += collFactor * (-mxxMyy)-3. * (1.-c1o2 * collFactor) * (vx2 * dxux-vy2 * dyuy); -// mxxMzz += collFactor * (-mxxMzz)-3. * (1.-c1o2 * collFactor) * (vx2 * dxux-vz2 * dzuz); -// -// mfabb += collFactor * (-mfabb); -// mfbab += collFactor * (-mfbab); -// mfbba += collFactor * (-mfbba); -// -// // linear combinations back -// mfcaa = c1o3 * (mxxMyy+mxxMzz+mxxPyyPzz); -// mfaca = c1o3 * (-2. * mxxMyy+mxxMzz+mxxPyyPzz); -// mfaac = c1o3 * (mxxMyy-2. * mxxMzz+mxxPyyPzz); -// -// //3. -// // linear combinations -// LBMReal mxxyPyzz = mfcba+mfabc; -// LBMReal mxxyMyzz = mfcba-mfabc; -// -// LBMReal mxxzPyyz = mfcab+mfacb; -// LBMReal mxxzMyyz = mfcab-mfacb; -// -// LBMReal mxyyPxzz = mfbca+mfbac; -// LBMReal mxyyMxzz = mfbca-mfbac; -// -// //relax -// wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mfbbb)/(fabs(mfbbb)+qudricLimit); -// mfbbb += wadjust * (-mfbbb); -// wadjust = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxxyPyzz)/(fabs(mxxyPyzz)+qudricLimit); -// mxxyPyzz += wadjust * (-mxxyPyzz); -// wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxxyMyzz)/(fabs(mxxyMyzz)+qudricLimit); -// mxxyMyzz += wadjust * (-mxxyMyzz); -// wadjust = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxxzPyyz)/(fabs(mxxzPyyz)+qudricLimit); -// mxxzPyyz += wadjust * (-mxxzPyyz); -// wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxxzMyyz)/(fabs(mxxzMyyz)+qudricLimit); -// mxxzMyyz += wadjust * (-mxxzMyyz); -// wadjust = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxyyPxzz)/(fabs(mxyyPxzz)+qudricLimit); -// mxyyPxzz += wadjust * (-mxyyPxzz); -// wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxyyMxzz)/(fabs(mxyyMxzz)+qudricLimit); -// mxyyMxzz += wadjust * (-mxyyMxzz); -// -// // linear combinations back -// mfcba = (mxxyMyzz+mxxyPyzz) * c1o2; -// mfabc = (-mxxyMyzz+mxxyPyzz) * c1o2; -// mfcab = (mxxzMyyz+mxxzPyyz) * c1o2; -// mfacb = (-mxxzMyyz+mxxzPyyz) * c1o2; -// mfbca = (mxyyMxzz+mxyyPxzz) * c1o2; -// mfbac = (-mxyyMxzz+mxyyPxzz) * c1o2; -// -// //4. -// CUMacc += O4 * (-CUMacc); -// CUMcac += O4 * (-CUMcac); -// CUMcca += O4 * (-CUMcca); -// -// CUMbbc += O4 * (-CUMbbc); -// CUMbcb += O4 * (-CUMbcb); -// CUMcbb += O4 * (-CUMcbb); -// -// //5. -// CUMbcc += O5 * (-CUMbcc); -// CUMcbc += O5 * (-CUMcbc); -// CUMccb += O5 * (-CUMccb); -// -// //6. -// CUMccc += O6 * (-CUMccc); -// -// //back cumulants to central moments -// //4. -// //mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 -// //mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 -// //mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 -// -// mfcbb = CUMcbb+((mfcaa+c1o3) * mfabb+2. * mfbba * mfbab); -// mfbcb = CUMbcb+((mfaca+c1o3) * mfbab+2. * mfbba * mfabb); -// mfbbc = CUMbbc+((mfaac+c1o3) * mfbba+2. * mfbab * mfabb); -// -// mfcca = CUMcca+(mfcaa * mfaca+2. * mfbba * mfbba)+c1o3 * (mfcaa+mfaca) * oMdrho+c1o9*(oMdrho-1)*oMdrho; -// mfcac = CUMcac+(mfcaa * mfaac+2. * mfbab * mfbab)+c1o3 * (mfcaa+mfaac) * oMdrho+c1o9*(oMdrho-1)*oMdrho; -// mfacc = CUMacc+(mfaac * mfaca+2. * mfabb * mfabb)+c1o3 * (mfaac+mfaca) * oMdrho+c1o9*(oMdrho-1)*oMdrho; -// -// //5. -// mfbcc = CUMbcc+(mfaac * mfbca+mfaca * mfbac+4. * mfabb * mfbbb+2. * (mfbab * mfacb+mfbba * mfabc))+c1o3 * (mfbca+mfbac) * oMdrho; -// mfcbc = CUMcbc+(mfaac * mfcba+mfcaa * mfabc+4. * mfbab * mfbbb+2. * (mfabb * mfcab+mfbba * mfbac))+c1o3 * (mfcba+mfabc) * oMdrho; -// mfccb = CUMccb+(mfcaa * mfacb+mfaca * mfcab+4. * mfbba * mfbbb+2. * (mfbab * mfbca+mfabb * mfcba))+c1o3 * (mfacb+mfcab) * oMdrho; -// -// //6. -// mfccc = CUMccc-((-4. * mfbbb * mfbbb -// -(mfcaa * mfacc+mfaca * mfcac+mfaac * mfcca) -// -4. * (mfabb * mfcbb+mfbac * mfbca+mfbba * mfbbc) -// -2. * (mfbca * mfbac+mfcba * mfabc+mfcab * mfacb)) -// +(4. * (mfbab * mfbab * mfaca+mfabb * mfabb * mfcaa+mfbba * mfbba * mfaac) -// +2. * (mfcaa * mfaca * mfaac) -// +16. * mfbba * mfbab * mfabb) -// -c1o3* (mfacc+mfcac+mfcca) * oMdrho-c1o9*oMdrho*oMdrho -// -c1o9* (mfcaa+mfaca+mfaac) * oMdrho*(1.-2.* oMdrho)-c1o27* oMdrho * oMdrho*(-2.* oMdrho) -// +(2. * (mfbab * mfbab+mfabb * mfabb+mfbba * mfbba) -// +(mfaac * mfaca+mfaac * mfcaa+mfaca * mfcaa)) * c2o3*oMdrho)-c1o27*oMdrho; -// -// mfaab = 0.0; -// mfaba = 0.0; -// mfbaa = 0.0; -// -// //mfaab *= -0.5; -// //mfaba *= -0.5; -// //mfbaa *= -0.5; -// -// -// //////////////////////////////////////////////////////////////////////////////////// -// //back -// //////////////////////////////////////////////////////////////////////////////////// -// //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // Z - Dir -// m0 = mfaac * c1o2+mfaab * (vvz-c1o2)+(mfaaa+1. * oMdrho) * (vz2-vvz) * c1o2; -// m1 = -mfaac-2. * mfaab * vvz+mfaaa * (1.-vz2)-1. * oMdrho * vz2; -// m2 = mfaac * c1o2+mfaab * (vvz+c1o2)+(mfaaa+1. * oMdrho) * (vz2+vvz) * c1o2; -// mfaaa = m0; -// mfaab = m1; -// mfaac = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfabc * c1o2+mfabb * (vvz-c1o2)+mfaba * (vz2-vvz) * c1o2; -// m1 = -mfabc-2. * mfabb * vvz+mfaba * (1.-vz2); -// m2 = mfabc * c1o2+mfabb * (vvz+c1o2)+mfaba * (vz2+vvz) * c1o2; -// mfaba = m0; -// mfabb = m1; -// mfabc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfacc * c1o2+mfacb * (vvz-c1o2)+(mfaca+c1o3 * oMdrho) * (vz2-vvz) * c1o2; -// m1 = -mfacc-2. * mfacb * vvz+mfaca * (1.-vz2)-c1o3 * oMdrho * vz2; -// m2 = mfacc * c1o2+mfacb * (vvz+c1o2)+(mfaca+c1o3 * oMdrho) * (vz2+vvz) * c1o2; -// mfaca = m0; -// mfacb = m1; -// mfacc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfbac * c1o2+mfbab * (vvz-c1o2)+mfbaa * (vz2-vvz) * c1o2; -// m1 = -mfbac-2. * mfbab * vvz+mfbaa * (1.-vz2); -// m2 = mfbac * c1o2+mfbab * (vvz+c1o2)+mfbaa * (vz2+vvz) * c1o2; -// mfbaa = m0; -// mfbab = m1; -// mfbac = m2; -// /////////b////////////////////////////////////////////////////////////////////////// -// m0 = mfbbc * c1o2+mfbbb * (vvz-c1o2)+mfbba * (vz2-vvz) * c1o2; -// m1 = -mfbbc-2. * mfbbb * vvz+mfbba * (1.-vz2); -// m2 = mfbbc * c1o2+mfbbb * (vvz+c1o2)+mfbba * (vz2+vvz) * c1o2; -// mfbba = m0; -// mfbbb = m1; -// mfbbc = m2; -// /////////b////////////////////////////////////////////////////////////////////////// -// m0 = mfbcc * c1o2+mfbcb * (vvz-c1o2)+mfbca * (vz2-vvz) * c1o2; -// m1 = -mfbcc-2. * mfbcb * vvz+mfbca * (1.-vz2); -// m2 = mfbcc * c1o2+mfbcb * (vvz+c1o2)+mfbca * (vz2+vvz) * c1o2; -// mfbca = m0; -// mfbcb = m1; -// mfbcc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcac * c1o2+mfcab * (vvz-c1o2)+(mfcaa+c1o3 * oMdrho) * (vz2-vvz) * c1o2; -// m1 = -mfcac-2. * mfcab * vvz+mfcaa * (1.-vz2)-c1o3 * oMdrho * vz2; -// m2 = mfcac * c1o2+mfcab * (vvz+c1o2)+(mfcaa+c1o3 * oMdrho) * (vz2+vvz) * c1o2; -// mfcaa = m0; -// mfcab = m1; -// mfcac = m2; -// /////////c////////////////////////////////////////////////////////////////////////// -// m0 = mfcbc * c1o2+mfcbb * (vvz-c1o2)+mfcba * (vz2-vvz) * c1o2; -// m1 = -mfcbc-2. * mfcbb * vvz+mfcba * (1.-vz2); -// m2 = mfcbc * c1o2+mfcbb * (vvz+c1o2)+mfcba * (vz2+vvz) * c1o2; -// mfcba = m0; -// mfcbb = m1; -// mfcbc = m2; -// /////////c////////////////////////////////////////////////////////////////////////// -// m0 = mfccc * c1o2+mfccb * (vvz-c1o2)+(mfcca+c1o9 * oMdrho) * (vz2-vvz) * c1o2; -// m1 = -mfccc-2. * mfccb * vvz+mfcca * (1.-vz2)-c1o9 * oMdrho * vz2; -// m2 = mfccc * c1o2+mfccb * (vvz+c1o2)+(mfcca+c1o9 * oMdrho) * (vz2+vvz) * c1o2; -// mfcca = m0; -// mfccb = m1; -// mfccc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // Y - Dir -// m0 = mfaca * c1o2+mfaba * (vvy-c1o2)+(mfaaa+c1o6 * oMdrho) * (vy2-vvy) * c1o2; -// m1 = -mfaca-2. * mfaba * vvy+mfaaa * (1.-vy2)-c1o6 * oMdrho * vy2; -// m2 = mfaca * c1o2+mfaba * (vvy+c1o2)+(mfaaa+c1o6 * oMdrho) * (vy2+vvy) * c1o2; -// mfaaa = m0; -// mfaba = m1; -// mfaca = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfacb * c1o2+mfabb * (vvy-c1o2)+(mfaab+c2o3 * oMdrho) * (vy2-vvy) * c1o2; -// m1 = -mfacb-2. * mfabb * vvy+mfaab * (1.-vy2)-c2o3 * oMdrho * vy2; -// m2 = mfacb * c1o2+mfabb * (vvy+c1o2)+(mfaab+c2o3 * oMdrho) * (vy2+vvy) * c1o2; -// mfaab = m0; -// mfabb = m1; -// mfacb = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfacc * c1o2+mfabc * (vvy-c1o2)+(mfaac+c1o6 * oMdrho) * (vy2-vvy) * c1o2; -// m1 = -mfacc-2. * mfabc * vvy+mfaac * (1.-vy2)-c1o6 * oMdrho * vy2; -// m2 = mfacc * c1o2+mfabc * (vvy+c1o2)+(mfaac+c1o6 * oMdrho) * (vy2+vvy) * c1o2; -// mfaac = m0; -// mfabc = m1; -// mfacc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfbca * c1o2+mfbba * (vvy-c1o2)+mfbaa * (vy2-vvy) * c1o2; -// m1 = -mfbca-2. * mfbba * vvy+mfbaa * (1.-vy2); -// m2 = mfbca * c1o2+mfbba * (vvy+c1o2)+mfbaa * (vy2+vvy) * c1o2; -// mfbaa = m0; -// mfbba = m1; -// mfbca = m2; -// /////////b////////////////////////////////////////////////////////////////////////// -// m0 = mfbcb * c1o2+mfbbb * (vvy-c1o2)+mfbab * (vy2-vvy) * c1o2; -// m1 = -mfbcb-2. * mfbbb * vvy+mfbab * (1.-vy2); -// m2 = mfbcb * c1o2+mfbbb * (vvy+c1o2)+mfbab * (vy2+vvy) * c1o2; -// mfbab = m0; -// mfbbb = m1; -// mfbcb = m2; -// /////////b////////////////////////////////////////////////////////////////////////// -// m0 = mfbcc * c1o2+mfbbc * (vvy-c1o2)+mfbac * (vy2-vvy) * c1o2; -// m1 = -mfbcc-2. * mfbbc * vvy+mfbac * (1.-vy2); -// m2 = mfbcc * c1o2+mfbbc * (vvy+c1o2)+mfbac * (vy2+vvy) * c1o2; -// mfbac = m0; -// mfbbc = m1; -// mfbcc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcca * c1o2+mfcba * (vvy-c1o2)+(mfcaa+c1o18 * oMdrho) * (vy2-vvy) * c1o2; -// m1 = -mfcca-2. * mfcba * vvy+mfcaa * (1.-vy2)-c1o18 * oMdrho * vy2; -// m2 = mfcca * c1o2+mfcba * (vvy+c1o2)+(mfcaa+c1o18 * oMdrho) * (vy2+vvy) * c1o2; -// mfcaa = m0; -// mfcba = m1; -// mfcca = m2; -// /////////c////////////////////////////////////////////////////////////////////////// -// m0 = mfccb * c1o2+mfcbb * (vvy-c1o2)+(mfcab+c2o9 * oMdrho) * (vy2-vvy) * c1o2; -// m1 = -mfccb-2. * mfcbb * vvy+mfcab * (1.-vy2)-c2o9 * oMdrho * vy2; -// m2 = mfccb * c1o2+mfcbb * (vvy+c1o2)+(mfcab+c2o9 * oMdrho) * (vy2+vvy) * c1o2; -// mfcab = m0; -// mfcbb = m1; -// mfccb = m2; -// /////////c////////////////////////////////////////////////////////////////////////// -// m0 = mfccc * c1o2+mfcbc * (vvy-c1o2)+(mfcac+c1o18 * oMdrho) * (vy2-vvy) * c1o2; -// m1 = -mfccc-2. * mfcbc * vvy+mfcac * (1.-vy2)-c1o18 * oMdrho * vy2; -// m2 = mfccc * c1o2+mfcbc * (vvy+c1o2)+(mfcac+c1o18 * oMdrho) * (vy2+vvy) * c1o2; -// mfcac = m0; -// mfcbc = m1; -// mfccc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // X - Dir -// m0 = mfcaa * c1o2+mfbaa * (vvx-c1o2)+(mfaaa+c1o36 * oMdrho) * (vx2-vvx) * c1o2; -// m1 = -mfcaa-2. * mfbaa * vvx+mfaaa * (1.-vx2)-c1o36 * oMdrho * vx2; -// m2 = mfcaa * c1o2+mfbaa * (vvx+c1o2)+(mfaaa+c1o36 * oMdrho) * (vx2+vvx) * c1o2; -// mfaaa = m0; -// mfbaa = m1; -// mfcaa = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcba * c1o2+mfbba * (vvx-c1o2)+(mfaba+c1o9 * oMdrho) * (vx2-vvx) * c1o2; -// m1 = -mfcba-2. * mfbba * vvx+mfaba * (1.-vx2)-c1o9 * oMdrho * vx2; -// m2 = mfcba * c1o2+mfbba * (vvx+c1o2)+(mfaba+c1o9 * oMdrho) * (vx2+vvx) * c1o2; -// mfaba = m0; -// mfbba = m1; -// mfcba = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcca * c1o2+mfbca * (vvx-c1o2)+(mfaca+c1o36 * oMdrho) * (vx2-vvx) * c1o2; -// m1 = -mfcca-2. * mfbca * vvx+mfaca * (1.-vx2)-c1o36 * oMdrho * vx2; -// m2 = mfcca * c1o2+mfbca * (vvx+c1o2)+(mfaca+c1o36 * oMdrho) * (vx2+vvx) * c1o2; -// mfaca = m0; -// mfbca = m1; -// mfcca = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcab * c1o2+mfbab * (vvx-c1o2)+(mfaab+c1o9 * oMdrho) * (vx2-vvx) * c1o2; -// m1 = -mfcab-2. * mfbab * vvx+mfaab * (1.-vx2)-c1o9 * oMdrho * vx2; -// m2 = mfcab * c1o2+mfbab * (vvx+c1o2)+(mfaab+c1o9 * oMdrho) * (vx2+vvx) * c1o2; -// mfaab = m0; -// mfbab = m1; -// mfcab = m2; -// ///////////b//////////////////////////////////////////////////////////////////////// -// m0 = mfcbb * c1o2+mfbbb * (vvx-c1o2)+(mfabb+c4o9 * oMdrho) * (vx2-vvx) * c1o2; -// m1 = -mfcbb-2. * mfbbb * vvx+mfabb * (1.-vx2)-c4o9 * oMdrho * vx2; -// m2 = mfcbb * c1o2+mfbbb * (vvx+c1o2)+(mfabb+c4o9 * oMdrho) * (vx2+vvx) * c1o2; -// mfabb = m0; -// mfbbb = m1; -// mfcbb = m2; -// ///////////b//////////////////////////////////////////////////////////////////////// -// m0 = mfccb * c1o2+mfbcb * (vvx-c1o2)+(mfacb+c1o9 * oMdrho) * (vx2-vvx) * c1o2; -// m1 = -mfccb-2. * mfbcb * vvx+mfacb * (1.-vx2)-c1o9 * oMdrho * vx2; -// m2 = mfccb * c1o2+mfbcb * (vvx+c1o2)+(mfacb+c1o9 * oMdrho) * (vx2+vvx) * c1o2; -// mfacb = m0; -// mfbcb = m1; -// mfccb = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcac * c1o2+mfbac * (vvx-c1o2)+(mfaac+c1o36 * oMdrho) * (vx2-vvx) * c1o2; -// m1 = -mfcac-2. * mfbac * vvx+mfaac * (1.-vx2)-c1o36 * oMdrho * vx2; -// m2 = mfcac * c1o2+mfbac * (vvx+c1o2)+(mfaac+c1o36 * oMdrho) * (vx2+vvx) * c1o2; -// mfaac = m0; -// mfbac = m1; -// mfcac = m2; -// ///////////c//////////////////////////////////////////////////////////////////////// -// m0 = mfcbc * c1o2+mfbbc * (vvx-c1o2)+(mfabc+c1o9 * oMdrho) * (vx2-vvx) * c1o2; -// m1 = -mfcbc-2. * mfbbc * vvx+mfabc * (1.-vx2)-c1o9 * oMdrho * vx2; -// m2 = mfcbc * c1o2+mfbbc * (vvx+c1o2)+(mfabc+c1o9 * oMdrho) * (vx2+vvx) * c1o2; -// mfabc = m0; -// mfbbc = m1; -// mfcbc = m2; -// ///////////c//////////////////////////////////////////////////////////////////////// -// m0 = mfccc * c1o2+mfbcc * (vvx-c1o2)+(mfacc+c1o36 * oMdrho) * (vx2-vvx) * c1o2; -// m1 = -mfccc-2. * mfbcc * vvx+mfacc * (1.-vx2)-c1o36 * oMdrho * vx2; -// m2 = mfccc * c1o2+mfbcc * (vvx+c1o2)+(mfacc+c1o36 * oMdrho) * (vx2+vvx) * c1o2; -// mfacc = m0; -// mfbcc = m1; -// mfccc = m2; -// -// ////////////////////////////////////////////////////////////////////////// -// //proof correctness -// ////////////////////////////////////////////////////////////////////////// -//#ifdef PROOF_CORRECTNESS -// LBMReal rho_post = (mfaaa+mfaac+mfaca+mfcaa+mfacc+mfcac+mfccc+mfcca) -// +(mfaab+mfacb+mfcab+mfccb)+(mfaba+mfabc+mfcba+mfcbc)+(mfbaa+mfbac+mfbca+mfbcc) -// +(mfabb+mfcbb)+(mfbab+mfbcb)+(mfbba+mfbbc)+mfbbb; -// //LBMReal dif = fabs(rho - rho_post); -// LBMReal dif = rho-rho_post; -//#ifdef SINGLEPRECISION -// if (dif>10.0E-7||dif<-10.0E-7) -//#else -// if (dif>10.0E-15||dif<-10.0E-15) -//#endif -// { -// UB_THROW(UbException(UB_EXARGS, "rho="+UbSystem::toString(rho)+", rho_post="+UbSystem::toString(rho_post) -// +" dif="+UbSystem::toString(dif) -// +" rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3))); -// //UBLOG(logERROR,"LBMKernel3DCCLB::collideAll(): rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)); -// //exit(EXIT_FAILURE); -// } -//#endif -// //////////////////////////////////////////////////////////////////////////// -// ////write distribution -// //////////////////////////////////////////////////////////////////////////// -// (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = mfabb; -// (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = mfbab; -// (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = mfbba; -// (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; -// (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; -// (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; -// (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; -// (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; -// (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; -// (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; -// (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; -// (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; -// (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; -// -// (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb; -// (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb; -// (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; -// (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb; -// (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb; -// (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; -// (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; -// (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; -// (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; -// (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; -// (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; -// (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; -// (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; -// -// (*this->zeroDistributions)(x1, x2, x3) = mfbbb; -// //////////////////////////////////////////////////////////////////////////// -// -// } -// } -// } -// } -// -//} - - - - -void InitDensityLBMKernel::calculate(int /*step*/) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - localDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); - zeroDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - SPtr<BoundaryConditions> bcPtr; - real f[D3Q27System::ENDF+1]; - real feq[D3Q27System::ENDF+1]; - real drho, vx1, vx2, vx3; - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1-ghostLayerWidth; - int maxX2 = bcArrayMaxX2-ghostLayerWidth; - int maxX3 = bcArrayMaxX3-ghostLayerWidth; - - //collFactor = 1.0/(1.0/2.0+1.0/sqrt(6.0)); - collFactor = 1.0; - - 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)) - { - int x1p = x1+1; - int x2p = x2+1; - int x3p = x3+1; - ////////////////////////////////////////////////////////////////////////// - //read distribution - //////////////////////////////////////////////////////////////////////////// - f[d000] = (*this->zeroDistributions)(x1, x2, x3); - - f[dP00] = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3); - f[d0P0] = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3); - f[d00P] = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3); - f[dPP0] = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3); - f[dMP0] = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3); - f[dP0P] = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3); - f[dM0P] = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3); - f[d0PP] = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3); - f[d0MP] = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3); - f[dPPP] = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3); - f[dMPP] = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3); - f[dPMP] = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3); - f[dMMP] = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3); - - f[dM00] = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3); - f[d0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3); - f[d00M] = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p); - f[dMM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3); - f[dPM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3); - f[dM0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p); - f[dP0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p); - f[d0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p); - f[d0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p); - f[dMMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p); - f[dPMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p); - f[dMPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p); - f[dPPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p); - ////////////////////////////////////////////////////////////////////////// - - drho = ((f[dPPP]+f[dMMM])+(f[dPMP]+f[dMPM]))+((f[dPMM]+f[dMPP])+(f[dMMP]+f[dPPM])) - +(((f[dPP0]+f[dMM0])+(f[dPM0]+f[dMP0]))+((f[dP0P]+f[dM0M])+(f[dP0M]+f[dM0P])) - +((f[d0PM]+f[d0MP])+(f[d0PP]+f[d0MM])))+((f[dP00]+f[dM00])+(f[d0P0]+f[d0M0]) - +(f[d00P]+f[d00M]))+f[d000]; - - //vx1 = ((((f[TNE]-f[BSW])+(f[TSE]-f[BNW]))+((f[BSE]-f[TNW])+(f[BNE]-f[TSW])))+ - // (((f[BE]-f[TW])+(f[TE]-f[BW]))+((f[SE]-f[NW])+(f[NE]-f[SW])))+ - // (f[dP00]-f[W])); - - //vx2 = ((((f[TNE]-f[BSW])+(f[BNW]-f[TSE]))+((f[TNW]-f[BSE])+(f[BNE]-f[TSW])))+ - // (((f[BN]-f[TS])+(f[TN]-f[BS]))+((f[NW]-f[SE])+(f[NE]-f[SW])))+ - // (f[N]-f[S])); - - //vx3 = ((((f[TNE]-f[BSW])+(f[TSE]-f[BNW]))+((f[TNW]-f[BSE])+(f[TSW]-f[BNE])))+ - // (((f[TS]-f[BN])+(f[TN]-f[BS]))+((f[TW]-f[BE])+(f[TE]-f[BW])))+ - // (f[T]-f[B])); - - vx1 = v(0,x1,x2,x3); - vx2 = v(1,x1,x2,x3); - vx3 = v(2,x1,x2,x3); - - //LBMReal vvx = v(0,x1,x2,x3); - //LBMReal vvy = v(1,x1,x2,x3); - //LBMReal vvz = v(2,x1,x2,x3); - - //vx1 = vx1+(vvx-vx1); - //vx2 = vx2+(vvy-vx2); - //vx3 = vx3+(vvz-vx3); - - real cu_sq = c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - - feq[d000] = c8o27*(drho-cu_sq); - feq[dP00] = c2o27*(drho+c3o1*(vx1)+c9o2*(vx1)*(vx1)-cu_sq); - feq[dM00] = c2o27*(drho+c3o1*(-vx1)+c9o2*(-vx1)*(-vx1)-cu_sq); - feq[d0P0] = c2o27*(drho+c3o1*(vx2)+c9o2*(vx2)*(vx2)-cu_sq); - feq[d0M0] = c2o27*(drho+c3o1*(-vx2)+c9o2*(-vx2)*(-vx2)-cu_sq); - feq[d00P] = c2o27*(drho+c3o1*(vx3)+c9o2*(vx3)*(vx3)-cu_sq); - feq[d00M] = c2o27*(drho+c3o1*(-vx3)+c9o2*(-vx3)*(-vx3)-cu_sq); - feq[dPP0] = c1o54*(drho+c3o1*(vx1+vx2)+c9o2*(vx1+vx2)*(vx1+vx2)-cu_sq); - feq[dMM0] = c1o54*(drho+c3o1*(-vx1-vx2)+c9o2*(-vx1-vx2)*(-vx1-vx2)-cu_sq); - feq[dPM0] = c1o54*(drho+c3o1*(vx1-vx2)+c9o2*(vx1-vx2)*(vx1-vx2)-cu_sq); - feq[dMP0] = c1o54*(drho+c3o1*(-vx1+vx2)+c9o2*(-vx1+vx2)*(-vx1+vx2)-cu_sq); - feq[dP0P] = c1o54*(drho+c3o1*(vx1+vx3)+c9o2*(vx1+vx3)*(vx1+vx3)-cu_sq); - feq[dM0M] = c1o54*(drho+c3o1*(-vx1-vx3)+c9o2*(-vx1-vx3)*(-vx1-vx3)-cu_sq); - feq[dP0M] = c1o54*(drho+c3o1*(vx1-vx3)+c9o2*(vx1-vx3)*(vx1-vx3)-cu_sq); - feq[dM0P] = c1o54*(drho+c3o1*(-vx1+vx3)+c9o2*(-vx1+vx3)*(-vx1+vx3)-cu_sq); - feq[d0PP] = c1o54*(drho+c3o1*(vx2+vx3)+c9o2*(vx2+vx3)*(vx2+vx3)-cu_sq); - feq[d0MM] = c1o54*(drho+c3o1*(-vx2-vx3)+c9o2*(-vx2-vx3)*(-vx2-vx3)-cu_sq); - feq[d0PM] = c1o54*(drho+c3o1*(vx2-vx3)+c9o2*(vx2-vx3)*(vx2-vx3)-cu_sq); - feq[d0MP] = c1o54*(drho+c3o1*(-vx2+vx3)+c9o2*(-vx2+vx3)*(-vx2+vx3)-cu_sq); - feq[dPPP] = c1o216*(drho+c3o1*(vx1+vx2+vx3)+c9o2*(vx1+vx2+vx3)*(vx1+vx2+vx3)-cu_sq); - feq[dMMM] = c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - feq[dPPM] = c1o216*(drho+c3o1*(vx1+vx2-vx3)+c9o2*(vx1+vx2-vx3)*(vx1+vx2-vx3)-cu_sq); - feq[dMMP] = c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - feq[dPMP] = c1o216*(drho+c3o1*(vx1-vx2+vx3)+c9o2*(vx1-vx2+vx3)*(vx1-vx2+vx3)-cu_sq); - feq[dMPM] = c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - feq[dPMM] = c1o216*(drho+c3o1*(vx1-vx2-vx3)+c9o2*(vx1-vx2-vx3)*(vx1-vx2-vx3)-cu_sq); - feq[dMPP] = c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - - //Relaxation - f[d000] += (feq[d000]-f[d000])*collFactor; - f[dP00] += (feq[dP00]-f[dP00])*collFactor; - f[dM00] += (feq[dM00]-f[dM00])*collFactor; - f[d0P0] += (feq[d0P0]-f[d0P0])*collFactor; - f[d0M0] += (feq[d0M0]-f[d0M0])*collFactor; - f[d00P] += (feq[d00P]-f[d00P])*collFactor; - f[d00M] += (feq[d00M]-f[d00M])*collFactor; - f[dPP0] += (feq[dPP0]-f[dPP0])*collFactor; - f[dMM0] += (feq[dMM0]-f[dMM0])*collFactor; - f[dPM0] += (feq[dPM0]-f[dPM0])*collFactor; - f[dMP0] += (feq[dMP0]-f[dMP0])*collFactor; - f[dP0P] += (feq[dP0P]-f[dP0P])*collFactor; - f[dM0M] += (feq[dM0M]-f[dM0M])*collFactor; - f[dP0M] += (feq[dP0M]-f[dP0M])*collFactor; - f[dM0P] += (feq[dM0P]-f[dM0P])*collFactor; - f[d0PP] += (feq[d0PP]-f[d0PP])*collFactor; - f[d0MM] += (feq[d0MM]-f[d0MM])*collFactor; - f[d0PM] += (feq[d0PM]-f[d0PM])*collFactor; - f[d0MP] += (feq[d0MP]-f[d0MP])*collFactor; - - f[dPPP] += (feq[dPPP]-f[dPPP])*collFactor; - f[dMMM] += (feq[dMMM]-f[dMMM])*collFactor; - f[dPPM] += (feq[dPPM]-f[dPPM])*collFactor; - f[dMMP] += (feq[dMMP]-f[dMMP])*collFactor; - f[dPMP] += (feq[dPMP]-f[dPMP])*collFactor; - f[dMPM] += (feq[dMPM]-f[dMPM])*collFactor; - f[dPMM] += (feq[dPMM]-f[dPMM])*collFactor; - f[dMPP] += (feq[dMPP]-f[dMPP])*collFactor; - - ////////////////////////////////////////////////////////////////////////// -#ifdef PROOF_CORRECTNESS - real rho_post = f[REST]+f[dP00]+f[W]+f[N]+f[S]+f[T]+f[B] - +f[NE]+f[SW]+f[SE]+f[NW]+f[TE]+f[BW]+f[BE] - +f[TW]+f[TN]+f[BS]+f[BN]+f[TS]+f[TNE]+f[TSW] - +f[TSE]+f[TNW]+f[BNE]+f[BSW]+f[BSE]+f[BNW]; - real dif = drho-rho_post; -#ifdef SINGLEPRECISION - if (dif>10.0E-7||dif<-10.0E-7) -#else - if (dif>10.0E-15||dif<-10.0E-15) -#endif - { - UB_THROW(UbException(UB_EXARGS, "rho is not correct")); - } -#endif - ////////////////////////////////////////////////////////////////////////// - //write distribution - ////////////////////////////////////////////////////////////////////////// - (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f[iP00]; - (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f[i0P0]; - (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f[i00P]; - (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f[iPP0]; - (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3) = f[iMP0]; - (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f[iP0P]; - (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3) = f[iM0P]; - (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f[i0PP]; - (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3) = f[i0MP]; - (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f[iPPP]; - (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3) = f[iMPP]; - (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3) = f[iPMP]; - (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[iMMP]; - - (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3) = f[iM00]; - (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3) = f[i0M0]; - (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p) = f[i00M]; - (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3) = f[iMM0]; - (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3) = f[iPM0]; - (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p) = f[iM0M]; - (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p) = f[iP0M]; - (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p) = f[i0MM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p) = f[i0PM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[iMMM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[iPMM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[iMPM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p) = f[iPPM]; - - (*this->zeroDistributions)(x1, x2, x3) = f[d000]; - ////////////////////////////////////////////////////////////////////////// - - - } - } - } - } -} \ No newline at end of file diff --git a/src/cpu/core/LBM/InitDensityLBMKernel.h b/src/cpu/core/LBM/InitDensityLBMKernel.h deleted file mode 100644 index 33255f8f5..000000000 --- a/src/cpu/core/LBM/InitDensityLBMKernel.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef InitDensityLBMKernel_h__ -#define InitDensityLBMKernel_h__ - -#include "LBMKernel.h" -#include "basics/utilities/UbTiming.h" -#include "CbArray4D.h" -#include "D3Q27System.h" -#include "CbArray3D.h" - -class InitDensityLBMKernel : public LBMKernel -{ -public: - InitDensityLBMKernel(); - ~InitDensityLBMKernel() override; - void calculate(int step) override; - SPtr<LBMKernel> clone() override; - void setVelocity(int x1, int x2, int x3, real vvx, real vvy, real vvz); - real getCalculationTime() override; -protected: - void initDataSet(); -private: -// real f[D3Q27System::ENDF+1]; - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributions; - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributions; -// LBMReal OxyyMxzz; - CbArray4D<real, IndexerX4X3X2X1> v; -}; - -#endif // InitDensityLBMKernel_h__ - diff --git a/src/cpu/core/LBM/ICell.h b/src/cpu/core/LBM/Interpolation/ICell.h similarity index 100% rename from src/cpu/core/LBM/ICell.h rename to src/cpu/core/LBM/Interpolation/ICell.h diff --git a/src/cpu/core/LBM/CompressibleCumulantLBMKernel.cpp b/src/cpu/core/LBM/K15CompressibleNavierStokes.cpp similarity index 84% rename from src/cpu/core/LBM/CompressibleCumulantLBMKernel.cpp rename to src/cpu/core/LBM/K15CompressibleNavierStokes.cpp index ded8dff43..7594364ad 100644 --- a/src/cpu/core/LBM/CompressibleCumulantLBMKernel.cpp +++ b/src/cpu/core/LBM/K15CompressibleNavierStokes.cpp @@ -1,4 +1,4 @@ -#include "CompressibleCumulantLBMKernel.h" +#include "K15CompressibleNavierStokes.h" #include "D3Q27System.h" #include "Interpolator.h" #include "D3Q27EsoTwist3DSplittedVector.h" @@ -11,29 +11,29 @@ using namespace vf::basics::constant; ////////////////////////////////////////////////////////////////////////// -CompressibleCumulantLBMKernel::CompressibleCumulantLBMKernel() +K15CompressibleNavierStokes::K15CompressibleNavierStokes() { this->compressible = true; - this->parameter = CompressibleCumulantLBMKernel::NORMAL; + this->parameter = K15CompressibleNavierStokes::NORMAL; this->OxyyMxzz = c1o1; this->bulkOmegaToOmega = false; this->OxxPyyPzz = c1o1; } ////////////////////////////////////////////////////////////////////////// -CompressibleCumulantLBMKernel::~CompressibleCumulantLBMKernel(void) +K15CompressibleNavierStokes::~K15CompressibleNavierStokes(void) = default; ////////////////////////////////////////////////////////////////////////// -void CompressibleCumulantLBMKernel::initDataSet() +void K15CompressibleNavierStokes::initDataSet() { SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.9)); dataSet->setFdistributions(d); } ////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> CompressibleCumulantLBMKernel::clone() +SPtr<LBMKernel> K15CompressibleNavierStokes::clone() { - SPtr<LBMKernel> kernel(new CompressibleCumulantLBMKernel()); + SPtr<LBMKernel> kernel(new K15CompressibleNavierStokes()); kernel->setNX(nx); - dynamicPointerCast<CompressibleCumulantLBMKernel>(kernel)->initDataSet(); + dynamicPointerCast<K15CompressibleNavierStokes>(kernel)->initDataSet(); kernel->setCollisionFactor(this->collFactor); kernel->setBCSet(bcSet->clone(kernel)); kernel->setWithForcing(withForcing); @@ -47,25 +47,25 @@ SPtr<LBMKernel> CompressibleCumulantLBMKernel::clone() switch (parameter) { case NORMAL: - dynamicPointerCast<CompressibleCumulantLBMKernel>(kernel)->OxyyMxzz = c1o1; + dynamicPointerCast<K15CompressibleNavierStokes>(kernel)->OxyyMxzz = c1o1; break; case MAGIC: - dynamicPointerCast<CompressibleCumulantLBMKernel>(kernel)->OxyyMxzz = c2o1 +(-collFactor); + dynamicPointerCast<K15CompressibleNavierStokes>(kernel)->OxyyMxzz = c2o1 +(-collFactor); break; } if (bulkOmegaToOmega) { - dynamicPointerCast<CompressibleCumulantLBMKernel>(kernel)->OxxPyyPzz = collFactor; + dynamicPointerCast<K15CompressibleNavierStokes>(kernel)->OxxPyyPzz = collFactor; } else { - dynamicPointerCast<CompressibleCumulantLBMKernel>(kernel)->OxxPyyPzz = c1o1; + dynamicPointerCast<K15CompressibleNavierStokes>(kernel)->OxxPyyPzz = c1o1; } return kernel; } ////////////////////////////////////////////////////////////////////////// -void CompressibleCumulantLBMKernel::calculate(int step) +void K15CompressibleNavierStokes::calculate(int step) { using namespace D3Q27System; using namespace std; @@ -116,13 +116,6 @@ void CompressibleCumulantLBMKernel::calculate(int step) real omega = collFactor; - - //#pragma omp parallel num_threads(8) - { - // int i = omp_get_thread_num(); - // printf_s("Hello from thread %d\n", i); - //} - //#pragma omp for for (int x3 = minX3; x3 < maxX3; x3++) { for (int x2 = minX2; x2 < maxX2; x2++) @@ -231,14 +224,6 @@ void CompressibleCumulantLBMKernel::calculate(int step) vy2 = vvy*vvy; vz2 = vvz*vvz; //////////////////////////////////////////////////////////////////////////////////// - //LBMReal wadjust; - //LBMReal qudricLimitP = 0.01f;// * 0.0001f; - //LBMReal qudricLimitM = 0.01f;// * 0.0001f; - //LBMReal qudricLimitD = 0.01f;// * 0.001f; - //LBMReal s9 = minusomega; - //test - //s9 = 0.; - //////////////////////////////////////////////////////////////////////////////////// //Hin //////////////////////////////////////////////////////////////////////////////////// // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren @@ -478,27 +463,7 @@ void CompressibleCumulantLBMKernel::calculate(int step) //////////////////////////////////////////////////////////// //3. ////////////////////////////// - real OxyyPxzz = c1o1;//three * (two - omega) / (three - omega);// - //LBMReal OxyyMxzz = one;//six * (two - omega) / (six - omega);// -// LBMReal Oxyz = one;//twelve * (two - omega) / (twelve + omega);// - ////////////////////////////// - //LBMReal OxyyPxzz = two-omega;// - //LBMReal OxyyMxzz = two-omega;// - ////////////////////////////// - //LBMReal OxyyPxzz = (eight * (omega - two)) / (omega - eight);//Ginzburg - //LBMReal OxyyMxzz = (eight * (omega - two)) / (omega - eight);//Ginzburg - ////////////////////////////// - //LBMReal OxyyPxzz = omega;//BGK - //LBMReal OxyyMxzz = omega;//BGK - ////////////////////////////// - //LBMReal OxyyPxzz = (one + omega) / two;//1P5 - //LBMReal OxyyMxzz = (one + omega) / two;//1P5 - ////////////////////////////// - //LBMReal OxyyPxzz = (three - omega) / two;//0P5 - //LBMReal OxyyMxzz = (three - omega) / two;//0P5 - ////////////////////////////// - //LBMReal OxyyPxzz = (one + (eight * (omega - two)) / (omega - eight)) / two;//one + Ginzburg / two ... Car - //LBMReal OxyyMxzz = (one + (eight * (omega - two)) / (omega - eight)) / two;//one + Ginzburg / two ... Car + real OxyyPxzz = c1o1; //////////////////////////////////////////////////////////// //4. ////////////////////////////// @@ -556,41 +521,6 @@ void CompressibleCumulantLBMKernel::calculate(int step) real mxxMyy = mfcaa-mfaca; real mxxMzz = mfcaa-mfaac; - ////////////////////////////////////////////////////////////////////////// - // LBMReal magicBulk=(CUMacc+CUMcac+CUMcca)*(one/OxxPyyPzz-c1o2)*c3o2*8.; - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 1 - //LBMReal oxxyy,oxxzz,oxy,oxz,oyz; - //LBMReal smag=0.001; - //oxxyy = omega+(one-omega)*fabs(mxxMyy)/(fabs(mxxMyy)+smag); - //oxxzz = omega+(one-omega)*fabs(mxxMzz)/(fabs(mxxMzz)+smag); - //oxy = omega+(one-omega)*fabs(mfbba)/(fabs(mfbba)+smag); - //oxz = omega+(one-omega)*fabs(mfbab)/(fabs(mfbab)+smag); - //oyz = omega+(one-omega)*fabs(mfabb)/(fabs(mfabb)+smag); - - //////////////////////////////////////////////////////////////////////////// - ////Teil 1b - //LBMReal constante = 1000.0; - //LBMReal nuEddi = constante * fabs(mxxPyyPzz); - //LBMReal omegaLimit = one / (one / omega + three * nuEddi); - - //{ - // LBMReal dxux = c1o2 * (-omegaLimit) *(mxxMyy + mxxMzz) + OxxPyyPzz * (mfaaa - mxxPyyPzz); - // LBMReal dyuy = dxux + omegaLimit * c3o2 * mxxMyy; - // LBMReal dzuz = dxux + omegaLimit * c3o2 * mxxMzz; - - ////relax - //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - //mxxMyy += omegaLimit * (-mxxMyy) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vy2 * dyuy); - //mxxMzz += omegaLimit * (-mxxMzz) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vz2 * dzuz); - - //} - //mfabb += omegaLimit * (-mfabb); - //mfbab += omegaLimit * (-mfbab); - //mfbba += omegaLimit * (-mfbba); - //////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) { @@ -603,32 +533,13 @@ void CompressibleCumulantLBMKernel::calculate(int step) mxxMyy += omega * (-mxxMyy)- c3o1 * (c1o1+c1o2 * (-omega)) * (vx2 * dxux-vy2 * dyuy); mxxMzz += omega * (-mxxMzz)- c3o1 * (c1o1+c1o2 * (-omega)) * (vx2 * dxux-vz2 * dzuz); - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 2 - //mxxMyy += oxxyy * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy); - //mxxMzz += oxxzz * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz); - ////////////////////////////////////////////////////////////////////////// - } - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// mfabb += omega * (-mfabb); mfbab += omega * (-mfbab); mfbba += omega * (-mfbba); - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 3 - //mfabb += oyz * (-mfabb); - //mfbab += oxz * (-mfbab); - //mfbba += oxy * (-mfbba); - ////////////////////////////////////////////////////////////////////////// - // linear combinations back mfcaa = c1o3 * (mxxMyy+mxxMzz+mxxPyyPzz); mfaca = c1o3 * (-c2o1* mxxMyy+mxxMzz+mxxPyyPzz); @@ -648,22 +559,6 @@ void CompressibleCumulantLBMKernel::calculate(int step) //relax ////////////////////////////////////////////////////////////////////////// - //das ist der limiter - //wadjust = Oxyz+(one-Oxyz)*fabs(mfbbb)/(fabs(mfbbb)+qudricLimitD); - //mfbbb += wadjust * (-mfbbb); - //wadjust = OxyyPxzz+(one-OxyyPxzz)*fabs(mxxyPyzz)/(fabs(mxxyPyzz)+qudricLimitP); - //mxxyPyzz += wadjust * (-mxxyPyzz); - //wadjust = OxyyMxzz+(one-OxyyMxzz)*fabs(mxxyMyzz)/(fabs(mxxyMyzz)+qudricLimitM); - //mxxyMyzz += wadjust * (-mxxyMyzz); - //wadjust = OxyyPxzz+(one-OxyyPxzz)*fabs(mxxzPyyz)/(fabs(mxxzPyyz)+qudricLimitP); - //mxxzPyyz += wadjust * (-mxxzPyyz); - //wadjust = OxyyMxzz+(one-OxyyMxzz)*fabs(mxxzMyyz)/(fabs(mxxzMyyz)+qudricLimitM); - //mxxzMyyz += wadjust * (-mxxzMyyz); - //wadjust = OxyyPxzz+(one-OxyyPxzz)*fabs(mxyyPxzz)/(fabs(mxyyPxzz)+qudricLimitP); - //mxyyPxzz += wadjust * (-mxyyPxzz); - //wadjust = OxyyMxzz+(one-OxyyMxzz)*fabs(mxyyMxzz)/(fabs(mxyyMxzz)+qudricLimitM); - //mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// //ohne limiter mfbbb += OxyyMxzz * (-mfbbb); mxxyPyzz += OxyyPxzz * (-mxxyPyzz); @@ -684,21 +579,6 @@ void CompressibleCumulantLBMKernel::calculate(int step) //4. ////////////////////////////////////////////////////////////////////////// - //mit limiter - // wadjust = O4+(one-O4)*fabs(CUMacc)/(fabs(CUMacc)+qudricLimit); - //CUMacc += wadjust * (-CUMacc); - // wadjust = O4+(one-O4)*fabs(CUMcac)/(fabs(CUMcac)+qudricLimit); - //CUMcac += wadjust * (-CUMcac); - // wadjust = O4+(one-O4)*fabs(CUMcca)/(fabs(CUMcca)+qudricLimit); - //CUMcca += wadjust * (-CUMcca); - - // wadjust = O4+(one-O4)*fabs(CUMbbc)/(fabs(CUMbbc)+qudricLimit); - //CUMbbc += wadjust * (-CUMbbc); - // wadjust = O4+(one-O4)*fabs(CUMbcb)/(fabs(CUMbcb)+qudricLimit); - //CUMbcb += wadjust * (-CUMbcb); - // wadjust = O4+(one-O4)*fabs(CUMcbb)/(fabs(CUMcbb)+qudricLimit); - //CUMcbb += wadjust * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// //ohne limiter CUMacc += O4 * (-CUMacc); CUMcac += O4 * (-CUMcac); @@ -1026,23 +906,23 @@ void CompressibleCumulantLBMKernel::calculate(int step) } } - } + //timer.stop(); } ////////////////////////////////////////////////////////////////////////// -real CompressibleCumulantLBMKernel::getCalculationTime() +real K15CompressibleNavierStokes::getCalculationTime() { //return timer.getDuration(); return timer.getTotalTime(); } ////////////////////////////////////////////////////////////////////////// -void CompressibleCumulantLBMKernel::setBulkOmegaToOmega(bool value) +void K15CompressibleNavierStokes::setBulkOmegaToOmega(bool value) { bulkOmegaToOmega = value; } ////////////////////////////////////////////////////////////////////////// -void CompressibleCumulantLBMKernel::setRelaxationParameter(Parameter p) +void K15CompressibleNavierStokes::setRelaxationParameter(Parameter p) { parameter = p; } diff --git a/src/cpu/core/LBM/CompressibleCumulantLBMKernel.h b/src/cpu/core/LBM/K15CompressibleNavierStokes.h similarity index 85% rename from src/cpu/core/LBM/CompressibleCumulantLBMKernel.h rename to src/cpu/core/LBM/K15CompressibleNavierStokes.h index 84910ef26..a2e82b469 100644 --- a/src/cpu/core/LBM/CompressibleCumulantLBMKernel.h +++ b/src/cpu/core/LBM/K15CompressibleNavierStokes.h @@ -1,5 +1,5 @@ -#ifndef CompressibleCumulantLBMKernel_h__ -#define CompressibleCumulantLBMKernel_h__ +#ifndef K15CompressibleNavierStokes_h__ +#define K15CompressibleNavierStokes_h__ #include "LBMKernel.h" #include "BCSet.h" @@ -11,14 +11,14 @@ //! \brief compressible cumulant LBM kernel. //! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model //! \author K. Kutscher, M. Geier -class CompressibleCumulantLBMKernel : public LBMKernel +class K15CompressibleNavierStokes : public LBMKernel { public: //! This option set relaxation parameter: NORMAL enum Parameter{NORMAL, MAGIC}; public: - CompressibleCumulantLBMKernel(); - ~CompressibleCumulantLBMKernel() override; + K15CompressibleNavierStokes(); + ~K15CompressibleNavierStokes() override; void calculate(int step) override; SPtr<LBMKernel> clone() override; real getCalculationTime() override; diff --git a/src/cpu/core/LBM/IncompressibleCumulantLBMKernel.cpp b/src/cpu/core/LBM/K16IncompressibleNavierStokes.cpp similarity index 98% rename from src/cpu/core/LBM/IncompressibleCumulantLBMKernel.cpp rename to src/cpu/core/LBM/K16IncompressibleNavierStokes.cpp index 39d6fd268..ca08ce35b 100644 --- a/src/cpu/core/LBM/IncompressibleCumulantLBMKernel.cpp +++ b/src/cpu/core/LBM/K16IncompressibleNavierStokes.cpp @@ -1,4 +1,4 @@ -#include "IncompressibleCumulantLBMKernel.h" +#include "K16IncompressibleNavierStokes.h" #include "D3Q27System.h" #include "Interpolator.h" #include "D3Q27EsoTwist3DSplittedVector.h" @@ -12,27 +12,27 @@ using namespace vf::basics::constant; ////////////////////////////////////////////////////////////////////////// -IncompressibleCumulantLBMKernel::IncompressibleCumulantLBMKernel() +K16IncompressibleNavierStokes::K16IncompressibleNavierStokes() { this->parameter = NORMAL; this->OxyyMxzz = c1o1; this->compressible = false; } ////////////////////////////////////////////////////////////////////////// -IncompressibleCumulantLBMKernel::~IncompressibleCumulantLBMKernel(void) +K16IncompressibleNavierStokes::~K16IncompressibleNavierStokes(void) = default; ////////////////////////////////////////////////////////////////////////// -void IncompressibleCumulantLBMKernel::initDataSet() +void K16IncompressibleNavierStokes::initDataSet() { SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.9)); dataSet->setFdistributions(d); } ////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> IncompressibleCumulantLBMKernel::clone() +SPtr<LBMKernel> K16IncompressibleNavierStokes::clone() { - SPtr<LBMKernel> kernel(new IncompressibleCumulantLBMKernel()); + SPtr<LBMKernel> kernel(new K16IncompressibleNavierStokes()); kernel->setNX(nx); - dynamicPointerCast<IncompressibleCumulantLBMKernel>(kernel)->initDataSet(); + dynamicPointerCast<K16IncompressibleNavierStokes>(kernel)->initDataSet(); kernel->setCollisionFactor(this->collFactor); kernel->setBCSet(bcSet->clone(kernel)); kernel->setWithForcing(withForcing); @@ -46,16 +46,16 @@ SPtr<LBMKernel> IncompressibleCumulantLBMKernel::clone() switch (parameter) { case NORMAL: - dynamicPointerCast<IncompressibleCumulantLBMKernel>(kernel)->OxyyMxzz = c1o1; + dynamicPointerCast<K16IncompressibleNavierStokes>(kernel)->OxyyMxzz = c1o1; break; case MAGIC: - dynamicPointerCast<IncompressibleCumulantLBMKernel>(kernel)->OxyyMxzz = c2o1 +(-collFactor); + dynamicPointerCast<K16IncompressibleNavierStokes>(kernel)->OxyyMxzz = c2o1 +(-collFactor); break; } return kernel; } ////////////////////////////////////////////////////////////////////////// -void IncompressibleCumulantLBMKernel::calculate(int step) +void K16IncompressibleNavierStokes::calculate(int step) { using namespace D3Q27System; using namespace std; @@ -890,13 +890,13 @@ void IncompressibleCumulantLBMKernel::calculate(int step) //timer.stop(); } ////////////////////////////////////////////////////////////////////////// -real IncompressibleCumulantLBMKernel::getCalculationTime() +real K16IncompressibleNavierStokes::getCalculationTime() { //return timer.getDuration(); return timer.getTotalTime(); } ////////////////////////////////////////////////////////////////////////// -void IncompressibleCumulantLBMKernel::setRelaxationParameter(Parameter p) +void K16IncompressibleNavierStokes::setRelaxationParameter(Parameter p) { parameter = p; } diff --git a/src/cpu/core/LBM/IncompressibleCumulantLBMKernel.h b/src/cpu/core/LBM/K16IncompressibleNavierStokes.h similarity index 83% rename from src/cpu/core/LBM/IncompressibleCumulantLBMKernel.h rename to src/cpu/core/LBM/K16IncompressibleNavierStokes.h index 99e64ce0c..a67b06178 100644 --- a/src/cpu/core/LBM/IncompressibleCumulantLBMKernel.h +++ b/src/cpu/core/LBM/K16IncompressibleNavierStokes.h @@ -1,7 +1,7 @@ //Cascaded Cumulant LBM -#ifndef IncompressibleCumulantLBMKernel_H -#define IncompressibleCumulantLBMKernel_H +#ifndef K16IncompressibleNavierStokes_H +#define K16IncompressibleNavierStokes_H #include "LBMKernel.h" #include "BCSet.h" @@ -13,14 +13,14 @@ //! \brief Cascaded Cumulant LBM kernel. //! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model //! \author K. Kutscher, M. Geier -class IncompressibleCumulantLBMKernel : public LBMKernel +class K16IncompressibleNavierStokes : public LBMKernel { public: //! This option set relaxation parameter: NORMAL enum Parameter{NORMAL, MAGIC}; public: - IncompressibleCumulantLBMKernel(); - ~IncompressibleCumulantLBMKernel() override; + K16IncompressibleNavierStokes(); + ~K16IncompressibleNavierStokes() override; void calculate(int step) override; SPtr<LBMKernel> clone() override; real getCalculationTime() override; diff --git a/src/cpu/core/LBM/LBMKernelETD3Q27BGK.cpp b/src/cpu/core/LBM/LBMKernelETD3Q27BGK.cpp deleted file mode 100644 index a154ee477..000000000 --- a/src/cpu/core/LBM/LBMKernelETD3Q27BGK.cpp +++ /dev/null @@ -1,303 +0,0 @@ -#include "LBMKernelETD3Q27BGK.h" -#include "D3Q27System.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include "D3Q27EsoTwist3DSoA.h" -#include "DataSet3D.h" -#include "BCSet.h" -#include "BCArray3D.h" -#include "basics/constants/NumericConstants.h" - -using namespace vf::basics::constant; -//using namespace UbMath; - -//#define PROOF_CORRECTNESS - - -////////////////////////////////////////////////////////////////////////// -LBMKernelETD3Q27BGK::LBMKernelETD3Q27BGK() -{ - this->compressible = false; -} -////////////////////////////////////////////////////////////////////////// -LBMKernelETD3Q27BGK::~LBMKernelETD3Q27BGK(void) -= default; -////////////////////////////////////////////////////////////////////////// -void LBMKernelETD3Q27BGK::initDataSet() -{ - SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.9)); - dataSet->setFdistributions(d); -} -////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> LBMKernelETD3Q27BGK::clone() -{ - SPtr<LBMKernel> kernel(new LBMKernelETD3Q27BGK()); - std::dynamic_pointer_cast<LBMKernelETD3Q27BGK>(kernel)->initDataSet(); - kernel->setCollisionFactor(this->collFactor); - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - return kernel; -} -////////////////////////////////////////////////////////////////////////// -void LBMKernelETD3Q27BGK::calculate(int /*step*/) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - //initializing of forcing stuff - if (withForcing) - { - muForcingX1.DefineVar("x1",&muX1); muForcingX1.DefineVar("x2",&muX2); muForcingX1.DefineVar("x3",&muX3); - muForcingX2.DefineVar("x1",&muX1); muForcingX2.DefineVar("x2",&muX2); muForcingX2.DefineVar("x3",&muX3); - muForcingX3.DefineVar("x1",&muX1); muForcingX3.DefineVar("x2",&muX2); muForcingX3.DefineVar("x3",&muX3); - forcingX1 = c0o1; - forcingX2 = c0o1; - forcingX3 = c0o1; - } - ///////////////////////////////////// - - localDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - nonLocalDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); - zeroDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - real f[D3Q27System::ENDF+1]; - real feq[D3Q27System::ENDF+1]; - real drho,vx1,vx2,vx3; - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1-ghostLayerWidth; - int maxX2 = bcArrayMaxX2-ghostLayerWidth; - int maxX3 = bcArrayMaxX3-ghostLayerWidth; - - 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)) - { - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - ////////////////////////////////////////////////////////////////////////// - //read distribution - //////////////////////////////////////////////////////////////////////////// - f[d000] = (*this->zeroDistributions)(x1,x2,x3); - - f[dP00] = (*this->localDistributions)(D3Q27System::ET_E, x1,x2,x3); - f[d0P0] = (*this->localDistributions)(D3Q27System::ET_N,x1,x2,x3); - f[d00P] = (*this->localDistributions)(D3Q27System::ET_T,x1,x2,x3); - f[dPP0] = (*this->localDistributions)(D3Q27System::ET_NE,x1,x2,x3); - f[dMP0] = (*this->localDistributions)(D3Q27System::ET_NW,x1p,x2,x3); - f[dP0P] = (*this->localDistributions)(D3Q27System::ET_TE,x1,x2,x3); - f[dM0P] = (*this->localDistributions)(D3Q27System::ET_TW, x1p,x2,x3); - f[d0PP] = (*this->localDistributions)(D3Q27System::ET_TN,x1,x2,x3); - f[d0MP] = (*this->localDistributions)(D3Q27System::ET_TS,x1,x2p,x3); - f[dPPP] = (*this->localDistributions)(D3Q27System::ET_TNE,x1,x2,x3); - f[dMPP] = (*this->localDistributions)(D3Q27System::ET_TNW,x1p,x2,x3); - f[dPMP] = (*this->localDistributions)(D3Q27System::ET_TSE,x1,x2p,x3); - f[dMMP] = (*this->localDistributions)(D3Q27System::ET_TSW,x1p,x2p,x3); - - f[dM00] = (*this->nonLocalDistributions)(D3Q27System::ET_W,x1p,x2,x3 ); - f[d0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,x2p,x3 ); - f[d00M] = (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,x2,x3p ); - f[dMM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1p,x2p,x3 ); - f[dPM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,x2p,x3 ); - f[dM0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1p,x2,x3p ); - f[dP0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,x2,x3p ); - f[d0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,x2p,x3p ); - f[d0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,x2,x3p ); - f[dMMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1p,x2p,x3p); - f[dPMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,x2p,x3p); - f[dMPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1p,x2,x3p); - f[dPPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,x2,x3p); - ////////////////////////////////////////////////////////////////////////// - - drho = f[d000] + f[dP00] + f[dM00] + f[d0P0] + f[d0M0] + f[d00P] + f[d00M] - + f[dPP0] + f[dMM0] + f[dPM0] + f[dMP0] + f[dP0P] + f[dM0M] + f[dP0M] - + f[dM0P] + f[d0PP] + f[d0MM] + f[d0PM] + f[d0MP] + f[dPPP] + f[dMMP] - + f[dPMP] + f[dMPP] + f[dPPM] + f[dMMM] + f[dPMM] + f[dMPM]; - - vx1 = f[dP00] - f[dM00] + f[dPP0] - f[dMM0] + f[dPM0] - f[dMP0] + f[dP0P] - f[dM0M] - + f[dP0M] - f[dM0P] + f[dPPP] - f[dMMP] + f[dPMP] - f[dMPP] + f[dPPM] - f[dMMM] - + f[dPMM] - f[dMPM]; - - vx2 = f[d0P0] - f[d0M0] + f[dPP0] - f[dMM0] - f[dPM0] + f[dMP0] + f[d0PP] - f[d0MM] + f[d0PM] - - f[d0MP] + f[dPPP] - f[dMMP] - f[dPMP] + f[dMPP] + f[dPPM] - f[dMMM] - f[dPMM] - + f[dMPM]; - - vx3 = f[d00P] - f[d00M] + f[dP0P] - f[dM0M] - f[dP0M] + f[dM0P] + f[d0PP] - f[d0MM] - f[d0PM] - + f[d0MP] + f[dPPP] + f[dMMP] + f[dPMP] + f[dMPP] - f[dPPM] - f[dMMM] - f[dPMM] - - f[dMPM]; - - real cu_sq= c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - - feq[d000] = c8o27*(drho-cu_sq); - feq[dP00] = c2o27*(drho+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); - feq[dM00] = c2o27*(drho+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); - feq[d0P0] = c2o27*(drho+c3o1*( vx2)+c9o2*( vx2)*( vx2)-cu_sq); - feq[d0M0] = c2o27*(drho+c3o1*( -vx2)+c9o2*( -vx2)*( -vx2)-cu_sq); - feq[d00P] = c2o27*(drho+c3o1*( vx3 )+c9o2*( vx3)*( vx3)-cu_sq); - feq[d00M] = c2o27*(drho+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - feq[dPP0] = c1o54*(drho+c3o1*( vx1+vx2)+c9o2*( vx1+vx2)*( vx1+vx2)-cu_sq); - feq[dMM0] = c1o54*(drho+c3o1*(-vx1-vx2)+c9o2*(-vx1-vx2)*(-vx1-vx2)-cu_sq); - feq[dPM0] = c1o54*(drho+c3o1*( vx1-vx2)+c9o2*( vx1-vx2)*( vx1-vx2)-cu_sq); - feq[dMP0] = c1o54*(drho+c3o1*(-vx1+vx2)+c9o2*(-vx1+vx2)*(-vx1+vx2)-cu_sq); - feq[dP0P] = c1o54*(drho+c3o1*( vx1+vx3)+c9o2*( vx1+vx3)*( vx1+vx3)-cu_sq); - feq[dM0M] = c1o54*(drho+c3o1*(-vx1-vx3)+c9o2*(-vx1-vx3)*(-vx1-vx3)-cu_sq); - feq[dP0M] = c1o54*(drho+c3o1*( vx1-vx3)+c9o2*( vx1-vx3)*( vx1-vx3)-cu_sq); - feq[dM0P] = c1o54*(drho+c3o1*(-vx1+vx3)+c9o2*(-vx1+vx3)*(-vx1+vx3)-cu_sq); - feq[d0PP] = c1o54*(drho+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - feq[d0MM] = c1o54*(drho+c3o1*(-vx2-vx3)+c9o2*(-vx2-vx3)*(-vx2-vx3)-cu_sq); - feq[d0PM] = c1o54*(drho+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - feq[d0MP] = c1o54*(drho+c3o1*(-vx2+vx3)+c9o2*(-vx2+vx3)*(-vx2+vx3)-cu_sq); - feq[dPPP]= c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - feq[dMMM]= c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - feq[dPPM]= c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - feq[dMMP]= c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - feq[dPMP]= c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - feq[dMPM]= c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - feq[dPMM]= c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - feq[dMPP]= c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - - //Relaxation - f[d000] += (feq[d000]-f[d000])*collFactor; - f[dP00] += (feq[dP00]-f[dP00])*collFactor; - f[dM00] += (feq[dM00]-f[dM00])*collFactor; - f[d0P0] += (feq[d0P0]-f[d0P0])*collFactor; - f[d0M0] += (feq[d0M0]-f[d0M0])*collFactor; - f[d00P] += (feq[d00P]-f[d00P])*collFactor; - f[d00M] += (feq[d00M]-f[d00M])*collFactor; - f[dPP0] += (feq[dPP0]-f[dPP0])*collFactor; - f[dMM0] += (feq[dMM0]-f[dMM0])*collFactor; - f[dPM0] += (feq[dPM0]-f[dPM0])*collFactor; - f[dMP0] += (feq[dMP0]-f[dMP0])*collFactor; - f[dP0P] += (feq[dP0P]-f[dP0P])*collFactor; - f[dM0M] += (feq[dM0M]-f[dM0M])*collFactor; - f[dP0M] += (feq[dP0M]-f[dP0M])*collFactor; - f[dM0P] += (feq[dM0P]-f[dM0P])*collFactor; - f[d0PP] += (feq[d0PP]-f[d0PP])*collFactor; - f[d0MM] += (feq[d0MM]-f[d0MM])*collFactor; - f[d0PM] += (feq[d0PM]-f[d0PM])*collFactor; - f[d0MP] += (feq[d0MP]-f[d0MP])*collFactor; - - f[dPPP] += (feq[dPPP]-f[dPPP])*collFactor; - f[dMMM] += (feq[dMMM]-f[dMMM])*collFactor; - f[dPPM] += (feq[dPPM]-f[dPPM])*collFactor; - f[dMMP] += (feq[dMMP]-f[dMMP])*collFactor; - f[dPMP] += (feq[dPMP]-f[dPMP])*collFactor; - f[dMPM] += (feq[dMPM]-f[dMPM])*collFactor; - f[dPMM] += (feq[dPMM]-f[dPMM])*collFactor; - f[dMPP] += (feq[dMPP]-f[dMPP])*collFactor; - - ////////////////////////////////////////////////////////////////////////// - //forcing - if (withForcing) - { - muX1 = x1+ix1*bcArrayMaxX1; - muX2 = x2+ix2*bcArrayMaxX2; - muX3 = x3+ix3*bcArrayMaxX3; - - forcingX1 = muForcingX1.Eval(); - forcingX2 = muForcingX2.Eval(); - forcingX3 = muForcingX3.Eval(); - - f[d000] += c0o1; - f[dP00] += c3o1*c2o27 * (forcingX1) ; - f[dM00] += c3o1*c2o27 * (-forcingX1) ; - f[d0P0] += c3o1*c2o27 * (forcingX2) ; - f[d0M0] += c3o1*c2o27 * (-forcingX2) ; - f[d00P] += c3o1*c2o27 * (forcingX3) ; - f[d00M] += c3o1*c2o27 * (-forcingX3); - f[dPP0] += c3o1*c1o54 * ( forcingX1+forcingX2 ) ; - f[dMM0 ] += c3o1*c1o54 * (-forcingX1-forcingX2 ) ; - f[dPM0 ] += c3o1*c1o54 * ( forcingX1-forcingX2 ) ; - f[dMP0 ] += c3o1*c1o54 * (-forcingX1+forcingX2 ) ; - f[dP0P ] += c3o1*c1o54 * ( forcingX1 +forcingX3) ; - f[dM0M ] += c3o1*c1o54 * (-forcingX1 -forcingX3) ; - f[dP0M ] += c3o1*c1o54 * ( forcingX1 -forcingX3) ; - f[dM0P ] += c3o1*c1o54 * (-forcingX1 +forcingX3) ; - f[d0PP ] += c3o1*c1o54 * ( forcingX2+forcingX3) ; - f[d0MM ] += c3o1*c1o54 * ( -forcingX2-forcingX3) ; - f[d0PM ] += c3o1*c1o54 * ( forcingX2-forcingX3) ; - f[d0MP ] += c3o1*c1o54 * ( -forcingX2+forcingX3) ; - f[dPPP] += c3o1*c1o216* ( forcingX1+forcingX2+forcingX3) ; - f[dMMM] += c3o1*c1o216* (-forcingX1-forcingX2-forcingX3) ; - f[dPPM] += c3o1*c1o216* ( forcingX1+forcingX2-forcingX3) ; - f[dMMP] += c3o1*c1o216* (-forcingX1-forcingX2+forcingX3) ; - f[dPMP] += c3o1*c1o216* ( forcingX1-forcingX2+forcingX3) ; - f[dMPM] += c3o1*c1o216* (-forcingX1+forcingX2-forcingX3) ; - f[dPMM] += c3o1*c1o216* ( forcingX1-forcingX2-forcingX3) ; - f[dMPP] += c3o1*c1o216* (-forcingX1+forcingX2+forcingX3) ; - } - ////////////////////////////////////////////////////////////////////////// -#ifdef PROOF_CORRECTNESS - real rho_post = f[REST] + f[dP00] + f[W] + f[N] + f[S] + f[T] + f[B] - + f[NE] + f[SW] + f[SE] + f[NW] + f[TE] + f[BW] + f[BE] - + f[TW] + f[TN] + f[BS] + f[BN] + f[TS] + f[TNE] + f[TSW] - + f[TSE] + f[TNW] + f[BNE] + f[BSW] + f[BSE] + f[BNW]; - real dif = drho - rho_post; -#ifdef SINGLEPRECISION - if(dif > 10.0E-7 || dif < -10.0E-7) -#else - if(dif > 10.0E-15 || dif < -10.0E-15) -#endif - { - UB_THROW(UbException(UB_EXARGS,"rho is not correct")); - } -#endif - ////////////////////////////////////////////////////////////////////////// - //write distribution - ////////////////////////////////////////////////////////////////////////// - (*this->localDistributions)(D3Q27System::ET_E,x1, x2, x3) = f[iP00]; - (*this->localDistributions)(D3Q27System::ET_N,x1, x2, x3) = f[i0P0]; - (*this->localDistributions)(D3Q27System::ET_T,x1, x2, x3) = f[i00P]; - (*this->localDistributions)(D3Q27System::ET_NE,x1, x2, x3) = f[iPP0]; - (*this->localDistributions)(D3Q27System::ET_NW,x1p,x2, x3) = f[iMP0]; - (*this->localDistributions)(D3Q27System::ET_TE,x1, x2, x3) = f[iP0P]; - (*this->localDistributions)(D3Q27System::ET_TW,x1p,x2, x3) = f[iM0P]; - (*this->localDistributions)(D3Q27System::ET_TN,x1, x2, x3) = f[i0PP]; - (*this->localDistributions)(D3Q27System::ET_TS,x1, x2p,x3) = f[i0MP]; - (*this->localDistributions)(D3Q27System::ET_TNE,x1, x2, x3) = f[iPPP]; - (*this->localDistributions)(D3Q27System::ET_TNW,x1p,x2, x3) = f[iMPP]; - (*this->localDistributions)(D3Q27System::ET_TSE,x1, x2p,x3) = f[iPMP]; - (*this->localDistributions)(D3Q27System::ET_TSW,x1p,x2p,x3) = f[iMMP]; - - (*this->nonLocalDistributions)(D3Q27System::ET_W,x1p,x2, x3 ) = f[iM00 ]; - (*this->nonLocalDistributions)(D3Q27System::ET_S,x1, x2p,x3 ) = f[i0M0 ]; - (*this->nonLocalDistributions)(D3Q27System::ET_B,x1, x2, x3p ) = f[i00M ]; - (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1p,x2p,x3 ) = f[iMM0]; - (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1, x2p,x3 ) = f[iPM0]; - (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1p,x2, x3p ) = f[iM0M]; - (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1, x2, x3p ) = f[iP0M]; - (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1, x2p,x3p ) = f[i0MM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1, x2, x3p ) = f[i0PM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1p,x2p,x3p) = f[iMMM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1, x2p,x3p) = f[iPMM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1p,x2, x3p) = f[iMPM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1, x2, x3p) = f[iPPM]; - - (*this->zeroDistributions)(x1,x2,x3) = f[d000]; - ////////////////////////////////////////////////////////////////////////// - - - } - } - } - } -} -////////////////////////////////////////////////////////////////////////// -real LBMKernelETD3Q27BGK::getCalculationTime() -{ - return c0o1; -} diff --git a/src/cpu/core/LBM/LBMKernelETD3Q27BGK.h b/src/cpu/core/LBM/LBMKernelETD3Q27BGK.h deleted file mode 100644 index c02725698..000000000 --- a/src/cpu/core/LBM/LBMKernelETD3Q27BGK.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef LBMKERNELETD3Q27BGK_H -#define LBMKERNELETD3Q27BGK_H - -#include "LBMKernel.h" -#include "basics/container/CbArray4D.h" -#include "basics/container/CbArray3D.h" - - - -class LBMKernelETD3Q27BGK : public LBMKernel -{ -public: - LBMKernelETD3Q27BGK(); - ~LBMKernelETD3Q27BGK() override; - void calculate(int step)override; - SPtr<LBMKernel> clone()override; - real getCalculationTime() override; - -private: - void initDataSet(); - //void collideAllCompressible(); - //void collideAllIncompressible(); - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributions; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributions; - - mu::value_type muX1,muX2,muX3; - real forcingX1; - real forcingX2; - real forcingX3; - - -}; - -#endif diff --git a/src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.cpp b/src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.cpp deleted file mode 100644 index e3e058b28..000000000 --- a/src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.cpp +++ /dev/null @@ -1,241 +0,0 @@ -#include "InitDistributionsFromFileBlockVisitor.h" -#include "BCArray3D.h" -#include "BCSet.h" -#include "Block3D.h" -#include "DataSet3D.h" -#include "EsoTwist3D.h" -#include "Grid3D.h" -#include "D3Q27System.h" -#include "InitDensityLBMKernel.h" -#include "LBMKernel.h" -#include <basics/utilities/UbFileInputASCII.h> - -InitDistributionsFromFileBlockVisitor::InitDistributionsFromFileBlockVisitor(/*LBMReal nu, */ real rho, - std::string filename) - : Block3DVisitor(0, D3Q27System::MAXLEVEL), /*nu(nu),*/ rho(rho) -{ - UbFileInputASCII in(filename); - if (!in) { - throw UbException(UB_EXARGS, "could not open file " + filename); - } - - int nodesX1 = in.readInteger(); - int nodesX2 = in.readInteger(); - int nodesX3 = in.readInteger(); - - matrix = CbArray4D<real, IndexerX4X3X2X1>(3, nodesX1, nodesX2, nodesX3, 0); - - for (int x3 = 0; x3 < nodesX3; x3++) - for (int x2 = 0; x2 < nodesX2; x2++) - for (int x1 = 0; x1 < nodesX1; x1++) { - // for (int x1 = 0; x1<nodesX1; x1++) - // for (int x2 = 0; x2<nodesX2; x2++) - // for (int x3 = 0; x3<nodesX3; x3++) - // { - matrix(Vx1, x1, x2, x3) = in.readDouble(); - matrix(Vx2, x1, x2, x3) = in.readDouble(); - matrix(Vx3, x1, x2, x3) = in.readDouble(); - } -} - -////////////////////////////////////////////////////////////////////////// -void InitDistributionsFromFileBlockVisitor::visit(const SPtr<Grid3D> grid, SPtr<Block3D> block) -{ - using namespace D3Q27System; - - if (!block) - UB_THROW(UbException(UB_EXARGS, "block is not exist")); - - // UbTupleDouble3 blockLengths = grid->getBlockLengths(block); - // UbTupleDouble3 nodeOffset = grid->getNodeOffset(block); - // double dx = grid->getDeltaX(block); - // LBMReal o = LBMSystem::calcCollisionFactor(nu, block->getLevel()); - - // Funktionszeiger - typedef void (*CalcFeqsFct)(real *const & /*feq[27]*/, const real & /*(d)rho*/, const real & /*vx1*/, - const real & /*vx2*/, const real & /*vx3*/); - CalcFeqsFct calcFeqsFct = NULL; - - real vx1, vx2, vx3; - - int gridRank = grid->getRank(); - int blockRank = block->getRank(); - - if (blockRank == gridRank && block->isActive()) { - SPtr<ILBMKernel> kernel = block->getKernel(); - if (!kernel) - throw UbException(UB_EXARGS, "The LBM kernel isn't exist in block: " + block->toString()); - - if (kernel->getCompressible()) - calcFeqsFct = &D3Q27System::calcCompFeq; - else - calcFeqsFct = &D3Q27System::calcIncompFeq; - - // UbTupleDouble3 org = grid->getBlockWorldCoordinates(block); - - SPtr<BCArray3D> bcArray = kernel->getBCSet()->getBCArray(); - SPtr<EsoTwist3D> distributions = dynamicPointerCast<EsoTwist3D>(kernel->getDataSet()->getFdistributions()); - - real f[D3Q27System::ENDF + 1]; - - // size_t nx1 = distributions->getNX1(); - // size_t nx2 = distributions->getNX2(); - // size_t nx3 = distributions->getNX3(); - - int minX1 = 0; - int minX2 = 0; - // int minX3 = 0; - - int maxX1 = (int)bcArray->getNX1(); - int maxX2 = (int)bcArray->getNX2(); - int maxX3 = (int)bcArray->getNX3(); - - int maxMX1 = (int)matrix.getNX2(); - int maxMX2 = (int)matrix.getNX3(); - int maxMX3 = (int)matrix.getNX4(); - - int blockix1 = block->getX1(); - int blockix2 = block->getX2(); - int blockix3 = block->getX3(); - - UbTupleInt3 blockNx = grid->getBlockNX(); - - for (int ix3 = minX1; ix3 < maxX3; ix3++) - for (int ix2 = minX2; ix2 < maxX2; ix2++) - for (int ix1 = minX1; ix1 < maxX1; ix1++) { - int x1 = blockix1 * val<1>(blockNx) + ix1 - 1; - int x2 = blockix2 * val<2>(blockNx) + ix2 - 1; - int x3 = blockix3 * val<3>(blockNx) + ix3 - 1; - - if (x1 == -1) { - x1 = maxMX1 - 1; - } - if (x2 == -1) { - x2 = maxMX2 - 1; - } - if (x3 == -1) { - x3 = maxMX3 - 1; - } - - if (x1 == maxMX1) { - x1 = 1; - } - if (x2 == maxMX2) { - x2 = 1; - } - if (x3 == maxMX3) { - x3 = 1; - } - - vx1 = matrix(Vx1, x1, x2, x3); - vx2 = matrix(Vx2, x1, x2, x3); - vx3 = matrix(Vx3, x1, x2, x3); - - // int x1p, x2p, x3p; - - ////x-derivative - // if (x1+1 >= maxMX1) x1p = x1; - // else x1p = x1+1; - // double vx1Plusx1 = matrix(Vx1, x1p, x2, x3); - // double vx2Plusx1 = matrix(Vx2, x1p, x2, x3); - // double vx3Plusx1 = matrix(Vx3, x1p, x2, x3); - - // if (x1-1 < minX1) x1p = x1; - // else x1p = x1-1; - // double vx1Minusx1 = matrix(Vx1, x1p, x2, x3); - // double vx2Minusx1 = matrix(Vx2, x1p, x2, x3); - // double vx3Minusx1 = matrix(Vx3, x1p, x2, x3); - - ////y-derivative - // if (x2+1 >= maxMX2) x2p = x2; - // else x2p = x2+1; - // double vx1Plusx2 = matrix(Vx1, x1, x2p, x3); - // double vx2Plusx2 = matrix(Vx2, x1, x2p, x3); - // double vx3Plusx2 = matrix(Vx3, x1, x2p, x3); - - // if (x2-1 < minX2) x2p = x2; - // else x2p = x2-1; - // double vx1Minusx2 = matrix(Vx1, x1, x2p, x3); - // double vx2Minusx2 = matrix(Vx2, x1, x2p, x3); - // double vx3Minusx2 = matrix(Vx3, x1, x2p, x3); - - ////z-derivative - // if (x3+1 >= maxMX3) x3p = x3; - // else x3p = x3+1; - // double vx1Plusx3 = matrix(Vx1, x1, x2, x3p); - // double vx2Plusx3 = matrix(Vx2, x1, x2, x3p); - // double vx3Plusx3 = matrix(Vx3, x1, x2, x3p); - - // if (x3-1 < minX3) x3p = x3; - // else x3p = x3-1; - // double vx1Minusx3 = matrix(Vx1, x1, x2, x3); - // double vx2Minusx3 = matrix(Vx2, x1, x2, x3); - // double vx3Minusx3 = matrix(Vx3, x1, x2, x3); - - // double ax = (vx1Plusx1 - vx1Minusx1) / (2.0); - // double bx = (vx2Plusx1 - vx2Minusx1) / (2.0); - // double cx = (vx3Plusx1 - vx3Minusx1) / (2.0); - - // double ay = (vx1Plusx2 - vx1Minusx2) / (2.0); - // double by = (vx2Plusx2 - vx2Minusx2) / (2.0); - // double cy = (vx3Plusx2 - vx3Minusx2) / (2.0); - - // double az = (vx1Plusx3 - vx1Minusx3) / (2.0); - // double bz = (vx2Plusx3 - vx2Minusx3) / (2.0); - // double cz = (vx3Plusx3 - vx3Minusx3) / (2.0); - // double eps_new = 1.0; - // LBMReal op = 1.; - - // LBMReal feq[27]; - - // calcFeqsFct(feq, rho, vx1, vx2, vx3); - - // double f_E = eps_new *((5.*ax*o + 5.*by*o + 5.*cz*o - 8.*ax*op + 4.*by*op + 4.*cz*op) / - // (54.*o*op)); double f_N = f_E + eps_new *((2.*(ax - by)) / (9.*o)); double f_T = f_E + eps_new - // *((2.*(ax - cz)) / (9.*o)); double f_NE = eps_new *(-(5.*cz*o + 3.*(ay + bx)*op - 2.*cz*op + - // ax*(5.*o + op) + by*(5.*o + op)) / (54.*o*op)); double f_SE = f_NE + eps_new *((ay + bx) / - // (9.*o)); double f_TE = eps_new *(-(5.*cz*o + by*(5.*o - 2.*op) + 3.*(az + cx)*op + cz*op + - // ax*(5.*o + op)) / (54.*o*op)); double f_BE = f_TE + eps_new *((az + cx) / (9.*o)); double f_TN = - // eps_new *(-(5.*ax*o + 5.*by*o + 5.*cz*o - 2.*ax*op + by*op + 3.*bz*op + 3.*cy*op + cz*op) / - // (54.*o*op)); double f_BN = f_TN + eps_new *((bz + cy) / (9.*o)); double f_ZERO = eps_new *((5.*(ax - // + by + cz)) / (9.*op)); double f_TNE = eps_new *(-(ay + az + bx + bz + cx + cy) / (72.*o)); double - // f_TSW = -eps_new *((ay + bx) / (36.*o)) - f_TNE; double f_TSE = -eps_new *((az + cx) / (36.*o)) - - // f_TNE; double f_TNW = -eps_new *((bz + cy) / (36.*o)) - f_TNE; - - // f[dP00] = f_E + feq[dP00]; - // f[W] = f_E + feq[W]; - // f[N] = f_N + feq[N]; - // f[S] = f_N + feq[S]; - // f[T] = f_T + feq[T]; - // f[B] = f_T + feq[B]; - // f[NE] = f_NE + feq[NE]; - // f[SW] = f_NE + feq[SW]; - // f[SE] = f_SE + feq[SE]; - // f[NW] = f_SE + feq[NW]; - // f[TE] = f_TE + feq[TE]; - // f[BW] = f_TE + feq[BW]; - // f[BE] = f_BE + feq[BE]; - // f[TW] = f_BE + feq[TW]; - // f[TN] = f_TN + feq[TN]; - // f[BS] = f_TN + feq[BS]; - // f[BN] = f_BN + feq[BN]; - // f[TS] = f_BN + feq[TS]; - // f[TNE] = f_TNE + feq[TNE]; - // f[TNW] = f_TNW + feq[TNW]; - // f[TSE] = f_TSE + feq[TSE]; - // f[TSW] = f_TSW + feq[TSW]; - // f[BNE] = f_TSW + feq[BNE]; - // f[BNW] = f_TSE + feq[BNW]; - // f[BSE] = f_TNW + feq[BSE]; - // f[BSW] = f_TNE + feq[BSW]; - // f[REST] = f_ZERO + feq[REST]; - - calcFeqsFct(f, rho, vx1, vx2, vx3); - - distributions->setPostCollisionDistribution(f, ix1, ix2, ix3); - distributions->setPreCollisionDistribution(f, ix1, ix2, ix3); - dynamicPointerCast<InitDensityLBMKernel>(kernel)->setVelocity(ix1, ix2, ix3, vx1, vx2, vx3); - } - } -} -////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.h b/src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.h deleted file mode 100644 index cc7acc395..000000000 --- a/src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef InitDistributionsFromFileBlockVisitor_h__ -#define InitDistributionsFromFileBlockVisitor_h__ - -#include "Block3DVisitor.h" -#include "LBMSystem.h" - -#include "CbArray4D.h" - -class Grid3D; -class Block3D; - -class InitDistributionsFromFileBlockVisitor : public Block3DVisitor -{ -public: - InitDistributionsFromFileBlockVisitor(/*real nu, */ real rho, std::string file); - - void visit(SPtr<Grid3D> grid, SPtr<Block3D> block) override; - -private: - CbArray4D<real, IndexerX4X3X2X1> matrix; - enum Velocity { Vx1, Vx2, Vx3 }; - // LBMReal nu; - real rho; -}; -#endif // InitDistributionsFromFileBlockVisitor_h__ -- GitLab