diff --git a/apps/cpu/HerschelBulkleySphere/hbsphere.cfg b/apps/cpu/HerschelBulkleySphere/hbsphere.cfg index 6397379534df15cd70170336e17f9496b81e3e8e..953f2c2872e2dff565438bc5d42aad24b0359e31 100644 --- a/apps/cpu/HerschelBulkleySphere/hbsphere.cfg +++ b/apps/cpu/HerschelBulkleySphere/hbsphere.cfg @@ -1,16 +1,18 @@ -outputPath = d:/temp/Herschel-BulkleySphere +outputPath = d:/temp/Herschel-Bulkley_sphere_MP_test numOfThreads = 4 availMem = 8e9 logToFile = false -blocknx = 50 50 50 -boundingBox = 150 50 50 #30*20=600**3=216000000 +blocknx = 25 25 25 +boundingBox = 250 50 50 #30*20=600**3=216000000 deltax = 1 refineLevel = 0 radius = 5 +sphereCenter = 25 25 25 + velocity = 1e-3 n = 0.9 Re = 1 diff --git a/apps/cpu/HerschelBulkleySphere/hbsphere.cpp b/apps/cpu/HerschelBulkleySphere/hbsphere.cpp index ff5451ac1e8773649fd7432ded66bfe8f561040b..4f7951a75174ad7b78d6d3621652b16a58ac6628 100644 --- a/apps/cpu/HerschelBulkleySphere/hbsphere.cpp +++ b/apps/cpu/HerschelBulkleySphere/hbsphere.cpp @@ -131,7 +131,8 @@ void bflow(string configname) SPtr<BCProcessor> bcProc; bcProc = SPtr<BCProcessor>(new BCProcessor()); - SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new HerschelBulkleyModelLBMKernel()); + SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyK17LBMKernel()); + //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new HerschelBulkleyModelLBMKernel()); //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new BinghamModelLBMKernel()); kernel->setBCProcessor(bcProc); //kernel->setForcingX1(forcing); @@ -329,11 +330,14 @@ void bflow(string configname) SPtr<CalculateForcesCoProcessor> fp = make_shared<CalculateForcesCoProcessor>(grid, forceSch, outputPath + "/forces/forces.txt", comm, velocity, area); fp->addInteractor(sphereInt); + SPtr<WriteThixotropyQuantitiesCoProcessor> writeThixotropicMQCoProcessor(new WriteThixotropyQuantitiesCoProcessor(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm)); + SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1)); SPtr<Calculator> calculator(new BasicCalculator(grid, stepGhostLayer, endTime)); calculator->addCoProcessor(npr); calculator->addCoProcessor(fp); calculator->addCoProcessor(writeMQCoProcessor); + calculator->addCoProcessor(writeThixotropicMQCoProcessor); calculator->addCoProcessor(restartCoProcessor); if (myid == 0) UBLOG(logINFO, "Simulation-start"); diff --git a/src/cpu/VirtualFluids.h b/src/cpu/VirtualFluids.h index de0a23aec7c213e1b2db235e4839c471da534c1d..2b4672355e8fce7dcd81a00ab3b98fb14ce74aa0 100644 --- a/src/cpu/VirtualFluids.h +++ b/src/cpu/VirtualFluids.h @@ -223,6 +223,7 @@ #include <LBM/BinghamModelLBMKernel.h> #include <LBM/HerschelBulkleyModelLBMKernel.h> #include <LBM/ThixotropyInterpolationProcessor.h> +#include <LBM/RheologyK17LBMKernel.h> #include <geometry3d/CoordinateTransformation3D.h> diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/WriteThixotropyQuantitiesCoProcessor.cpp b/src/cpu/VirtualFluidsCore/CoProcessors/WriteThixotropyQuantitiesCoProcessor.cpp index f1dca34741e4da3d3dab4d3b996b43e885ebf7ba..4ff7be254a6964f6ece23d209105a32c58938741 100644 --- a/src/cpu/VirtualFluidsCore/CoProcessors/WriteThixotropyQuantitiesCoProcessor.cpp +++ b/src/cpu/VirtualFluidsCore/CoProcessors/WriteThixotropyQuantitiesCoProcessor.cpp @@ -11,6 +11,7 @@ #include <numeric> #include "basics/writer/WbWriterVtkXmlASCII.h" #include "ThixotropyExpLBMKernel.h" +#include "Thixotropy.h" using namespace std; @@ -119,7 +120,8 @@ void WriteThixotropyQuantitiesCoProcessor::addDataMQ(SPtr<Block3D> block) //Diese Daten werden geschrieben: datanames.resize(0); - datanames.push_back("lambda"); + datanames.push_back("viscosity"); + //datanames.push_back("lambda"); //datanames.push_back("ShearRate"); //datanames.push_back("collFactor"); //datanames.push_back("Fluxx"); @@ -139,23 +141,23 @@ void WriteThixotropyQuantitiesCoProcessor::addDataMQ(SPtr<Block3D> block) SPtr<ILBMKernel> kernel = block->getKernel(); SPtr<BCArray3D> bcArray = kernel->getBCProcessor()->getBCArray(); SPtr<DistributionArray3D> distributionsF = kernel->getDataSet()->getFdistributions(); - SPtr<DistributionArray3D> distributionsH = kernel->getDataSet()->getHdistributions(); + //SPtr<DistributionArray3D> distributionsH = kernel->getDataSet()->getHdistributions(); //LBMReal collFactorF = staticPointerCast<ThixotropyExpLBMKernel>(kernel)->getCollisionFactorF(); LBMReal collFactor = kernel->getCollisionFactor(); LBMReal f[D3Q27System::ENDF + 1]; - LBMReal h[D3Q27System::ENDF + 1]; - LBMReal lambda, gammaDot; + //LBMReal h[D3Q27System::ENDF + 1]; + //LBMReal viscosity=0; // lambda, gammaDot; //knotennummerierung faengt immer bei 0 an! - unsigned int SWB, SEB, NEB, NWB, SWT, SET, NET, NWT; + int SWB, SEB, NEB, NWB, SWT, SET, NET, NWT; int minX1 = 0; int minX2 = 0; int minX3 = 0; - int maxX1 = (int)(distributionsH->getNX1()); - int maxX2 = (int)(distributionsH->getNX2()); - int maxX3 = (int)(distributionsH->getNX3()); + int maxX1 = (int)(distributionsF->getNX1()); + int maxX2 = (int)(distributionsF->getNX2()); + int maxX3 = (int)(distributionsF->getNX3()); //int minX1 = 1; //int minX2 = 1; @@ -187,25 +189,33 @@ void WriteThixotropyQuantitiesCoProcessor::addDataMQ(SPtr<Block3D> block) float(val<2>(org) - val<2>(nodeOffset) + ix2*dx), float(val<3>(org) - val<3>(nodeOffset) + ix3*dx))); - distributionsH->getDistribution(h, ix1, ix2, ix3); + //distributionsH->getDistribution(h, ix1, ix2, ix3); - lambda = D3Q27System::getDensity(h); + //lambda = D3Q27System::getDensity(h); - if (UbMath::isNaN(lambda) || UbMath::isInfinity(lambda) ) - UB_THROW(UbException(UB_EXARGS, "lambda is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" + block->toString() + - ", node=" + UbSystem::toString(ix1) + "," + UbSystem::toString(ix2) + "," + UbSystem::toString(ix3))); + //if (UbMath::isNaN(lambda) || UbMath::isInfinity(lambda) ) + // UB_THROW(UbException(UB_EXARGS, "lambda is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" + block->toString() + + // ", node=" + UbSystem::toString(ix1) + "," + UbSystem::toString(ix2) + "," + UbSystem::toString(ix3))); - distributionsF->getDistribution(f, ix1, ix2, ix3); - LBMReal rho = D3Q27System::getDensity(f); + //distributionsF->getDistribution(f, ix1, ix2, ix3); + //LBMReal rho = D3Q27System::getDensity(f); //gammaDot = BinghamModel::getShearRate(f, collFactor); //LBMReal collFactorF = collFactor - 1e-6 / (gammaDot + one * 1e-9); //collFactorF = (collFactorF < 0.5) ? 0.5 : collFactorF; - data[index++].push_back(lambda); + //data[index++].push_back(lambda); //data[index++].push_back(gammaDot); //data[index++].push_back(collFactorF); + + distributionsF->getDistribution(f, ix1, ix2, ix3); + LBMReal rho = D3Q27System::getDensity(f); + LBMReal shearRate = D3Q27System::getShearRate(f, collFactor); + LBMReal omega = Thixotropy::getHerschelBulkleyCollFactor(collFactor, shearRate, rho); + LBMReal viscosity = (omega == 0) ? 0 : c1o3 * (c1/omega-c1o2); + + data[index++].push_back(viscosity); } } } @@ -229,7 +239,7 @@ void WriteThixotropyQuantitiesCoProcessor::addDataMQ(SPtr<Block3D> block) && (NET = nodeNumbers(ix1 + 1, ix2 + 1, ix3 + 1)) >= 0 && (NWT = nodeNumbers(ix1, ix2 + 1, ix3 + 1)) >= 0) { - cells.push_back(makeUbTuple(SWB, SEB, NEB, NWB, SWT, SET, NET, NWT)); + cells.push_back(makeUbTuple((unsigned int)SWB, (unsigned int)SEB, (unsigned int)NEB, (unsigned int)NWB, (unsigned int)SWT, (unsigned int)SET, (unsigned int)NET, (unsigned int)NWT)); } } } diff --git a/src/cpu/VirtualFluidsCore/LBM/RheologyK17LBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/RheologyK17LBMKernel.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9287b99c5be35a1ea608c672e77a733242c4b550 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/LBM/RheologyK17LBMKernel.cpp @@ -0,0 +1,1088 @@ +#include "RheologyK17LBMKernel.h" +#include "D3Q27System.h" +#include "InterpolationProcessor.h" +#include "D3Q27EsoTwist3DSplittedVector.h" +#include <math.h> +#include "DataSet3D.h" +#include "LBMKernel.h" +#include "Block3D.h" +#include "Thixotropy.h" + +#define PROOF_CORRECTNESS + +////////////////////////////////////////////////////////////////////////// +RheologyK17LBMKernel::RheologyK17LBMKernel() +{ + this->compressible = true; + this->bulkViscosity = 0; + this->OxxPyyPzz = 1.0; +} +////////////////////////////////////////////////////////////////////////// +RheologyK17LBMKernel::~RheologyK17LBMKernel(void) +{ + +} +////////////////////////////////////////////////////////////////////////// +void RheologyK17LBMKernel::initDataSet() +{ + SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.9)); + dataSet->setFdistributions(d); +} +////////////////////////////////////////////////////////////////////////// +SPtr<LBMKernel> RheologyK17LBMKernel::clone() +{ + SPtr<LBMKernel> kernel(new RheologyK17LBMKernel()); + kernel->setNX(nx); + dynamicPointerCast<RheologyK17LBMKernel>(kernel)->initDataSet(); + kernel->setCollisionFactor(this->collFactor); + kernel->setBCProcessor(bcProcessor->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 = one; + } + + dynamicPointerCast<RheologyK17LBMKernel>(kernel)->OxxPyyPzz = this->OxxPyyPzz; + + return kernel; +} +////////////////////////////////////////////////////////////////////////// +void RheologyK17LBMKernel::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->getBCProcessor()->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; + + //magic parameter for rheology + LBMReal a = 10; + OxxPyyPzz = c1 / (a * ((c1 / omega) - c1o2) + c1o2); + + //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 = 8.0*(omega-2.0)*(OxxPyyPzz*(3.0*omega-1.0)-5.0*omega)/(8.0*(5.0-2.0*omega)*omega+OxxPyyPzz*(8.0+omega*(9.0*omega-26.0))); + LBMReal OxyyMxzz = 8.0*(omega-2.0)*(omega+OxxPyyPzz*(3.0*omega-7.0))/(OxxPyyPzz*(56.0-42.0*omega+9.0*omega*omega)-8.0*omega); + LBMReal Oxyz = 24.0*(omega-2.0)*(4.0*omega*omega+omega*OxxPyyPzz*(18.0-13.0*omega)+OxxPyyPzz*OxxPyyPzz*(2.0+omega*(6.0*omega-11.0)))/(16.0*omega*omega*(omega-6.0)-2.0*omega*OxxPyyPzz*(216.0+5.0*omega*(9.0*omega-46.0))+OxxPyyPzz*OxxPyyPzz*(omega*(3.0*omega-10.0)*(15.0*omega-28.0)-48.0)); + + //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); + + LBMReal A = (4.0*omega*omega+2.0*omega*OxxPyyPzz*(omega-6.0)+OxxPyyPzz*OxxPyyPzz*(omega*(10.0-3.0*omega)-4.0))/((omega-OxxPyyPzz)*(OxxPyyPzz*(2.0+3.0*omega)-8.0*omega)); + LBMReal B = (4.0*omega*OxxPyyPzz*(9.0*omega-16.0)-4.0*omega*omega-2.0*OxxPyyPzz*OxxPyyPzz*(2.0+9.0*omega*(omega-2.0)))/(3.0*(omega-OxxPyyPzz)*(OxxPyyPzz*(2.0+3.0*omega)-8.0*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 + + 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; + //////////////////////////////////////////////////////////////////////////////////// + + LBMReal collFactorF = collFactor; + + //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.01;// * 0.0001f; + LBMReal qudricLimitM = 0.01;// * 0.0001f; + LBMReal qudricLimitD = 0.01;// * 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 = 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. + ////////////////////////////// + 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; + + LBMReal Dxy =-three*omega*mfbba; + LBMReal Dxz =-three*omega*mfbab; + LBMReal Dyz =-three*omega*mfabb; + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //non Newtonian fluid collision factor + LBMReal shearRate = sqrt(dxux * dxux + dyuy * dyuy + dzuz * dzuz + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz) / (rho + one); + //collFactorF = getThyxotropyCollFactor(collFactorF, shearRate, rho); + collFactorF = Thixotropy::getHerschelBulkleyCollFactor(collFactorF, shearRate, drho); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + //relax + + wadjust = OxxPyyPzz+(one-OxxPyyPzz)*fabs((mfaaa-mxxPyyPzz))/(fabs((mfaaa-mxxPyyPzz))+qudricLimitD); + mxxPyyPzz += wadjust*(mfaaa-mxxPyyPzz)-three * (one-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)-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); + CUMacc = -O4*(one / omega - c1o2) * (dyuy + dzuz) * c2o3 * A + (one - O4) * (CUMacc); + CUMcac = -O4*(one / omega - c1o2) * (dxux + dzuz) * c2o3 * A + (one - O4) * (CUMcac); + CUMcca = -O4*(one / omega - c1o2) * (dyuy + dxux) * c2o3 * A + (one - O4) * (CUMcca); + CUMbbc = -O4*(one / omega - c1o2) * Dxy * c1o3 * B + (one - O4) * (CUMbbc); + CUMbcb = -O4*(one / omega - c1o2) * Dxz * c1o3 * B + (one - O4) * (CUMbcb); + CUMcbb = -O4*(one / omega - c1o2) * Dyz * c1o3 * B + (one - 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(); +} +////////////////////////////////////////////////////////////////////////// +double RheologyK17LBMKernel::getCalculationTime() +{ + //return timer.getDuration(); + return timer.getTotalTime(); +} +////////////////////////////////////////////////////////////////////////// +void RheologyK17LBMKernel::setBulkViscosity(LBMReal value) +{ + bulkViscosity = value; +} + +////////////////////////////////////////////////////////////////////////// +//void RheologyK17LBMKernel::setBulkOmegaToOmega(bool value) +//{ +// bulkOmegaToOmega = value; +//} + +//void RheologyK17LBMKernel::setViscosityFlag(bool vf) +//{ +// viscosityFlag = vf; +//} diff --git a/src/cpu/VirtualFluidsCore/LBM/RheologyK17LBMKernel.h b/src/cpu/VirtualFluidsCore/LBM/RheologyK17LBMKernel.h new file mode 100644 index 0000000000000000000000000000000000000000..03015cef8fe5d95725d6aedebc051d8ee4f46025 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/LBM/RheologyK17LBMKernel.h @@ -0,0 +1,51 @@ +#ifndef RheologyK17LBMKernel_h__ +#define RheologyK17LBMKernel_h__ + +#include "LBMKernel.h" +#include "BCProcessor.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 RheologyK17LBMKernel : public LBMKernel +{ +public: + //! This option set relaxation parameter: NORMAL + enum Parameter{NORMAL, MAGIC}; +public: + RheologyK17LBMKernel(); + virtual ~RheologyK17LBMKernel(void); + virtual void calculate(int step); + virtual SPtr<LBMKernel> clone(); + double getCalculationTime() override; + //! The value should not be equal to a shear viscosity + void setBulkViscosity(LBMReal value); +protected: + virtual void initDataSet(); + LBMReal f[D3Q27System::ENDF+1]; + + UbTimer timer; + + CbArray4D<LBMReal,IndexerX4X3X2X1>::CbArray4DPtr localDistributions; + CbArray4D<LBMReal,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions; + CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr zeroDistributions; + + mu::value_type muX1,muX2,muX3; + mu::value_type muDeltaT; + mu::value_type muNu; + LBMReal forcingX1; + LBMReal forcingX2; + LBMReal forcingX3; + + // bulk viscosity + LBMReal OxxPyyPzz; //omega2 (bulk viscosity) + LBMReal bulkViscosity; + +}; +#endif // RheologyK17LBMKernel_h__ + +