From 4e4d56c7870db17a0cbf8e7ade210bb00fcb6fc2 Mon Sep 17 00:00:00 2001 From: Kutscher <kutscher@irmb.tu-bs.de> Date: Tue, 18 Jul 2023 10:04:06 +0200 Subject: [PATCH] new setup for jet breakup benchmark --- apps/cpu/JetBreakup/JetBreakup.cfg | 37 ++-- apps/cpu/JetBreakup/JetBreakup.cpp | 265 ++++++++++++++++------------- 2 files changed, 160 insertions(+), 142 deletions(-) diff --git a/apps/cpu/JetBreakup/JetBreakup.cfg b/apps/cpu/JetBreakup/JetBreakup.cfg index eef35c305..abc2436d3 100644 --- a/apps/cpu/JetBreakup/JetBreakup.cfg +++ b/apps/cpu/JetBreakup/JetBreakup.cfg @@ -1,28 +1,21 @@ -pathname = f:/Multiphase/JetBreakupCaseCSThreeNonConservativePressShortCorrPhaseOutflow1 -#pathGeo = d:/Projects/VirtualFluids-Multiphase/source/Applications/Multiphase/backup -pathGeo = d:/Projects/VirtualFluidsCombined/apps/cpu/Multiphase/backup -#geoFile = JetBreakupR.ASCII.stl -#geoFile = inlet1.stl -geoFile = tubeTransformed.stl - -numOfThreads = 16 +pathname = D:/temp/JetBreakupSharpInterfaceShortTest3 +pathGeo = d:/Projects/TRR277/Project/WP2/JetBreakup + +numOfThreads = 18 availMem = 10e9 #Grid blocknx = 25 25 25 +factorLx = 2.0 +factorLy = 2.5 +factorLz = 2.5 + #Simulation case = 3 -U_LB = 0.01 #inlet velocity -#uF2 = 0.0001 -#Re = 10 -#nuL =0.00016922169811320757# 1.0e-5 #!1e-2 -#nuG =0.00016922169811320757# 1.16e-4 #!1e-2 -#densityRatio = 24.579710144927535 -#sigma = 1.7688679245283022e-07 -interfaceWidth = 5 - -D = 0.0001 # m +U_LB = 0.003 #inlet velocity +interfaceWidth = 3 +D = 10 #0.0001 # m D_LB = 50 contactAngle = 110.0 @@ -35,10 +28,10 @@ Mobility = 0.02 # 0.01 ./. 0.08, fine correction of Phase-field Relaxation param logToFile = false newStart = true -restartStep = 100000 +restartStep = 10000 -cpStart = 100000 -cpStep = 100000 +cpStart = 10000 +cpStep = 10000 -outTime = 1 #205 +outTime = 100 endTime = 100000#36000 \ No newline at end of file diff --git a/apps/cpu/JetBreakup/JetBreakup.cpp b/apps/cpu/JetBreakup/JetBreakup.cpp index 8e2f58b14..a408938b0 100644 --- a/apps/cpu/JetBreakup/JetBreakup.cpp +++ b/apps/cpu/JetBreakup/JetBreakup.cpp @@ -3,6 +3,7 @@ #include <string> #include "MultiphaseFlow/MultiphaseFlow.h" +#include "NonNewtonianFluids/NonNewtonianFluids.h" #include "VirtualFluids.h" using namespace std; @@ -23,20 +24,11 @@ void run(string configname) config.load(configname); string pathname = config.getValue<string>("pathname"); - // string pathGeo = config.getValue<string>("pathGeo"); - // string geoFile = config.getValue<string>("geoFile"); + string pathGeo = config.getValue<string>("pathGeo"); int numOfThreads = config.getValue<int>("numOfThreads"); vector<int> blocknx = config.getVector<int>("blocknx"); - // vector<double> boundingBox = config.getVector<double>("boundingBox"); - // vector<double> length = config.getVector<double>("length"); real U_LB = config.getValue<real>("U_LB"); - // double uF2 = config.getValue<double>("uF2"); - // double nuL = config.getValue<double>("nuL"); - // double nuG = config.getValue<double>("nuG"); - // double densityRatio = config.getValue<double>("densityRatio"); - // double sigma = config.getValue<double>("sigma"); int interfaceWidth = config.getValue<int>("interfaceWidth"); - // double D = config.getValue<double>("D"); real theta = config.getValue<real>("contactAngle"); real D_LB = config.getValue<real>("D_LB"); real phiL = config.getValue<real>("phi_L"); @@ -47,8 +39,6 @@ void run(string configname) real endTime = config.getValue<real>("endTime"); real outTime = config.getValue<real>("outTime"); real availMem = config.getValue<real>("availMem"); - // int refineLevel = config.getValue<int>("refineLevel"); - // double Re = config.getValue<double>("Re"); bool logToFile = config.getValue<bool>("logToFile"); real restartStep = config.getValue<real>("restartStep"); @@ -58,6 +48,11 @@ void run(string configname) int caseN = config.getValue<int>("case"); + real factorLx = config.getValue<real>("factorLx"); + real factorLy = config.getValue<real>("factorLy"); + real factorLz = config.getValue<real>("factorLz"); + + SPtr<vf::mpi::Communicator> comm = vf::mpi::MPICommunicator::getInstance(); int myid = comm->getProcessID(); @@ -81,6 +76,7 @@ void run(string configname) // Sleep(30000); real rho_h = 0, rho_l = 0, r_rho = 0, mu_h = 0, /*mu_l,*/ Uo = 0, D = 0, sigma = 0; + real Dg = 10; switch (caseN) { case 1: @@ -134,6 +130,7 @@ void run(string configname) Uo = 200; // diameter of jet (m) D = 0.0001; + Dg = 10; // surface tension (N/m) sigma = 0.03; break; @@ -142,14 +139,14 @@ void run(string configname) real Re = rho_h * Uo * D / mu_h; real We = rho_h * Uo * Uo * D / sigma; - real dx = D / D_LB; + real dx = Dg / D_LB; real nu_h = U_LB * D_LB / Re; real nu_l = nu_h; - nu_h *= 100; + nu_h *= 0.1; real rho_h_LB = 1; // surface tension - real sigma_LB = rho_h_LB * U_LB * U_LB * D_LB / We; + real sigma_LB = 0.0; //rho_h_LB *U_LB *U_LB *D_LB / We; // LBMReal dLB = 0; // = length[1] / dx; real rhoLB = 0.0; @@ -158,6 +155,18 @@ void run(string configname) real beta = 12.0 * sigma_LB / interfaceWidth; real kappa = 1.5 * interfaceWidth * sigma_LB; + double tau0 = 715.218181094648*1000.; // Pa + double muConcrete = 2.1133054011798826; // [Pa s] + real u = Uo; //[m/s] + + + double Bm = (tau0 * D) / (muConcrete * u); + double tau0_LB = Bm *nu_h *U_LB / (D / dx); + + SPtr<Rheology> rheo = Rheology::getInstance(); + rheo->setYieldStress(tau0_LB); + + if (myid == 0) { UBLOG(logINFO, "Parameters:"); UBLOG(logINFO, "U_LB = " << U_LB); @@ -168,6 +177,8 @@ void run(string configname) UBLOG(logINFO, "We = " << We); UBLOG(logINFO, "dx = " << dx); UBLOG(logINFO, "sigma = " << sigma); + UBLOG(logINFO, "sigma_LB = " << sigma_LB); + UBLOG(logINFO, "tau0_LB = " << tau0_LB); UBLOG(logINFO, "density ratio = " << r_rho); // UBLOG(logINFO, "number of levels = " << refineLevel + 1); UBLOG(logINFO, "numOfThreads = " << numOfThreads); @@ -175,17 +186,22 @@ void run(string configname) } // bounding box + + real Lx = factorLx * Dg; + real Ly = factorLy * Dg; + real Lz = factorLz * Dg; + real g_minX1 = 0; - real g_minX2 = 0; - real g_minX3 = 0; + real g_minX2 = -0.5 * Ly; + real g_minX3 = -0.5 * Lz; // double g_maxX1 = 8.0*D; // double g_maxX2 = 2.5*D; // double g_maxX3 = 2.5*D; - real g_maxX1 = 2.0 * D; - real g_maxX2 = 2.5 * D; - real g_maxX3 = 2.5 * D; + real g_maxX1 = Lx; + real g_maxX2 = 0.5 * Ly; + real g_maxX3 = 0.5 * Lz; SPtr<LBMUnitConverter> conv(new LBMUnitConverter()); @@ -201,9 +217,9 @@ void run(string configname) // kernel = SPtr<LBMKernel>(new MultiphasePressureFilterLBMKernel()); // kernel = SPtr<LBMKernel>(new MultiphaseSimpleVelocityBaseExternalPressureLBMKernel()); kernel = make_shared<MultiphaseScaleDistributionLBMKernel>(); - //kernel = make_shared<MultiphaseSharpInterfaceLBMKernel>(); + //kernel = make_shared<MultiphaseSharpInterfaceLBMKernel>(); - kernel->setWithForcing(true); + kernel->setWithForcing(false); kernel->setForcingX1(0.0); kernel->setForcingX2(0.0); kernel->setForcingX3(0.0); @@ -259,7 +275,7 @@ void run(string configname) fctF1.SetExpr("vx1"); //fctF1.DefineConst("vx1", 0); fctF1.DefineConst("vx1", U_LB); - fctF1.DefineConst("R", 0.5*D); + fctF1.DefineConst("R", 0.5*Dg); fctF1.DefineConst("y0", (g_minX2+g_maxX2)/2); fctF1.DefineConst("z0", (g_minX3+g_maxX3)/2); SPtr<BC> velBCF1(new MultiphaseVelocityBC(true, false, false, fctF1, phiH, 0.0, BCFunction::INFCONST)); @@ -279,7 +295,10 @@ void run(string configname) noSlipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNoSlipBCStrategy())); SPtr<BC> denBC(new DensityBC(rhoLB)); - denBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNonReflectingOutflowBCStrategy())); + denBC->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy())); + + SPtr<BC> slipBC(new SlipBC()); + slipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseSlipBCStrategy())); mu::Parser fctPhi_F1; fctPhi_F1.SetExpr("phiH"); @@ -295,20 +314,23 @@ void run(string configname) velBCF1->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); velBCF2->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); + + ////////////////////////////////////////////////////////////////////////////////// // BC visitor MultiphaseBoundaryConditionsBlockVisitor bcVisitor; bcVisitor.addBC(noSlipBC); - //bcVisitor.addBC(denBC); // Ohne das BB? + //bcVisitor.addBC(slipBC); + bcVisitor.addBC(denBC); bcVisitor.addBC(velBCF1); - bcVisitor.addBC(velBCF2); + //bcVisitor.addBC(velBCF2); // SPtr<D3Q27Interactor> inflowF1Int; // SPtr<D3Q27Interactor> cylInt; SPtr<D3Q27Interactor> inflowInt; - if (newStart) { + //if (newStart) { // if (newStart) { @@ -334,12 +356,24 @@ void run(string configname) // GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname + "/geo/geoInflowF1", // WbWriterVtkXmlASCII::getInstance()); - GbCylinder3DPtr geoInflow(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2 / 2.0, g_maxX3 / 2.0, g_minX1, g_maxX2 / 2.0, g_maxX3 / 2.0, D / 2.0)); + //GbCylinder3DPtr geoInflow(new GbCylinder3D(g_minX1 - 2.0*dx, 0.0, 0.0, g_minX1, 0.0, 0.0, Dg / 2.0)); + + GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 + (g_maxX2 - g_minX2) / 3.0, g_minX3 + (g_maxX3 - g_minX3) / 3.0, g_minX1 + 2.0 * dx, g_maxX2 - (g_maxX2 - g_minX2) / 3.0, g_maxX3 - (g_maxX3 - g_minX3) / 3.0)); + if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname + "/geo/geoInflow", WbWriterVtkXmlASCII::getInstance()); - GbCylinder3DPtr geoSolid(new GbCylinder3D(g_minX1 - 2.0 * dx, g_maxX2 / 2.0, g_maxX3 / 2.0, g_minX1-dx, g_maxX2 / 2.0, g_maxX3 / 2.0, 1.5*D / 2.0)); + GbCylinder3DPtr geoSolid(new GbCylinder3D(g_minX1 - 2.0 * dx, g_maxX2 / 2.0, g_maxX3 / 2.0, g_minX1+2.0*dx, g_maxX2 / 2.0, g_maxX3 / 2.0, 1.5*D / 2.0)); if (myid == 0) GbSystem3D::writeGeoObject(geoSolid.get(), pathname + "/geo/geoSolid", WbWriterVtkXmlASCII::getInstance()); + SPtr<GbTriFaceMesh3D> meshInflowPipe = std::make_shared<GbTriFaceMesh3D>(); + if (myid == 0) UBLOG(logINFO, "Read meshInflowPipe:start"); + meshInflowPipe->readMeshFromSTLFileBinary(pathGeo + "/JetTube4.stl", false); + //meshInflowPipe->readMeshFromSTLFileASCII(pathGeo + "/JetTubeScaled5.stl", false); + if (myid == 0) UBLOG(logINFO, "Read meshInflowPipe:end"); + //meshInflowPipe->scale(1e-04, 1e-04, 1e-04); + if (myid == 0) GbSystem3D::writeGeoObject(meshInflowPipe.get(), pathname + "/geo/meshInflowPipe", WbWriterVtkXmlBinary::getInstance()); + SPtr<Interactor3D> intrInflowPipe = std::make_shared<D3Q27TriFaceMeshInteractor>(meshInflowPipe, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::POINTS); + // GbCylinder3DPtr cylinder2( // new GbCylinder3D(0.0, g_minX2 - 2.0 * dx / 2.0, 0.0, 0.0, g_minX2 + 4.0 * dx, 0.0, 8.0+2.0*dx)); // if (myid == 0) @@ -348,7 +382,7 @@ void run(string configname) // outflow // GbCuboid3DPtr geoOutflow(new GbCuboid3D(-1.0, -1, -1.0, 121.0, 1.0, 121.0)); // For JetBreakup (Original) // GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2 - 40 * dx, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_maxX2 + 2.0 * dx, g_maxX3)); + GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx)); if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); // double blockLength = blocknx[0] * dx; @@ -399,12 +433,29 @@ void run(string configname) SPtr<D3Q27Interactor> wallZmaxInt(new D3Q27Interactor(wallZmax, grid, noSlipBC, Interactor3D::SOLID)); SPtr<D3Q27Interactor> wallYminInt(new D3Q27Interactor(wallYmin, grid, noSlipBC, Interactor3D::SOLID)); SPtr<D3Q27Interactor> wallYmaxInt(new D3Q27Interactor(wallYmax, grid, noSlipBC, Interactor3D::SOLID)); - // SPtr<D3Q27Interactor> wallXminInt(new D3Q27Interactor(wallXmin, grid, noSlipBC, Interactor3D::SOLID)); - // SPtr<D3Q27Interactor> wallXmaxInt(new D3Q27Interactor(wallXmax, grid, noSlipBC, Interactor3D::SOLID)); - // SPtr<D3Q27Interactor> wallZminInt(new D3Q27Interactor(wallZmin, grid, noSlipBC, Interactor3D::SOLID)); - // SPtr<D3Q27Interactor> wallZmaxInt(new D3Q27Interactor(wallZmax, grid, noSlipBC, Interactor3D::SOLID)); - // SPtr<D3Q27Interactor> wallYminInt(new D3Q27Interactor(wallYmin, grid, noSlipBC, Interactor3D::SOLID)); - // SPtr<D3Q27Interactor> wallYmaxInt(new D3Q27Interactor(wallYmax, grid, noSlipBC, Interactor3D::SOLID)); + + +////////////////////////// + real inflowLength = 30; + GbCuboid3DPtr wallInfZmin(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_minX1 + inflowLength * dx, g_maxX2 + 2.0 * dx, g_minX3 + (g_maxX3 - g_minX3) / 3.0)); + GbSystem3D::writeGeoObject(wallInfZmin.get(), pathname + "/geo/wallInfZmin", WbWriterVtkXmlASCII::getInstance()); + GbCuboid3DPtr wallInfZmax(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_maxX3 - (g_maxX3 - g_minX3) / 3.0, g_minX1 + inflowLength * dx, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx)); + GbSystem3D::writeGeoObject(wallInfZmax.get(), pathname + "/geo/wallInfZmax", WbWriterVtkXmlASCII::getInstance()); + GbCuboid3DPtr wallInfYmin(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_minX1 + inflowLength * dx, g_minX2 + (g_maxX2 - g_minX2) / 3.0, g_maxX3)); + GbSystem3D::writeGeoObject(wallInfYmin.get(), pathname + "/geo/wallInfYmin", WbWriterVtkXmlASCII::getInstance()); + GbCuboid3DPtr wallInfYmax(new GbCuboid3D(g_minX1 - 2.0 * dx, g_maxX2 - (g_maxX2 - g_minX2) / 3.0, g_minX3 - 2.0 * dx, g_minX1 + inflowLength * dx, g_maxX2 + 2.0 * dx, g_maxX3)); + GbSystem3D::writeGeoObject(wallInfYmax.get(), pathname + "/geo/wallInfYmax", WbWriterVtkXmlASCII::getInstance()); + + // Add boundary conditions to grid generator + SPtr<D3Q27Interactor> wallInfZminInt(new D3Q27Interactor(wallInfZmin, grid, noSlipBC, Interactor3D::SOLID)); + SPtr<D3Q27Interactor> wallInfZmaxInt(new D3Q27Interactor(wallInfZmax, grid, noSlipBC, Interactor3D::SOLID)); + SPtr<D3Q27Interactor> wallInfYminInt(new D3Q27Interactor(wallInfYmin, grid, noSlipBC, Interactor3D::SOLID)); + SPtr<D3Q27Interactor> wallInfYmaxInt(new D3Q27Interactor(wallInfYmax, grid, noSlipBC, Interactor3D::SOLID)); +////////////////////////////////////// + + + + // cylInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(cylinder1, grid, velBCF1, Interactor3D::SOLID)); // cylInt->addBC(velBCF2); @@ -420,21 +471,28 @@ void run(string configname) SPtr<D3Q27Interactor> solidInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoSolid, grid, noSlipBC, Interactor3D::SOLID)); + InteractorsHelper intHelper(grid, metisVisitor, true); //intHelper.addInteractor(cylInt); //intHelper.addInteractor(tubes); //intHelper.addInteractor(outflowInt); // intHelper.addInteractor(cyl2Int); - + //intHelper.addInteractor(intrInflowPipe); intHelper.addInteractor(wallXminInt); intHelper.addInteractor(wallXmaxInt); - intHelper.addInteractor(wallXmaxInt); intHelper.addInteractor(wallZminInt); intHelper.addInteractor(wallZmaxInt); intHelper.addInteractor(wallYminInt); intHelper.addInteractor(wallYmaxInt); - //intHelper.addInteractor(inflowInt); - intHelper.addInteractor(inflowAirInt); + + intHelper.addInteractor(wallInfZminInt); + intHelper.addInteractor(wallInfZmaxInt); + intHelper.addInteractor(wallInfYminInt); + intHelper.addInteractor(wallInfYmaxInt); + + intHelper.addInteractor(inflowInt); + //intHelper.addInteractor(outflowInt); + //intHelper.addInteractor(inflowAirInt); intHelper.selectBlocks(); @@ -468,87 +526,52 @@ void run(string configname) grid->accept(kernelVisitor); - // if (refineLevel > 0) { - // SetUndefinedNodesBlockVisitor undefNodesVisitor; - // grid->accept(undefNodesVisitor); - // } + //if (!newStart) { + // rcp->readBlocks((int)restartStep); + // grid->accept(metisVisitor); + // rcp->readDataSet((int)restartStep); + // grid->setTimeStep(restartStep); + //} intHelper.setBC(); - // initialization of distributions - //mu::Parser fct1; - //fct1.SetExpr("phiL"); - //fct1.DefineConst("phiL", phiL); - real x1c = 0; // (g_maxX1 - g_minX1-1)/2; // - real x2c = (g_minX2 + g_maxX2)/2; - real x3c = (g_minX3 + g_maxX3)/2; - - mu::Parser fct1; - fct1.SetExpr("(0.5-0.5*tanh(2*(sqrt((x1/radius-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness))-(0.5-0.5*tanh(2*(sqrt((x1/radius-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius2)/interfaceThickness))"); - //fct1.SetExpr("x1 < 4*dx ? (0.5-0.5*tanh(2*(1-4*dx)*(sqrt((x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)) : 0"); - fct1.DefineConst("x1c", x1c); - fct1.DefineConst("x2c", x2c); - fct1.DefineConst("x3c", x3c); - fct1.DefineConst("dx", dx); - fct1.DefineConst("radius", 0.5 * D /* + 2. * dx*/); - fct1.DefineConst("radius2", D/4.); - fct1.DefineConst("interfaceThickness", interfaceWidth * dx); - - mu::Parser fct2; - // fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1/radius-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); - fct2.SetExpr("x1 < 4*dx ? (0.5-0.5*tanh(2*(1-4*dx)*(sqrt((x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)) : 0"); - fct2.DefineConst("x1c", x1c); - fct2.DefineConst("x2c", x2c); - fct2.DefineConst("x3c", x3c); - fct2.DefineConst("dx", dx); - fct2.DefineConst("radius", 0.5 * D /* + 2. * dx*/); - fct2.DefineConst("interfaceThickness", interfaceWidth * dx); - - MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor; - //initVisitor.setPhi(fct1); - grid->accept(initVisitor); - /////////////////////////////////////////////////////////////////////////////////////////// - //{ - // std::vector<std::vector<SPtr<Block3D>>> blockVector; - // int gridRank = comm->getProcessID(); - // int minInitLevel = grid->getCoarsestInitializedLevel(); - // int maxInitLevel = grid->getFinestInitializedLevel(); - // blockVector.resize(maxInitLevel + 1); - // for (int level = minInitLevel; level <= maxInitLevel; level++) { - // grid->getBlocks(level, gridRank, true, blockVector[level]); - //} - // for (int level = minInitLevel; level <= maxInitLevel; level++) { - // for (SPtr<Block3D> block : blockVector[level]) { - // if (block) { - // int ix1 = block->getX1(); - // int ix2 = block->getX2(); - // int ix3 = block->getX3(); - // int level = block->getLevel(); - - // for (int dir = 0; dir < D3Q27System::ENDDIR; dir++) { - // SPtr<Block3D> neighBlock = grid->getNeighborBlock(dir, ix1, ix2, ix3, level); - - // if (!neighBlock) { - - // } - // } - // } - // } - //} - // SPtr<Block3D> block = grid->getBlock(0, 0, 0, 0); - // SPtr<LBMKernel> kernel = dynamicPointerCast<LBMKernel>(block->getKernel()); - // SPtr<BCArray3D> bcArray = kernel->getBCSet()->getBCArray(); - - // for (int ix3 = 0; ix3 <= 13; ix3++) { - // for (int ix2 = 0; ix2 <= 13; ix2++) { - // for (int ix1 = 0; ix1 <= 13; ix1++) { - // if (ix1 == 0 || ix2 == 0 || ix3 == 0 || ix1 == 13 || ix2 == 13 || ix3 == 13) - // bcArray->setUndefined(ix1, ix2, ix3); - // } - // } - // } - //} - //////////////////////////////////////////////////////////////////////////////////////////// + if (newStart) { + + // initialization of distributions + // mu::Parser fct1; + // fct1.SetExpr("phiL"); + // fct1.DefineConst("phiL", phiL); + real x1c = g_minX1 - Dg*5; // (g_maxX1 - g_minX1-1)/2; // + real x2c = (g_minX2 + g_maxX2) / 2; + real x3c = (g_minX3 + g_maxX3) / 2; + + mu::Parser fct1; + fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + //fct1.SetExpr("(0.5-0.5*tanh(2*(sqrt((x1/radius-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness))-(0.5-0.5*tanh(2*(sqrt((x1/radius-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius2)/interfaceThickness))"); + // fct1.SetExpr("x1 < 4*dx ? (0.5-0.5*tanh(2*(1-4*dx)*(sqrt((x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)) : 0"); + fct1.DefineConst("x1c", x1c); + fct1.DefineConst("x2c", x2c); + fct1.DefineConst("x3c", x3c); + fct1.DefineConst("dx", dx); + fct1.DefineConst("radius", 5.0*Dg + (inflowLength-1)*dx /* + 2. * dx*/); + fct1.DefineConst("radius2", Dg / 4.); + fct1.DefineConst("interfaceThickness", interfaceWidth * dx); + + mu::Parser fct2; + // fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1/radius-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct2.SetExpr("x1 < 4*dx ? (0.5-0.5*tanh(2*(1-4*dx)*(sqrt((x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)) : 0"); + fct2.DefineConst("x1c", x1c); + fct2.DefineConst("x2c", x2c); + fct2.DefineConst("x3c", x3c); + fct2.DefineConst("dx", dx); + fct2.DefineConst("radius", 0.5 * D /* + 2. * dx*/); + fct2.DefineConst("interfaceThickness", interfaceWidth * dx); + + MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor; + initVisitor.setPhi(fct1); + grid->accept(initVisitor); + } + // boundary conditions grid { SPtr<UbScheduler> geoSch(new UbScheduler(1)); @@ -558,10 +581,12 @@ void run(string configname) } if (myid == 0) UBLOG(logINFO, "Preprocess - end"); - } else { + //} else { + if (!newStart) { rcp->restart((int)restartStep); grid->setTimeStep(restartStep); - + SPtr<WriteBlocksSimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + ppblocks->update(10000); if (myid == 0) UBLOG(logINFO, "Restart - end"); } -- GitLab