diff --git a/apps/cpu/Multiphase/Multiphase.cfg b/apps/cpu/Multiphase/Multiphase.cfg index cb5a072c321e63d0a69739520c1d020fe34d81e6..d52694ac838c8ae029ebf85476ab6db68de11223 100644 --- a/apps/cpu/Multiphase/Multiphase.cfg +++ b/apps/cpu/Multiphase/Multiphase.cfg @@ -1,7 +1,11 @@ -pathname = d:/temp/MultiphaseNew3 -pathGeo = d:/Projects/VirtualFluids-Multiphase/source/Applications/Multiphase/backup -geoFile = JetBreakup2.ASCII.stl -numOfThreads = 4 +pathname = d:/temp/MultiphaseNew4 +#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 = 1 availMem = 10e9 #Grid @@ -10,21 +14,28 @@ availMem = 10e9 #boundingBox = -60.5 60.5 -1.0 -201.0 -60.5 60.5 #(Jet Breakup2) (Original without inlet length) #blocknx = 22 20 22 -boundingBox = -60.5 60.5 -1.0 -21.0 -60.5 60.5 #(Jet Breakup2) (Original without inlet length) -blocknx = 22 20 22 +#boundingBox = -60.5 60.5 -1.0 -101.0 -60.5 60.5 #(Jet Breakup2) (Original without inlet length) +#blocknx = 22 20 22 + +#boundingBox = -40 40 -1.0 -21.0 -40 40 #(Jet Breakup2) (Original without inlet length) +#boundingBox = -40 40 1.0 11.0 -40 40 #(Jet Breakup2) (Original without inlet length) +#boundingBox = -40e-3 40e-3 1.0e-3 11.0e-3 -403-3 40e-3 #(Jet Breakup2) (Original without inlet length) +blocknx = 20 20 20 +boundingBox = 6.0e-3 16.0e-3 -40e-3 40e-3 -40e-3 40e-3 +blocknx = 20 20 20 -dx = 0.5 +dx = 0.5e-3 refineLevel = 0 #Simulation uLB = 0.0005 #inlet velocity -uF2 = 0.0001 +#uF2 = 0.0001 Re = 10 nuL =1e-2# 1.0e-5 #!1e-2 nuG =1e-2# 1.16e-4 #!1e-2 -densityRatio = 1 #30 -sigma = 4.66e-3 #surface tension 1e-4 ./. 1e-5 +densityRatio = 30 +sigma = 1e-5 #4.66e-3 #surface tension 1e-4 ./. 1e-5 interfaceThickness = 5 radius = 615.0 (Jet Breakup) contactAngle = 110.0 @@ -44,5 +55,5 @@ restartStep = 100000 cpStart = 100000 cpStep = 100000 -outTime = 1 -endTime = 10 \ No newline at end of file +outTime = 100 +endTime = 10000 \ No newline at end of file diff --git a/apps/cpu/Multiphase/Multiphase.cpp b/apps/cpu/Multiphase/Multiphase.cpp index 03b5334f0fb4bf84eb588f484c4c93537a4df257..10ff2b39618c64ef09edd902471387e7ebc90c70 100644 --- a/apps/cpu/Multiphase/Multiphase.cpp +++ b/apps/cpu/Multiphase/Multiphase.cpp @@ -9,6 +9,9 @@ using namespace std; void run(string configname) { try { + + //Sleep(20000); + ConfigurationFile config; config.load(configname); @@ -82,9 +85,9 @@ void run(string configname) SPtr<LBMKernel> kernel; - //kernel = SPtr<LBMKernel>(new MultiphaseScratchCumulantLBMKernel()); + kernel = SPtr<LBMKernel>(new MultiphaseScratchCumulantLBMKernel()); //kernel = SPtr<LBMKernel>(new MultiphaseCumulantLBMKernel()); - kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsCumulantLBMKernel()); + //kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsCumulantLBMKernel()); kernel->setWithForcing(true); kernel->setForcingX1(0.0); @@ -108,10 +111,10 @@ void run(string configname) ////////////////////////////////////////////////////////////////////////// // restart SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart)); - // RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); - MPIIORestartCoProcessor rcp(grid, rSch, pathname, comm); - rcp.setLBMKernel(kernel); - rcp.setBCProcessor(bcProc); + SPtr<MPIIOMigrationBECoProcessor> rcp = make_shared<MPIIOMigrationBECoProcessor>(grid, rSch, pathname, comm); + rcp->setLBMKernel(kernel); + rcp->setBCProcessor(bcProc); + rcp->setNu(nuLB); ////////////////////////////////////////////////////////////////////////// mu::Parser fctF1; @@ -122,17 +125,19 @@ void run(string configname) fctF1.DefineConst("R", 8.0); fctF1.DefineConst("x0", 0.0); fctF1.DefineConst("z0", 0.0); + //SPtr<BCAdapter> velBCAdapterF1( + // new MultiphaseVelocityBCAdapter(false, true, false, fctF1, phiH, 0.0, BCFunction::INFCONST)); mu::Parser fctF2; fctF2.SetExpr("vy1"); - fctF2.DefineConst("vy1", -uLB); + fctF2.DefineConst("vy1", uLB); - double startTime = 5; - SPtr<BCAdapter> velBCAdapterF1(new MultiphaseVelocityBCAdapter(false, true, false, fctF1, phiH, 0.0, startTime)); - SPtr<BCAdapter> velBCAdapterF2(new MultiphaseVelocityBCAdapter(false, true, false, fctF2, phiH, startTime, endTime)); + double startTime = 500; + SPtr<BCAdapter> velBCAdapterF1(new MultiphaseVelocityBCAdapter(true, false, false, fctF1, phiH, 0.0, startTime)); + SPtr<BCAdapter> velBCAdapterF2(new MultiphaseVelocityBCAdapter(true, false, false, fctF2, phiH, startTime, endTime)); SPtr<D3Q27Interactor> inflowF1Int; - + SPtr<D3Q27Interactor> cylInt; if (newStart) { // if (newStart) { @@ -155,52 +160,36 @@ void run(string configname) double g_maxX3 = boundingBox[5]; // geometry - - // GbObject3DPtr innerCube(new GbCuboid3D(g_minX1+2, g_minX2+2, g_minX3+2, g_maxX1-2, g_maxX2-2, - // g_maxX3-2)); - - // GbObject3DPtr cylinder1(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_minX1 + 12.0*dx, - // g_maxX2/2, g_maxX3/2, radius)); GbObject3DPtr cylinder2(new GbCylinder3D(g_minX1 + 12.0*dx, g_maxX2/2, - // g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0)); - - // GbObject3DPtr cylinder(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, - // g_maxX2/2, g_maxX3/2, dLB / 2.0)); GbObject3DPtr cylinders(new GbObject3DManager()); GbObject3DPtr - // cylinders1(new GbObjectGroup3D()); - SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); - if (myid == 0) UBLOG(logINFO, "Read geoFile:start"); SPtr<GbTriFaceMesh3D> cylinder = make_shared<GbTriFaceMesh3D>(); - cylinder->readMeshFromSTLFileASCII(pathGeo + "/" + geoFile, false); + cylinder->readMeshFromSTLFileBinary(pathGeo + "/" + geoFile, false); GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance()); if (myid == 0) UBLOG(logINFO, "Read geoFile:stop"); // inflow - // GbCuboid3DPtr geoInflowF1(new GbCuboid3D(40.0, 628.0, 40.0, 80, 631.0, 80.0)); // For JetBreakup - // (Original) GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1-2.0*dx, g_minX2-2.0*dx, g_minX3-2.0*dx, - // g_maxX1+2.0*dx, g_minX2+2.0*dx, g_maxX3+2.0*dx)); if (myid == 0) - // GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname + "/geo/geoInflowF1", - // WbWriterVtkXmlASCII::getInstance()); - - ////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-2.0*dx, g_maxX2, 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()); - + //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1, g_minX2 - 0.5 * dx, g_minX3, g_maxX1, g_minX2 - 1.0 * dx, g_maxX3)); GbCuboid3DPtr geoInflowF1( - new GbCuboid3D(g_minX1, g_minX2 - 0.5 * dx, g_minX3, g_maxX1, g_minX2 - 1.0 * dx, g_maxX3)); + new GbCuboid3D(g_minX1*0.5 - dx, g_minX2 - dx, g_minX3*0.5 - dx, g_maxX1*0.5 + dx, g_minX2, g_maxX3*0.5 + dx)); + if (myid == 0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname + "/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance()); + + GbCylinder3DPtr cylinder1(new GbCylinder3D(g_minX1-dx, 0.0, 0.0, cylinder->getX1Maximum(), 0.0, 0.0, 3e-3)); if (myid == 0) - GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname + "/geo/geoInflowF1", + GbSystem3D::writeGeoObject(cylinder1.get(), pathname + "/geo/cylinder1", WbWriterVtkXmlASCII::getInstance()); + //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) + // GbSystem3D::writeGeoObject(cylinder2.get(), pathname + "/geo/cylinder2", + // WbWriterVtkXmlASCII::getInstance()); // 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 - 1 * dx, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + //GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2 - 40 * dx, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2, g_minX3, g_maxX1, g_maxX2 + dx, g_maxX3)); if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); @@ -234,11 +223,6 @@ void run(string configname) SPtr<BCAdapter> denBCAdapter(new DensityBCAdapter(rhoLB)); denBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new MultiphaseNonReflectingOutflowBCAlgorithm())); - // double r = 5.0; //boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius(); - // double cx1 = g_minX1; - // double cx2 = 0.0; //cylinder->getX2Centroid(); - // double cx3 = 0.0; //cylinder->getX3Centroid(); - mu::Parser fctPhi_F1; fctPhi_F1.SetExpr("phiH"); fctPhi_F1.DefineConst("phiH", phiH); @@ -251,74 +235,70 @@ void run(string configname) fctvel_F2_init.SetExpr("U"); fctvel_F2_init.DefineConst("U", 0); - // fct.SetExpr("U"); - // fct.DefineConst("U", uLB); - // BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); - - - - - - // BCAdapterPtr velBCAdapterF2_1_init(new MultiphaseVelocityBCAdapter(false, false, true, fctF2_1, phiH, - // 0.0, endTime)); BCAdapterPtr velBCAdapterF2_2_init(new MultiphaseVelocityBCAdapter(false, false, true, - // fctF2_2, phiH, 0.0, endTime)); - - // BCAdapterPtr velBCAdapterF2_1_init(new MultiphaseVelocityBCAdapter(false, false, true, fctvel_F2_init, - // phiL, 0.0, endTime)); BCAdapterPtr velBCAdapterF2_2_init(new MultiphaseVelocityBCAdapter(false, false, - // true, fctvel_F2_init, phiL, 0.0, endTime)); - - //velBCAdapterF1->setBcAlgorithm(SPtr<BCAlgorithm>(new MultiphaseVelocityBCAlgorithm())); - velBCAdapterF1->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithm())); - // velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new MultiphaseVelocityBCAlgorithm())); - // velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new MultiphaseVelocityBCAlgorithm())); - - // velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); - // mu::Parser fct; - // fct.SetExpr("U"); - // fct.DefineConst("U", uLB); - // BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); - // velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingVelocityBCAlgorithm())); - + velBCAdapterF1->setBcAlgorithm(SPtr<BCAlgorithm>(new MultiphaseVelocityBCAlgorithm())); ////////////////////////////////////////////////////////////////////////////////// // BC visitor MultiphaseBoundaryConditionsBlockVisitor bcVisitor; bcVisitor.addBC(noSlipBCAdapter); - // bcVisitor.addBC(denBCAdapter); //Ohne das BB? + bcVisitor.addBC(denBCAdapter); //Ohne das BB? bcVisitor.addBC(velBCAdapterF1); - // bcVisitor.addBC(velBCAdapterF2_1_init); - // bcVisitor.addBC(velBCAdapterF2_2_init); SPtr<WriteBlocksCoProcessor> ppblocks(new WriteBlocksCoProcessor( grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - //ppblocks->process(0); - - SPtr<Interactor3D> tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - inflowF1Int = SPtr<D3Q27Interactor> (new D3Q27Interactor(geoInflowF1, grid, velBCAdapterF1, Interactor3D::SOLID)); - inflowF1Int->addBCAdapter(velBCAdapterF2); + SPtr<Interactor3D> tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::POINTS)); - // inflowF1Int->addBCAdapter(velBCAdapterFStart); - - // D3Q27InteractorPtr inflowF2_1Int_init = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_1, grid, - // velBCAdapterF2_1_init, Interactor3D::SOLID)); - - // D3Q27InteractorPtr inflowF2_2Int_init = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_2, grid, - // velBCAdapterF2_2_init, Interactor3D::SOLID)); + //inflowF1Int = + // SPtr<D3Q27Interactor>(new D3Q27Interactor(cylinder1, grid, noSlipBCAdapter, Interactor3D::SOLID)); + //inflowF1Int->addBCAdapter(velBCAdapterF2); SPtr<D3Q27Interactor> outflowInt(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID)); - // SetSolidBlockVisitor visitor1(inflowF2_1Int, SetSolidBlockVisitor::BC); - // grid->accept(visitor1); - // SetSolidBlockVisitor visitor2(inflowF2_2Int, SetSolidBlockVisitor::BC); - // grid->accept(visitor2); + // Create boundary conditions geometry + GbCuboid3DPtr wallXmin(new GbCuboid3D(g_minX1 - dx, g_minX2 - dx, g_minX3 - dx, g_minX1, g_maxX2 + dx, g_maxX3)); + GbSystem3D::writeGeoObject(wallXmin.get(), pathname + "/geo/wallXmin", WbWriterVtkXmlASCII::getInstance()); + GbCuboid3DPtr wallXmax(new GbCuboid3D(g_maxX1, g_minX2 - dx, g_minX3 - dx, g_maxX1 + dx, g_maxX2 + dx, g_maxX3)); + GbSystem3D::writeGeoObject(wallXmax.get(), pathname + "/geo/wallXmax", WbWriterVtkXmlASCII::getInstance()); + GbCuboid3DPtr wallZmin(new GbCuboid3D(g_minX1 - dx, g_minX2 - dx, g_minX3 - dx, g_maxX1 + dx, g_maxX2 + dx, g_minX3)); + GbSystem3D::writeGeoObject(wallZmin.get(), pathname + "/geo/wallZmin", WbWriterVtkXmlASCII::getInstance()); + GbCuboid3DPtr wallZmax(new GbCuboid3D(g_minX1 - dx, g_minX2 - dx, g_maxX3, g_maxX1 + dx, g_maxX2 + dx, g_maxX3 + dx)); + GbSystem3D::writeGeoObject(wallZmax.get(), pathname + "/geo/wallZmax", WbWriterVtkXmlASCII::getInstance()); + GbCuboid3DPtr wallYmin(new GbCuboid3D(g_minX1 - dx, g_minX2 - dx, g_minX3 - dx, g_maxX1 + dx, g_minX2, g_maxX3)); + GbSystem3D::writeGeoObject(wallYmin.get(), pathname + "/geo/wallYmin", WbWriterVtkXmlASCII::getInstance()); + GbCuboid3DPtr wallYmax(new GbCuboid3D(g_minX1 - dx, g_maxX2, g_minX3 - dx, g_maxX1 + dx, g_maxX2 + dx, g_maxX3)); + GbSystem3D::writeGeoObject(wallYmax.get(), pathname + "/geo/wallYmax", WbWriterVtkXmlASCII::getInstance()); + + // Add boundary conditions to grid generator + SPtr<D3Q27Interactor> wallXminInt(new D3Q27Interactor(wallXmin, grid, noSlipBCAdapter, Interactor3D::SOLID)); + SPtr<D3Q27Interactor> wallXmaxInt(new D3Q27Interactor(wallXmax, grid, noSlipBCAdapter, Interactor3D::SOLID)); + SPtr<D3Q27Interactor> wallZminInt(new D3Q27Interactor(wallZmin, grid, noSlipBCAdapter, Interactor3D::SOLID)); + SPtr<D3Q27Interactor> wallZmaxInt(new D3Q27Interactor(wallZmax, grid, noSlipBCAdapter, Interactor3D::SOLID)); + SPtr<D3Q27Interactor> wallYminInt(new D3Q27Interactor(wallYmin, grid, noSlipBCAdapter, Interactor3D::SOLID)); + SPtr<D3Q27Interactor> wallYmaxInt(new D3Q27Interactor(wallYmax, grid, noSlipBCAdapter, Interactor3D::SOLID)); + + + cylInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(cylinder1, grid, velBCAdapterF1, Interactor3D::SOLID)); + cylInt->addBCAdapter(velBCAdapterF2); + //SPtr<D3Q27Interactor> cyl2Int(new D3Q27Interactor(cylinder2, grid, noSlipBCAdapter, Interactor3D::SOLID)); SPtr<Grid3DVisitor> metisVisitor( new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW)); - InteractorsHelper intHelper(grid, metisVisitor); + InteractorsHelper intHelper(grid, metisVisitor, true); + intHelper.addInteractor(cylInt); intHelper.addInteractor(tubes); - intHelper.addInteractor(inflowF1Int); - intHelper.addInteractor(outflowInt); + //intHelper.addInteractor(outflowInt); + //intHelper.addInteractor(cyl2Int); + + + intHelper.addInteractor(wallXminInt); + intHelper.addInteractor(wallXmaxInt); + intHelper.addInteractor(wallZminInt); + intHelper.addInteractor(wallZmaxInt); + intHelper.addInteractor(wallYminInt); + intHelper.addInteractor(wallYmaxInt); + //intHelper.addInteractor(inflowF1Int); + + intHelper.selectBlocks(); ppblocks->process(0); @@ -350,26 +330,6 @@ void run(string configname) UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); } - // LBMKernelPtr kernel; - - // kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], - // MultiphaseCumulantLBMKernel::NORMAL)); - - // kernel->setWithForcing(true); - // kernel->setForcingX1(0.0); - // kernel->setForcingX2(gr); - // kernel->setForcingX3(0.0); - - // kernel->setPhiL(phiL); - // kernel->setPhiH(phiH); - // kernel->setPhaseFieldRelaxation(tauH); - // kernel->setMobility(mob); - - // BCProcessorPtr bcProc(new BCProcessor()); - // //BCProcessorPtr bcProc(new ThinWallBCProcessor()); - - // kernel->setBCProcessor(bcProc); - MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); @@ -380,68 +340,18 @@ void run(string configname) grid->accept(undefNodesVisitor); } - // inflowF2_1Int->initInteractor(); - // inflowF2_2Int->initInteractor(); - intHelper.setBC(); grid->accept(bcVisitor); // initialization of distributions - LBMReal x1c = radius; // g_minX1; //radius; //19; //(g_maxX1+g_minX1)/2; - LBMReal x2c = (g_maxX2 + g_minX2) / 2; // g_minX2 + 2; - LBMReal x3c = (g_maxX3 + g_minX3) / 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("phiM-phiM*tanh((sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/(interfaceThickness*phiM))"); - - // fct1.SetExpr("0.5*(phiH + phiL)-0.5*(phiH - - // phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); - - // fct1.SetExpr("0.5*(phiH + phiL) + 0.5*(phiH - phiL)*tanh(2*((x2-radius))/interfaceThickness)"); fct1.SetExpr("phiL"); - fct1.DefineConst("x1c", x1c); - fct1.DefineConst("x2c", x2c); - fct1.DefineConst("x3c", x3c); fct1.DefineConst("phiL", phiL); - fct1.DefineConst("phiH", phiH); - fct1.DefineConst("radius", radius); - fct1.DefineConst("interfaceThickness", interfaceThickness); - - mu::Parser fct2; - // fct2.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); - fct2.SetExpr("vx1"); - fct2.DefineConst("R", 10.0); - fct2.DefineConst("vx1", uLB); - fct2.DefineConst("y0", 1.0); - fct2.DefineConst("z0", 31.0); - /*fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); - fct2.DefineConst("uLB", uLB); - fct2.DefineConst("x1c", x1c); - fct2.DefineConst("x2c", x2c); - fct2.DefineConst("x3c", x3c); - fct2.DefineConst("radius", radius); - fct2.DefineConst("interfaceThickness", interfaceThickness);*/ - MultiphaseInitDistributionsBlockVisitor initVisitor(densityRatio, interfaceThickness, radius); initVisitor.setPhi(fct1); - // initVisitor.setVx1(fct2); grid->accept(initVisitor); - // set connectors - //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); - // InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); - //SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - // ConnectorFactoryPtr factory(new Block3DConnectorFactory()); - // ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory); - ThreeDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm); - grid->accept(setConnsVisitor); - - // domain decomposition for threads - // PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - // grid->accept(pqPartVisitor); - // boundary conditions grid { SPtr<UbScheduler> geoSch(new UbScheduler(1)); @@ -466,44 +376,42 @@ void run(string configname) UBLOG(logINFO, "path = " << pathname); } - rcp.restart((int)restartStep); + rcp->restart((int)restartStep); grid->setTimeStep(restartStep); - // BCAdapterPtr velBCAdapter(new VelocityBCAdapter()); - // velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm())); - // velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); - // bcVisitor.addBC(velBCAdapter); - // grid->accept(bcVisitor); - - // set connectors - // InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); - //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); - //SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - //grid->accept(setConnsVisitor); - if (myid == 0) UBLOG(logINFO, "Restart - end"); } TwoDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm); grid->accept(setConnsVisitor); + + //ThreeDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm); + //grid->accept(setConnsVisitor); SPtr<UbScheduler> visSch(new UbScheduler(outTime)); SPtr<WriteMultiphaseQuantitiesCoProcessor> pp(new WriteMultiphaseQuantitiesCoProcessor( + //SPtr<WriteMacroscopicQuantitiesCoProcessor> pp(new WriteMacroscopicQuantitiesCoProcessor( grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + pp->process(0); SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100)); SPtr<NUPSCounterCoProcessor> npr(new NUPSCounterCoProcessor(grid, nupsSch, numOfThreads, comm)); SPtr<UbScheduler> timeBCSch(new UbScheduler(1, startTime, startTime)); auto timeDepBC = make_shared<TimeDependentBCCoProcessor>(TimeDependentBCCoProcessor(grid, timeBCSch)); - timeDepBC->addInteractor(inflowF1Int); + timeDepBC->addInteractor(cylInt); + +#ifdef _OPENMP + omp_set_num_threads(numOfThreads); +#endif SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1)); SPtr<Calculator> calculator(new BasicCalculator(grid, stepGhostLayer, endTime)); calculator->addCoProcessor(npr); calculator->addCoProcessor(pp); calculator->addCoProcessor(timeDepBC); + calculator->addCoProcessor(rcp); diff --git a/apps/cpu/Multiphase/backup/JetBreakupR.ASCII.stl b/apps/cpu/Multiphase/backup/JetBreakupR.ASCII.stl new file mode 100644 index 0000000000000000000000000000000000000000..b54ebccc96d8e38114cb34ce13a2d3daccd8cb45 --- /dev/null +++ b/apps/cpu/Multiphase/backup/JetBreakupR.ASCII.stl @@ -0,0 +1,1584 @@ +solid Visualization Toolkit generated SLA File + facet normal 0 1 0 + outer loop + vertex -61 610 61 + vertex -60 610 -60 + vertex -61 610 -61 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex -60 610 60 + vertex -60 610 -60 + vertex -61 610 61 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -61 610 61 + vertex 61 610 61 + vertex -60 610 60 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex 61 610 61 + vertex 60 610 60 + vertex -60 610 60 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 60 610 -60 + vertex 61 610 -61 + vertex -60 610 -60 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -60 610 -60 + vertex 61 610 -61 + vertex -61 610 -61 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex 61 610 61 + vertex 61 610 -61 + vertex 60 610 60 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 60 610 60 + vertex 61 610 -61 + vertex 60 610 -60 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 61 3 -61 + vertex -61 610 -61 + vertex 61 610 -61 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 61 3 -61 + vertex -61 3 -61 + vertex -61 610 -61 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 61 3 61 + vertex 61 610 -61 + vertex 61 610 61 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 61 3 61 + vertex 61 3 -61 + vertex 61 610 -61 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -61 3 61 + vertex 61 610 61 + vertex -61 610 61 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -61 3 61 + vertex 61 3 61 + vertex 61 610 61 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -61 3 -61 + vertex -61 610 61 + vertex -61 610 -61 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -61 3 -61 + vertex -61 3 61 + vertex -61 610 61 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex -60 610 60 + vertex -60 3 60 + vertex -60 610 -60 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -60 3 60 + vertex -60 3 -60 + vertex -60 610 -60 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 60 610 60 + vertex 60 3 60 + vertex -60 610 60 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 60 3 60 + vertex -60 3 60 + vertex -60 610 60 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 60 610 -60 + vertex 60 3 60 + vertex 60 610 60 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 60 3 -60 + vertex 60 3 60 + vertex 60 610 -60 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -60 610 -60 + vertex -60 3 -60 + vertex 60 610 -60 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -60 3 -60 + vertex 60 3 -60 + vertex 60 610 -60 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 61 3 -61 + vertex -61 1 -61 + vertex -61 3 -61 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 61 1 -61 + vertex -61 1 -61 + vertex 61 3 -61 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 61 1 61 + vertex 61 3 -61 + vertex 61 3 61 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 61 1 61 + vertex 61 1 -61 + vertex 61 3 -61 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -61 1 61 + vertex 61 3 61 + vertex -61 3 61 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -61 1 61 + vertex 61 1 61 + vertex 61 3 61 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -61 1 -61 + vertex -61 3 61 + vertex -61 3 -61 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -61 1 -61 + vertex -61 1 61 + vertex -61 3 61 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -60 3 60 + vertex -4.489497184753418 3 6.6215119361877441 + vertex -5.8079638481140137 3 5.5015950202941895 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex -5.8079638481140137 3 5.5015950202941895 + vertex -6.8548569679260254 3 4.1244311332702637 + vertex -60 3 60 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -60 3 60 + vertex -2.9611051082611084 3 7.4318141937255859 + vertex -4.489497184753418 3 6.6215119361877441 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex -6.8548569679260254 3 4.1244311332702637 + vertex -7.5812249183654785 3 2.5544118881225586 + vertex -60 3 60 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -60 3 60 + vertex -1.2942559719085693 3 7.8946118354797363 + vertex -2.9611051082611084 3 7.4318141937255859 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex -7.5812249183654785 3 2.5544118881225586 + vertex -7.9531040191650391 3 0.86495202779769897 + vertex -60 3 60 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -60 3 60 + vertex 0.43311101198196411 3 7.9882669448852539 + vertex -1.2942559719085693 3 7.8946118354797363 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex -7.9531040191650391 3 0.86495202779769897 + vertex -7.9531040191650391 3 -0.86495202779769897 + vertex -60 3 60 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -5.8079638481140137 3 -5.5015950202941895 + vertex -60 3 -60 + vertex -6.8548569679260254 3 -4.1244311332702637 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -6.8548569679260254 3 -4.1244311332702637 + vertex -60 3 -60 + vertex -7.5812249183654785 3 -2.5544118881225586 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -7.5812249183654785 3 -2.5544118881225586 + vertex -60 3 -60 + vertex -7.9531040191650391 3 -0.86495202779769897 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -7.9531040191650391 3 -0.86495202779769897 + vertex -60 3 -60 + vertex -60 3 60 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.43311101198196411 3 7.9882669448852539 + vertex 60 3 60 + vertex 2.1402270793914795 3 7.708399772644043 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 2.1402270793914795 3 7.708399772644043 + vertex 60 3 60 + vertex 3.7472670078277588 3 7.0680961608886719 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 3.7472670078277588 3 7.0680961608886719 + vertex 60 3 60 + vertex 5.1790900230407715 3 6.0972962379455566 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -60 3 60 + vertex 60 3 60 + vertex 0.43311101198196411 3 7.9882669448852539 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex 60 3 60 + vertex 6.368743896484375 3 4.8413939476013184 + vertex 5.1790900230407715 3 6.0972962379455566 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -5.8079638481140137 3 -5.5015950202941895 + vertex -4.489497184753418 3 -6.6215119361877441 + vertex -60 3 -60 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex 60 3 60 + vertex 7.2606029510498047 3 3.3591129779815674 + vertex 6.368743896484375 3 4.8413939476013184 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -4.489497184753418 3 -6.6215119361877441 + vertex -2.9611051082611084 3 -7.4318141937255859 + vertex -60 3 -60 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex 60 3 60 + vertex 7.8129639625549316 3 1.7197639942169189 + vertex 7.2606029510498047 3 3.3591129779815674 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -2.9611051082611084 3 -7.4318141937255859 + vertex -1.2942559719085693 3 -7.8946118354797363 + vertex -60 3 -60 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex 60 3 60 + vertex 8 3 -3.6739402930577075e-16 + vertex 7.8129639625549316 3 1.7197639942169189 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -1.2942559719085693 3 -7.8946118354797363 + vertex 0.43311101198196411 3 -7.9882669448852539 + vertex -60 3 -60 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 8 3 -3.6739402930577075e-16 + vertex 60 3 -60 + vertex 7.8129639625549316 3 -1.7197639942169189 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 7.8129639625549316 3 -1.7197639942169189 + vertex 60 3 -60 + vertex 7.2606029510498047 3 -3.3591129779815674 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 7.2606029510498047 3 -3.3591129779815674 + vertex 60 3 -60 + vertex 6.368743896484375 3 -4.8413939476013184 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 6.368743896484375 3 -4.8413939476013184 + vertex 60 3 -60 + vertex 5.1790900230407715 3 -6.0972962379455566 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 5.1790900230407715 3 -6.0972962379455566 + vertex 60 3 -60 + vertex 3.7472670078277588 3 -7.0680961608886719 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 3.7472670078277588 3 -7.0680961608886719 + vertex 60 3 -60 + vertex 2.1402270793914795 3 -7.708399772644043 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 2.1402270793914795 3 -7.708399772644043 + vertex 60 3 -60 + vertex 0.43311101198196411 3 -7.9882669448852539 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex 60 3 60 + vertex 60 3 -60 + vertex 8 3 -3.6739402930577075e-16 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.43311101198196411 3 -7.9882669448852539 + vertex 60 3 -60 + vertex -60 3 -60 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 61 1 -61 + vertex -61 -7.4703452449041523e-15 -61 + vertex -61 1 -61 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 61 -7.4703452449041523e-15 -61 + vertex -61 -7.4703452449041523e-15 -61 + vertex 61 1 -61 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 61 1 61 + vertex 61 -7.4703452449041523e-15 -61 + vertex 61 1 -61 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 61 7.4703452449041523e-15 61 + vertex 61 -7.4703452449041523e-15 -61 + vertex 61 1 61 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -61 1 61 + vertex 61 7.4703452449041523e-15 61 + vertex 61 1 61 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -61 7.4703452449041523e-15 61 + vertex 61 7.4703452449041523e-15 61 + vertex -61 1 61 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -61 1 -61 + vertex -61 7.4703452449041523e-15 61 + vertex -61 1 61 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -61 -7.4703452449041523e-15 -61 + vertex -61 7.4703452449041523e-15 61 + vertex -61 1 -61 + endloop + endfacet + facet normal 0.64738670042007573 0 -0.76216170208113132 + outer loop + vertex -4.489497184753418 1 6.6215119361877441 + vertex -5.8079638481140137 1 5.5015950202941895 + vertex -5.8079638481140137 3 5.5015950202941895 + endloop + endfacet + facet normal 0.64738670042007573 0 -0.76216170208113132 + outer loop + vertex -4.489497184753418 1 6.6215119361877441 + vertex -5.8079638481140137 3 5.5015950202941895 + vertex -4.489497184753418 3 6.6215119361877441 + endloop + endfacet + facet normal 0.46840846871264458 0 -0.88351202959454689 + outer loop + vertex -2.9611051082611084 1 7.4318141937255859 + vertex -4.489497184753418 1 6.6215119361877441 + vertex -4.489497184753418 3 6.6215119361877441 + endloop + endfacet + facet normal 0.46840846871264458 0 -0.88351202959454689 + outer loop + vertex -2.9611051082611084 1 7.4318141937255859 + vertex -4.489497184753418 3 6.6215119361877441 + vertex -2.9611051082611084 3 7.4318141937255859 + endloop + endfacet + facet normal 0.26752793984402756 0 -0.96355010321353307 + outer loop + vertex -1.2942559719085693 1 7.8946118354797363 + vertex -2.9611051082611084 1 7.4318141937255859 + vertex -2.9611051082611084 3 7.4318141937255859 + endloop + endfacet + facet normal -0.99413793032906728 0 0.10811926507814602 + outer loop + vertex 7.8129639625549316 1 -1.7197639942169189 + vertex 8 3 -3.6739402930577075e-16 + vertex 7.8129639625549316 3 -1.7197639942169189 + endloop + endfacet + facet normal 0.26752793984402756 0 -0.96355010321353307 + outer loop + vertex -1.2942559719085693 1 7.8946118354797363 + vertex -2.9611051082611084 3 7.4318141937255859 + vertex -1.2942559719085693 3 7.8946118354797363 + endloop + endfacet + facet normal -0.99413793032906739 1.3240790337230738e-17 0.10811926507814602 + outer loop + vertex 7.8129639625549316 1 -1.7197639942169189 + vertex 8 1 -1.2246468525851679e-16 + vertex 8 3 -3.6739402930577075e-16 + endloop + endfacet + facet normal 0.054138904478489597 0 -0.99853341407379503 + outer loop + vertex 0.43311101198196411 1 7.9882669448852539 + vertex -1.2942559719085693 1 7.8946118354797363 + vertex -1.2942559719085693 3 7.8946118354797363 + endloop + endfacet + facet normal -0.94765316652265008 0 0.31930154396681876 + outer loop + vertex 7.2606029510498047 1 -3.3591129779815674 + vertex 7.8129639625549316 3 -1.7197639942169189 + vertex 7.2606029510498047 3 -3.3591129779815674 + endloop + endfacet + facet normal 0.054138904478489597 0 -0.99853341407379503 + outer loop + vertex 0.43311101198196411 1 7.9882669448852539 + vertex -1.2942559719085693 3 7.8946118354797363 + vertex 0.43311101198196411 3 7.9882669448852539 + endloop + endfacet + facet normal -0.94765316652265008 0 0.31930154396681876 + outer loop + vertex 7.2606029510498047 1 -3.3591129779815674 + vertex 7.8129639625549316 1 -1.7197639942169189 + vertex 7.8129639625549316 3 -1.7197639942169189 + endloop + endfacet + facet normal -0.16178182691395071 0 -0.98682655035238309 + outer loop + vertex 2.1402270793914795 1 7.708399772644043 + vertex 0.43311101198196411 1 7.9882669448852539 + vertex 0.43311101198196411 3 7.9882669448852539 + endloop + endfacet + facet normal -0.16178182691395071 0 -0.98682655035238309 + outer loop + vertex 2.1402270793914795 1 7.708399772644043 + vertex 0.43311101198196411 3 7.9882669448852539 + vertex 2.1402270793914795 3 7.708399772644043 + endloop + endfacet + facet normal -0.85685712856506968 0 0.51555393629301649 + outer loop + vertex 6.368743896484375 1 -4.8413939476013184 + vertex 7.2606029510498047 3 -3.3591129779815674 + vertex 6.368743896484375 3 -4.8413939476013184 + endloop + endfacet + facet normal -0.85685712856506968 0 0.51555393629301649 + outer loop + vertex 6.368743896484375 1 -4.8413939476013184 + vertex 7.2606029510498047 1 -3.3591129779815674 + vertex 7.2606029510498047 3 -3.3591129779815674 + endloop + endfacet + facet normal -0.37013834558473929 0 -0.92897664401630264 + outer loop + vertex 3.7472670078277588 1 7.0680961608886719 + vertex 2.1402270793914795 3 7.708399772644043 + vertex 3.7472670078277588 3 7.0680961608886719 + endloop + endfacet + facet normal -0.7259954825307644 0 0.68769946876882393 + outer loop + vertex 5.1790900230407715 1 -6.0972962379455566 + vertex 6.368743896484375 3 -4.8413939476013184 + vertex 5.1790900230407715 3 -6.0972962379455566 + endloop + endfacet + facet normal -0.37013834558473929 0 -0.92897664401630264 + outer loop + vertex 3.7472670078277588 1 7.0680961608886719 + vertex 2.1402270793914795 1 7.708399772644043 + vertex 2.1402270793914795 3 7.708399772644043 + endloop + endfacet + facet normal -0.7259954825307644 0 0.68769946876882393 + outer loop + vertex 5.1790900230407715 1 -6.0972962379455566 + vertex 6.368743896484375 1 -4.8413939476013184 + vertex 6.368743896484375 3 -4.8413939476013184 + endloop + endfacet + facet normal -0.56118699818949347 0 -0.82768904370123542 + outer loop + vertex 5.1790900230407715 1 6.0972962379455566 + vertex 3.7472670078277588 3 7.0680961608886719 + vertex 5.1790900230407715 3 6.0972962379455566 + endloop + endfacet + facet normal -0.56118699818949347 0 0.82768904370123542 + outer loop + vertex 3.7472670078277588 1 -7.0680961608886719 + vertex 5.1790900230407715 3 -6.0972962379455566 + vertex 3.7472670078277588 3 -7.0680961608886719 + endloop + endfacet + facet normal -0.56118699818949347 0 -0.82768904370123542 + outer loop + vertex 5.1790900230407715 1 6.0972962379455566 + vertex 3.7472670078277588 1 7.0680961608886719 + vertex 3.7472670078277588 3 7.0680961608886719 + endloop + endfacet + facet normal -0.56118699818949347 0 0.82768904370123542 + outer loop + vertex 3.7472670078277588 1 -7.0680961608886719 + vertex 5.1790900230407715 1 -6.0972962379455566 + vertex 5.1790900230407715 3 -6.0972962379455566 + endloop + endfacet + facet normal -0.7259954825307644 0 -0.68769946876882393 + outer loop + vertex 6.368743896484375 1 4.8413939476013184 + vertex 5.1790900230407715 3 6.0972962379455566 + vertex 6.368743896484375 3 4.8413939476013184 + endloop + endfacet + facet normal -0.37013834558473929 0 0.92897664401630264 + outer loop + vertex 2.1402270793914795 1 -7.708399772644043 + vertex 3.7472670078277588 3 -7.0680961608886719 + vertex 2.1402270793914795 3 -7.708399772644043 + endloop + endfacet + facet normal -0.7259954825307644 0 -0.68769946876882393 + outer loop + vertex 6.368743896484375 1 4.8413939476013184 + vertex 5.1790900230407715 1 6.0972962379455566 + vertex 5.1790900230407715 3 6.0972962379455566 + endloop + endfacet + facet normal -0.37013834558473929 0 0.92897664401630264 + outer loop + vertex 2.1402270793914795 1 -7.708399772644043 + vertex 3.7472670078277588 1 -7.0680961608886719 + vertex 3.7472670078277588 3 -7.0680961608886719 + endloop + endfacet + facet normal -0.85685712856506968 0 -0.51555393629301649 + outer loop + vertex 7.2606029510498047 1 3.3591129779815674 + vertex 6.368743896484375 3 4.8413939476013184 + vertex 7.2606029510498047 3 3.3591129779815674 + endloop + endfacet + facet normal -0.16178182691395071 0 0.98682655035238309 + outer loop + vertex 0.43311101198196411 1 -7.9882669448852539 + vertex 2.1402270793914795 3 -7.708399772644043 + vertex 0.43311101198196411 3 -7.9882669448852539 + endloop + endfacet + facet normal -0.85685712856506968 0 -0.51555393629301649 + outer loop + vertex 7.2606029510498047 1 3.3591129779815674 + vertex 6.368743896484375 1 4.8413939476013184 + vertex 6.368743896484375 3 4.8413939476013184 + endloop + endfacet + facet normal -0.16178182691395071 0 0.98682655035238309 + outer loop + vertex 0.43311101198196411 1 -7.9882669448852539 + vertex 2.1402270793914795 1 -7.708399772644043 + vertex 2.1402270793914795 3 -7.708399772644043 + endloop + endfacet + facet normal -0.94765316652265008 0 -0.31930154396681876 + outer loop + vertex 7.8129639625549316 1 1.7197639942169189 + vertex 7.2606029510498047 3 3.3591129779815674 + vertex 7.8129639625549316 3 1.7197639942169189 + endloop + endfacet + facet normal -0.94765316652265008 0 -0.31930154396681876 + outer loop + vertex 7.8129639625549316 1 1.7197639942169189 + vertex 7.2606029510498047 1 3.3591129779815674 + vertex 7.2606029510498047 3 3.3591129779815674 + endloop + endfacet + facet normal 0.054138904478489597 0 0.99853341407379503 + outer loop + vertex -1.2942559719085693 1 -7.8946118354797363 + vertex 0.43311101198196411 3 -7.9882669448852539 + vertex -1.2942559719085693 3 -7.8946118354797363 + endloop + endfacet + facet normal 0.054138904478489597 -0 0.99853341407379503 + outer loop + vertex -1.2942559719085693 1 -7.8946118354797363 + vertex 0.43311101198196411 1 -7.9882669448852539 + vertex 0.43311101198196411 3 -7.9882669448852539 + endloop + endfacet + facet normal -0.99413793032906739 0 -0.10811926507814598 + outer loop + vertex 8 1 -1.2246468525851679e-16 + vertex 7.8129639625549316 3 1.7197639942169189 + vertex 8 3 -3.6739402930577075e-16 + endloop + endfacet + facet normal -0.99413793032906739 0 -0.108119265078146 + outer loop + vertex 8 1 -1.2246468525851679e-16 + vertex 7.8129639625549316 1 1.7197639942169189 + vertex 7.8129639625549316 3 1.7197639942169189 + endloop + endfacet + facet normal 0.26752793984402756 0 0.96355010321353307 + outer loop + vertex -2.9611051082611084 1 -7.4318141937255859 + vertex -1.2942559719085693 3 -7.8946118354797363 + vertex -2.9611051082611084 3 -7.4318141937255859 + endloop + endfacet + facet normal 0.26752793984402756 -0 0.96355010321353307 + outer loop + vertex -2.9611051082611084 1 -7.4318141937255859 + vertex -1.2942559719085693 1 -7.8946118354797363 + vertex -1.2942559719085693 3 -7.8946118354797363 + endloop + endfacet + facet normal 0.46840846871264458 -0 0.88351202959454689 + outer loop + vertex -4.489497184753418 1 -6.6215119361877441 + vertex -2.9611051082611084 1 -7.4318141937255859 + vertex -2.9611051082611084 3 -7.4318141937255859 + endloop + endfacet + facet normal 0.46840846871264458 0 0.88351202959454689 + outer loop + vertex -4.489497184753418 1 -6.6215119361877441 + vertex -2.9611051082611084 3 -7.4318141937255859 + vertex -4.489497184753418 3 -6.6215119361877441 + endloop + endfacet + facet normal 0.64738670042007573 -0 0.76216170208113132 + outer loop + vertex -5.8079638481140137 1 -5.5015950202941895 + vertex -4.489497184753418 1 -6.6215119361877441 + vertex -4.489497184753418 3 -6.6215119361877441 + endloop + endfacet + facet normal 0.64738670042007573 0 0.76216170208113132 + outer loop + vertex -5.8079638481140137 1 -5.5015950202941895 + vertex -4.489497184753418 3 -6.6215119361877441 + vertex -5.8079638481140137 3 -5.5015950202941895 + endloop + endfacet + facet normal 0.79609296820963171 -0 0.60517434344755416 + outer loop + vertex -6.8548569679260254 1 -4.1244311332702637 + vertex -5.8079638481140137 1 -5.5015950202941895 + vertex -5.8079638481140137 3 -5.5015950202941895 + endloop + endfacet + facet normal 0.79609296820963171 0 0.60517434344755416 + outer loop + vertex -6.8548569679260254 1 -4.1244311332702637 + vertex -5.8079638481140137 3 -5.5015950202941895 + vertex -6.8548569679260254 3 -4.1244311332702637 + endloop + endfacet + facet normal 0.90757548589128689 -0 0.4198889584273377 + outer loop + vertex -7.5812249183654785 1 -2.5544118881225586 + vertex -6.8548569679260254 1 -4.1244311332702637 + vertex -6.8548569679260254 3 -4.1244311332702637 + endloop + endfacet + facet normal 0.90757548589128689 0 0.4198889584273377 + outer loop + vertex -7.5812249183654785 1 -2.5544118881225586 + vertex -6.8548569679260254 3 -4.1244311332702637 + vertex -7.5812249183654785 3 -2.5544118881225586 + endloop + endfacet + facet normal 0.97662045080518167 -0 0.21497091679825825 + outer loop + vertex -7.9531040191650391 1 -0.86495202779769897 + vertex -7.5812249183654785 1 -2.5544118881225586 + vertex -7.5812249183654785 3 -2.5544118881225586 + endloop + endfacet + facet normal 0.97662045080518167 0 0.21497091679825825 + outer loop + vertex -7.9531040191650391 1 -0.86495202779769897 + vertex -7.5812249183654785 3 -2.5544118881225586 + vertex -7.9531040191650391 3 -0.86495202779769897 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -7.9531040191650391 1 0.86495202779769897 + vertex -7.9531040191650391 1 -0.86495202779769897 + vertex -7.9531040191650391 3 -0.86495202779769897 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex -7.9531040191650391 1 0.86495202779769897 + vertex -7.9531040191650391 3 -0.86495202779769897 + vertex -7.9531040191650391 3 0.86495202779769897 + endloop + endfacet + facet normal 0.97662045080518167 0 -0.21497091679825825 + outer loop + vertex -7.5812249183654785 1 2.5544118881225586 + vertex -7.9531040191650391 1 0.86495202779769897 + vertex -7.9531040191650391 3 0.86495202779769897 + endloop + endfacet + facet normal 0.97662045080518167 0 -0.21497091679825825 + outer loop + vertex -7.5812249183654785 1 2.5544118881225586 + vertex -7.9531040191650391 3 0.86495202779769897 + vertex -7.5812249183654785 3 2.5544118881225586 + endloop + endfacet + facet normal 0.90757548589128689 0 -0.4198889584273377 + outer loop + vertex -6.8548569679260254 1 4.1244311332702637 + vertex -7.5812249183654785 1 2.5544118881225586 + vertex -7.5812249183654785 3 2.5544118881225586 + endloop + endfacet + facet normal 0.90757548589128689 0 -0.4198889584273377 + outer loop + vertex -6.8548569679260254 1 4.1244311332702637 + vertex -7.5812249183654785 3 2.5544118881225586 + vertex -6.8548569679260254 3 4.1244311332702637 + endloop + endfacet + facet normal 0.79609296820963171 0 -0.60517434344755416 + outer loop + vertex -5.8079638481140137 1 5.5015950202941895 + vertex -6.8548569679260254 1 4.1244311332702637 + vertex -6.8548569679260254 3 4.1244311332702637 + endloop + endfacet + facet normal 0.79609296820963171 0 -0.60517434344755416 + outer loop + vertex -5.8079638481140137 1 5.5015950202941895 + vertex -6.8548569679260254 3 4.1244311332702637 + vertex -5.8079638481140137 3 5.5015950202941895 + endloop + endfacet + facet normal 0 -1 1.22464870546974e-16 + outer loop + vertex 61 7.4703452449041523e-15 61 + vertex -61 7.4703452449041523e-15 61 + vertex -60 7.3478803743571783e-15 60 + endloop + endfacet + facet normal 0 -1 1.22464870546974e-16 + outer loop + vertex 60 7.3478803743571783e-15 60 + vertex 61 7.4703452449041523e-15 61 + vertex -60 7.3478803743571783e-15 60 + endloop + endfacet + facet normal -1.9440100428787221e-22 -1 1.224646761459697e-16 + outer loop + vertex -61 -7.4703452449041523e-15 -61 + vertex -60 7.3478803743571783e-15 60 + vertex -61 7.4703452449041523e-15 61 + endloop + endfacet + facet normal 1.9764102102600342e-22 -1 1.2246467290595297e-16 + outer loop + vertex -60 -7.3478803743571783e-15 -60 + vertex -60 7.3478803743571783e-15 60 + vertex -61 -7.4703452449041523e-15 -61 + endloop + endfacet + facet normal 0 -1 1.22464870546974e-16 + outer loop + vertex 60 -7.3478803743571783e-15 -60 + vertex -60 -7.3478803743571783e-15 -60 + vertex -61 -7.4703452449041523e-15 -61 + endloop + endfacet + facet normal 0 -1 1.22464870546974e-16 + outer loop + vertex 61 -7.4703452449041523e-15 -61 + vertex 60 -7.3478803743571783e-15 -60 + vertex -61 -7.4703452449041523e-15 -61 + endloop + endfacet + facet normal 1.9440100428787221e-22 -1 1.224646761459697e-16 + outer loop + vertex 61 -7.4703452449041523e-15 -61 + vertex 61 7.4703452449041523e-15 61 + vertex 60 7.3478803743571783e-15 60 + endloop + endfacet + facet normal -1.9764102102600342e-22 -1 1.2246467290595297e-16 + outer loop + vertex 61 -7.4703452449041523e-15 -61 + vertex 60 7.3478803743571783e-15 60 + vertex 60 -7.3478803743571783e-15 -60 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -4.489497184753418 1 6.6215119361877441 + vertex -6.8548569679260254 1 4.1244311332702637 + vertex -5.8079638481140137 1 5.5015950202941895 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -2.9611051082611084 1 7.4318141937255859 + vertex -1.2942559719085693 1 7.8946118354797363 + vertex -4.489497184753418 1 6.6215119361877441 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -1.2942559719085693 1 7.8946118354797363 + vertex 0.43311101198196411 1 7.9882669448852539 + vertex -4.489497184753418 1 6.6215119361877441 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -7.5812249183654785 1 2.5544118881225586 + vertex -7.9531040191650391 1 -0.86495202779769897 + vertex -7.9531040191650391 1 0.86495202779769897 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 2.1402270793914795 1 7.708399772644043 + vertex 3.7472670078277588 1 7.0680961608886719 + vertex 0.43311101198196411 1 7.9882669448852539 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -7.9531040191650391 1 -0.86495202779769897 + vertex -6.8548569679260254 1 -4.1244311332702637 + vertex -7.5812249183654785 1 -2.5544118881225586 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -7.5812249183654785 1 2.5544118881225586 + vertex -6.8548569679260254 1 -4.1244311332702637 + vertex -7.9531040191650391 1 -0.86495202779769897 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 3.7472670078277588 1 7.0680961608886719 + vertex 5.1790900230407715 1 6.0972962379455566 + vertex 0.43311101198196411 1 7.9882669448852539 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -6.8548569679260254 1 4.1244311332702637 + vertex -4.489497184753418 1 -6.6215119361877441 + vertex -7.5812249183654785 1 2.5544118881225586 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -6.8548569679260254 1 -4.1244311332702637 + vertex -4.489497184753418 1 -6.6215119361877441 + vertex -5.8079638481140137 1 -5.5015950202941895 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex -4.489497184753418 1 6.6215119361877441 + vertex -4.489497184753418 1 -6.6215119361877441 + vertex -6.8548569679260254 1 4.1244311332702637 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -7.5812249183654785 1 2.5544118881225586 + vertex -4.489497184753418 1 -6.6215119361877441 + vertex -6.8548569679260254 1 -4.1244311332702637 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 6.368743896484375 1 4.8413939476013184 + vertex 7.2606029510498047 1 3.3591129779815674 + vertex 5.1790900230407715 1 6.0972962379455566 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 5.1790900230407715 1 6.0972962379455566 + vertex 7.2606029510498047 1 3.3591129779815674 + vertex 0.43311101198196411 1 7.9882669448852539 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -4.489497184753418 1 -6.6215119361877441 + vertex -1.2942559719085693 1 -7.8946118354797363 + vertex -2.9611051082611084 1 -7.4318141937255859 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex 0.43311101198196411 1 7.9882669448852539 + vertex -1.2942559719085693 1 -7.8946118354797363 + vertex -4.489497184753418 1 6.6215119361877441 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -4.489497184753418 1 6.6215119361877441 + vertex -1.2942559719085693 1 -7.8946118354797363 + vertex -4.489497184753418 1 -6.6215119361877441 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 8 1 -1.2246468525851679e-16 + vertex 7.8129639625549316 1 -1.7197639942169189 + vertex 7.8129639625549316 1 1.7197639942169189 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex 7.8129639625549316 1 1.7197639942169189 + vertex 7.8129639625549316 1 -1.7197639942169189 + vertex 7.2606029510498047 1 3.3591129779815674 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -1.2942559719085693 1 -7.8946118354797363 + vertex 2.1402270793914795 1 -7.708399772644043 + vertex 0.43311101198196411 1 -7.9882669448852539 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -1.2942559719085693 1 -7.8946118354797363 + vertex 3.7472670078277588 1 -7.0680961608886719 + vertex 2.1402270793914795 1 -7.708399772644043 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 7.2606029510498047 1 -3.3591129779815674 + vertex 6.368743896484375 1 -4.8413939476013184 + vertex 7.8129639625549316 1 -1.7197639942169189 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex 7.2606029510498047 1 3.3591129779815674 + vertex 6.368743896484375 1 -4.8413939476013184 + vertex 0.43311101198196411 1 7.9882669448852539 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 7.8129639625549316 1 -1.7197639942169189 + vertex 6.368743896484375 1 -4.8413939476013184 + vertex 7.2606029510498047 1 3.3591129779815674 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex 6.368743896484375 1 -4.8413939476013184 + vertex 5.1790900230407715 1 -6.0972962379455566 + vertex 0.43311101198196411 1 7.9882669448852539 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.43311101198196411 1 7.9882669448852539 + vertex 5.1790900230407715 1 -6.0972962379455566 + vertex -1.2942559719085693 1 -7.8946118354797363 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -1.2942559719085693 1 -7.8946118354797363 + vertex 5.1790900230407715 1 -6.0972962379455566 + vertex 3.7472670078277588 1 -7.0680961608886719 + endloop + endfacet + facet normal -2.7145736657710727e-24 -1 1.2246466944387791e-16 + outer loop + vertex -4.489497184753418 8.1090132752106967e-16 6.6215119361877441 + vertex -60 7.3478803743571783e-15 60 + vertex -5.8079638481140137 6.7375107619063344e-16 5.5015950202941895 + endloop + endfacet + facet normal 9.8604014504559914e-24 -1 1.2246468194816157e-16 + outer loop + vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637 + vertex -5.8079638481140137 6.7375107619063344e-16 5.5015950202941895 + vertex -60 7.3478803743571783e-15 60 + endloop + endfacet + facet normal 2.3750917541729913e-23 -1 1.2246469696643964e-16 + outer loop + vertex -2.9611051082611084 9.1013478424237758e-16 7.4318141937255859 + vertex -60 7.3478803743571783e-15 60 + vertex -4.489497184753418 8.1090132752106967e-16 6.6215119361877441 + endloop + endfacet + facet normal 3.140053166932519e-24 -1 1.2246467555621105e-16 + outer loop + vertex -7.5812249183654785 3.1282522869811294e-16 2.5544118881225586 + vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637 + vertex -60 7.3478803743571783e-15 60 + endloop + endfacet + facet normal -4.6556805959120687e-24 -1 1.2246466614397647e-16 + outer loop + vertex -1.2942559719085693 9.668111351717021e-16 7.8946118354797363 + vertex -60 7.3478803743571783e-15 60 + vertex -2.9611051082611084 9.1013478424237758e-16 7.4318141937255859 + endloop + endfacet + facet normal 2.1338697076538101e-24 -1 1.2246467463807433e-16 + outer loop + vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897 + vertex -7.5812249183654785 3.1282522869811294e-16 2.5544118881225586 + vertex -60 7.3478803743571783e-15 60 + endloop + endfacet + facet normal 1.0466145348730118e-23 -1 1.2246468318133267e-16 + outer loop + vertex 0.43311101198196411 9.7828059655223577e-16 7.9882669448852539 + vertex -60 7.3478803743571783e-15 60 + vertex -1.2942559719085693 9.668111351717021e-16 7.8946118354797363 + endloop + endfacet + facet normal 1.1505000566059115e-23 -1 1.2246468288594578e-16 + outer loop + vertex -7.9531040191650391 -1.0592607579580095e-16 -0.86495202779769897 + vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897 + vertex -60 7.3478803743571783e-15 60 + endloop + endfacet + facet normal -9.8604014504559914e-24 -1 1.2246468194816157e-16 + outer loop + vertex -60 -7.3478803743571783e-15 -60 + vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895 + vertex -6.8548569679260254 -5.0509712845296802e-16 -4.1244311332702637 + endloop + endfacet + facet normal -3.140053166932519e-24 -1 1.2246467555621105e-16 + outer loop + vertex -60 -7.3478803743571783e-15 -60 + vertex -6.8548569679260254 -5.0509712845296802e-16 -4.1244311332702637 + vertex -7.5812249183654785 -3.1282522869811294e-16 -2.5544118881225586 + endloop + endfacet + facet normal -2.1338697076538101e-24 -1 1.2246467463807433e-16 + outer loop + vertex -60 -7.3478803743571783e-15 -60 + vertex -7.5812249183654785 -3.1282522869811294e-16 -2.5544118881225586 + vertex -7.9531040191650391 -1.0592607579580095e-16 -0.86495202779769897 + endloop + endfacet + facet normal -1.6585455949044178e-25 -1 1.2246467290595297e-16 + outer loop + vertex -60 -7.3478803743571783e-15 -60 + vertex -7.9531040191650391 -1.0592607579580095e-16 -0.86495202779769897 + vertex -60 7.3478803743571783e-15 60 + endloop + endfacet + facet normal -3.7720394482795526e-23 -1 1.2246471422019109e-16 + outer loop + vertex 60 7.3478803743571783e-15 60 + vertex 0.43311101198196411 9.7828059655223577e-16 7.9882669448852539 + vertex 2.1402270793914795 9.4400667889101139e-16 7.708399772644043 + endloop + endfacet + facet normal 8.8771827388911874e-24 -1 1.2246466266075848e-16 + outer loop + vertex 60 7.3478803743571783e-15 60 + vertex 2.1402270793914795 9.4400667889101139e-16 7.708399772644043 + vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719 + endloop + endfacet + facet normal -1.3032959457950054e-24 -1 1.2246467347993763e-16 + outer loop + vertex 60 7.3478803743571783e-15 60 + vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719 + vertex 5.1790900230407715 7.4670342989924536e-16 6.0972962379455566 + endloop + endfacet + facet normal 0 -1 1.2246467102058172e-16 + outer loop + vertex 60 7.3478803743571783e-15 60 + vertex -60 7.3478803743571783e-15 60 + vertex 0.43311101198196411 9.7828059655223577e-16 7.9882669448852539 + endloop + endfacet + facet normal 8.1790643130613495e-25 -1 1.2246467132260199e-16 + outer loop + vertex 6.368743896484375 5.9289976967196074e-16 4.8413939476013184 + vertex 60 7.3478803743571783e-15 60 + vertex 5.1790900230407715 7.4670342989924536e-16 6.0972962379455566 + endloop + endfacet + facet normal 2.7145738562238688e-24 -1 1.2246466944387788e-16 + outer loop + vertex -4.489497184753418 -8.1090132752106967e-16 -6.6215119361877441 + vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895 + vertex -60 -7.3478803743571783e-15 -60 + endloop + endfacet + facet normal -9.4851118116718549e-24 -1 1.2246468134032765e-16 + outer loop + vertex 7.2606029510498047 4.1137269461126327e-16 3.3591129779815674 + vertex 60 7.3478803743571783e-15 60 + vertex 6.368743896484375 5.9289976967196074e-16 4.8413939476013184 + endloop + endfacet + facet normal -2.3750917541729936e-23 -1 1.2246469696643964e-16 + outer loop + vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859 + vertex -4.489497184753418 -8.1090132752106967e-16 -6.6215119361877441 + vertex -60 -7.3478803743571783e-15 -60 + endloop + endfacet + facet normal -4.7315581860572422e-24 -1 1.2246467691420446e-16 + outer loop + vertex 7.8129639625549316 2.106103483513679e-16 1.7197639942169189 + vertex 60 7.3478803743571783e-15 60 + vertex 7.2606029510498047 4.1137269461126327e-16 3.3591129779815674 + endloop + endfacet + facet normal 4.6556805959120643e-24 -1 1.2246466614397657e-16 + outer loop + vertex -1.2942559719085693 -9.668111351717021e-16 -7.8946118354797363 + vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859 + vertex -60 -7.3478803743571783e-15 -60 + endloop + endfacet + facet normal -7.942874688939922e-24 -1 1.2246467978977771e-16 + outer loop + vertex 8 0 0 + vertex 60 7.3478803743571783e-15 60 + vertex 7.8129639625549316 2.106103483513679e-16 1.7197639942169189 + endloop + endfacet + facet normal -1.0466145348730109e-23 -1 1.224646831813325e-16 + outer loop + vertex 0.43311101198196411 -9.7828059655223577e-16 -7.9882669448852539 + vertex -1.2942559719085693 -9.668111351717021e-16 -7.8946118354797363 + vertex -60 -7.3478803743571783e-15 -60 + endloop + endfacet + facet normal 7.942874688939922e-24 -1 1.2246467978977771e-16 + outer loop + vertex 60 -7.3478803743571783e-15 -60 + vertex 8 0 0 + vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189 + endloop + endfacet + facet normal 4.7315582396553985e-24 -1 1.2246467691420446e-16 + outer loop + vertex 60 -7.3478803743571783e-15 -60 + vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189 + vertex 7.2606029510498047 -4.1137269461126327e-16 -3.3591129779815674 + endloop + endfacet + facet normal 9.4851117135931716e-24 -1 1.2246468134032765e-16 + outer loop + vertex 60 -7.3478803743571783e-15 -60 + vertex 7.2606029510498047 -4.1137269461126327e-16 -3.3591129779815674 + vertex 6.368743896484375 -5.9289976967196074e-16 -4.8413939476013184 + endloop + endfacet + facet normal -8.1790624146971067e-25 -1 1.224646713226018e-16 + outer loop + vertex 60 -7.3478803743571783e-15 -60 + vertex 6.368743896484375 -5.9289976967196074e-16 -4.8413939476013184 + vertex 5.1790900230407715 -7.4670342989924536e-16 -6.0972962379455566 + endloop + endfacet + facet normal 1.3032959457950054e-24 -1 1.2246467347993763e-16 + outer loop + vertex 60 -7.3478803743571783e-15 -60 + vertex 5.1790900230407715 -7.4670342989924536e-16 -6.0972962379455566 + vertex 3.7472670078277588 -8.655921273429117e-16 -7.0680961608886719 + endloop + endfacet + facet normal -8.8771827388911874e-24 -1 1.2246466266075848e-16 + outer loop + vertex 60 -7.3478803743571783e-15 -60 + vertex 3.7472670078277588 -8.655921273429117e-16 -7.0680961608886719 + vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043 + endloop + endfacet + facet normal 3.7720394482795526e-23 -1 1.2246471422019109e-16 + outer loop + vertex 60 -7.3478803743571783e-15 -60 + vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043 + vertex 0.43311101198196411 -9.7828059655223577e-16 -7.9882669448852539 + endloop + endfacet + facet normal 0 -1 1.2246467102058172e-16 + outer loop + vertex 60 -7.3478803743571783e-15 -60 + vertex 0.43311101198196411 -9.7828059655223577e-16 -7.9882669448852539 + vertex -60 -7.3478803743571783e-15 -60 + endloop + endfacet + facet normal 0 -1 1.2246467290595297e-16 + outer loop + vertex 60 -7.3478803743571783e-15 -60 + vertex 60 7.3478803743571783e-15 60 + vertex 8 0 0 + endloop + endfacet + facet normal -5.5610874107037022e-23 -1 1.2246473171814796e-16 + outer loop + vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637 + vertex -4.489497184753418 8.1090132752106967e-16 6.6215119361877441 + vertex -5.8079638481140137 6.7375107619063344e-16 5.5015950202941895 + endloop + endfacet + facet normal 3.5336500887342006e-23 -1 1.2246468288594578e-16 + outer loop + vertex -7.5812249183654785 -3.1282522869811294e-16 -2.5544118881225586 + vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897 + vertex -7.9531040191650391 -1.0592607579580095e-16 -0.86495202779769897 + endloop + endfacet + facet normal -6.92615645630674e-24 -1 1.224646743215047e-16 + outer loop + vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719 + vertex -1.2942559719085693 9.668111351717021e-16 7.8946118354797363 + vertex -2.9611051082611084 9.1013478424237758e-16 7.4318141937255859 + endloop + endfacet + facet normal 6.5046913229555174e-24 -1 1.2246475624605834e-16 + outer loop + vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719 + vertex 0.43311101198196411 9.7828059655223577e-16 7.9882669448852539 + vertex -1.2942559719085693 9.668111351717021e-16 7.8946118354797363 + endloop + endfacet + facet normal -8.4660190461211364e-23 -1 1.2246442789979388e-16 + outer loop + vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719 + vertex 2.1402270793914795 9.4400667889101139e-16 7.708399772644043 + vertex 0.43311101198196411 9.7828059655223577e-16 7.9882669448852539 + endloop + endfacet + facet normal 5.747249094393101e-24 -1 1.2246467966791322e-16 + outer loop + vertex -6.8548569679260254 -5.0509712845296802e-16 -4.1244311332702637 + vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897 + vertex -7.5812249183654785 -3.1282522869811294e-16 -2.5544118881225586 + endloop + endfacet + facet normal -1.0202516191171447e-23 -1 1.2246467735352452e-16 + outer loop + vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895 + vertex -7.5812249183654785 3.1282522869811294e-16 2.5544118881225586 + vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897 + endloop + endfacet + facet normal -3.7938552191334051e-24 -1 1.2246467876417735e-16 + outer loop + vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895 + vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637 + vertex -7.5812249183654785 3.1282522869811294e-16 2.5544118881225586 + endloop + endfacet + facet normal -2.0443883565058697e-23 -1 1.2246467390280494e-16 + outer loop + vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895 + vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897 + vertex -6.8548569679260254 -5.0509712845296802e-16 -4.1244311332702637 + endloop + endfacet + facet normal -9.2000602155814685e-24 -1 1.2246466183307963e-16 + outer loop + vertex 6.368743896484375 5.9289976967196074e-16 4.8413939476013184 + vertex 5.1790900230407715 7.4670342989924536e-16 6.0972962379455566 + vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719 + endloop + endfacet + facet normal -1.0652601301104021e-22 -1 1.2246454083605884e-16 + outer loop + vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859 + vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895 + vertex -4.489497184753418 -8.1090132752106967e-16 -6.6215119361877441 + endloop + endfacet + facet normal 3.0093036565001882e-23 -1 1.2246468500393508e-16 + outer loop + vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859 + vertex -2.9611051082611084 9.1013478424237758e-16 7.4318141937255859 + vertex -4.489497184753418 8.1090132752106967e-16 6.6215119361877441 + endloop + endfacet + facet normal -2.4039170381415668e-24 -1 1.2246468560094203e-16 + outer loop + vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859 + vertex 7.2606029510498047 4.1137269461126327e-16 3.3591129779815674 + vertex 6.368743896484375 5.9289976967196074e-16 4.8413939476013184 + endloop + endfacet + facet normal -2.547683748911312e-24 -1 1.2246468145404106e-16 + outer loop + vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859 + vertex -4.489497184753418 8.1090132752106967e-16 6.6215119361877441 + vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637 + endloop + endfacet + facet normal -6.3469708514441707e-24 -1 1.2246468500393508e-16 + outer loop + vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859 + vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719 + vertex -2.9611051082611084 9.1013478424237758e-16 7.4318141937255859 + endloop + endfacet + facet normal 5.7339184803149965e-24 -1 1.2246467941472114e-16 + outer loop + vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859 + vertex 6.368743896484375 5.9289976967196074e-16 4.8413939476013184 + vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719 + endloop + endfacet + facet normal -1.3741936668902775e-23 -1 1.2246467768225861e-16 + outer loop + vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859 + vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637 + vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895 + endloop + endfacet + facet normal 6.7308336531038825e-24 -1 1.2246467361801442e-16 + outer loop + vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189 + vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859 + vertex -1.2942559719085693 -9.668111351717021e-16 -7.8946118354797363 + endloop + endfacet + facet normal 6.3666292080684972e-24 -1 1.2246468065361937e-16 + outer loop + vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189 + vertex 7.8129639625549316 2.106103483513679e-16 1.7197639942169189 + vertex 7.2606029510498047 4.1137269461126327e-16 3.3591129779815674 + endloop + endfacet + facet normal 0 -1 1.2246468065361937e-16 + outer loop + vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189 + vertex 8 0 0 + vertex 7.8129639625549316 2.106103483513679e-16 1.7197639942169189 + endloop + endfacet + facet normal 3.1842828908146993e-24 -1 1.2246468030751846e-16 + outer loop + vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189 + vertex 7.2606029510498047 4.1137269461126327e-16 3.3591129779815674 + vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859 + endloop + endfacet + facet normal 2.774103235630015e-24 -1 1.2246492738336706e-16 + outer loop + vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043 + vertex -1.2942559719085693 -9.668111351717021e-16 -7.8946118354797363 + vertex 0.43311101198196411 -9.7828059655223577e-16 -7.9882669448852539 + endloop + endfacet + facet normal 1.7384802803360558e-23 -1 1.2246465790458427e-16 + outer loop + vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043 + vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189 + vertex -1.2942559719085693 -9.668111351717021e-16 -7.8946118354797363 + endloop + endfacet + facet normal 3.2253718924354727e-23 -1 1.2246466764090838e-16 + outer loop + vertex 6.368743896484375 -5.9289976967196074e-16 -4.8413939476013184 + vertex 7.2606029510498047 -4.1137269461126327e-16 -3.3591129779815674 + vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189 + endloop + endfacet + facet normal -3.383977019878155e-23 -1 1.2246472531209143e-16 + outer loop + vertex 5.1790900230407715 -7.4670342989924536e-16 -6.0972962379455566 + vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043 + vertex 3.7472670078277588 -8.655921273429117e-16 -7.0680961608886719 + endloop + endfacet + facet normal -1.3726847622115549e-23 -1 1.2246468737510366e-16 + outer loop + vertex 5.1790900230407715 -7.4670342989924536e-16 -6.0972962379455566 + vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189 + vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043 + endloop + endfacet + facet normal -2.4794069352434339e-23 -1 1.2246469403403049e-16 + outer loop + vertex 5.1790900230407715 -7.4670342989924536e-16 -6.0972962379455566 + vertex 6.368743896484375 -5.9289976967196074e-16 -4.8413939476013184 + vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189 + endloop + endfacet +endsolid diff --git a/apps/cpu/Multiphase/backup/JetBreakupR.Binary.stl b/apps/cpu/Multiphase/backup/JetBreakupR.Binary.stl new file mode 100644 index 0000000000000000000000000000000000000000..164487a33a2bf6c3b0d783229fa13bbae5522820 Binary files /dev/null and b/apps/cpu/Multiphase/backup/JetBreakupR.Binary.stl differ diff --git a/apps/cpu/Multiphase/backup/inlet1.stl b/apps/cpu/Multiphase/backup/inlet1.stl new file mode 100644 index 0000000000000000000000000000000000000000..e3339340584bb199967b3f7fc4b2571c5cc64a75 --- /dev/null +++ b/apps/cpu/Multiphase/backup/inlet1.stl @@ -0,0 +1,1710 @@ +solid Visualization Toolkit generated SLA File + facet normal 0 -0.85844862044487247 -0.51289956722178598 + outer loop + vertex 8 -5.4001836776733398 -2.6005914211273193 + vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631 + vertex 8 -4.8490467071533203 -3.5230386257171631 + endloop + endfacet + facet normal 0 -0.85844862044487247 -0.51289956722178598 + outer loop + vertex -7.0000004768371582 -5.4001836776733398 -2.6005914211273193 + vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631 + vertex 8 -5.4001836776733398 -2.6005914211273193 + endloop + endfacet + facet normal 0 -0.75307168647452871 -0.65793847359035706 + outer loop + vertex 8 -4.8490467071533203 -3.5230386257171631 + vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631 + vertex 8 -4.1420578956604004 -4.3322529792785645 + endloop + endfacet + facet normal -3.483186817680354e-17 0.99597429384365632 0.089639310587654369 + outer loop + vertex 8 5.9937515258789062 2.5014704053256086e-15 + vertex -7.0000004768371582 5.9937515258789062 -3.3272004739564633e-15 + vertex 8 5.8974294662475586 1.070225715637207 + endloop + endfacet + facet normal 0 -0.75307168647452871 -0.65793847359035706 + outer loop + vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631 + vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645 + vertex 8 -4.1420578956604004 -4.3322529792785645 + endloop + endfacet + facet normal 0 -0.62348983541065761 -0.78183145571126211 + outer loop + vertex 8 -4.1420578956604004 -4.3322529792785645 + vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645 + vertex 8 -3.3019397258758545 -5.0022249221801758 + endloop + endfacet + facet normal -0 0.96396290563681286 0.26603668272671144 + outer loop + vertex 8 5.8974294662475586 1.070225715637207 + vertex -7.0000004768371582 5.8974294662475586 1.070225715637207 + vertex 8 5.6115593910217285 2.106053352355957 + endloop + endfacet + facet normal -0 0.99597429384365654 0.089639310587653898 + outer loop + vertex -7.0000004768371582 5.9937515258789062 -3.3272004739564633e-15 + vertex -7.0000004768371582 5.8974294662475586 1.070225715637207 + vertex 8 5.8974294662475586 1.070225715637207 + endloop + endfacet + facet normal 0 -0.47386859124399539 -0.88059557018669543 + outer loop + vertex 8 -3.3019397258758545 -5.0022249221801758 + vertex -7.0000004768371582 -3.3019397258758545 -5.0022249221801758 + vertex 8 -2.3556942939758301 -5.5114212036132812 + endloop + endfacet + facet normal 0 -0.62348983541065761 -0.78183145571126211 + outer loop + vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645 + vertex -7.0000004768371582 -3.3019397258758545 -5.0022249221801758 + vertex 8 -3.3019397258758545 -5.0022249221801758 + endloop + endfacet + facet normal -0 0.90096871492997632 0.43388405676796565 + outer loop + vertex 8 5.6115593910217285 2.106053352355957 + vertex -7.0000004768371582 5.6115593910217285 2.106053352355957 + vertex 8 5.1453285217285156 3.0741908550262451 + endloop + endfacet + facet normal -0 0.96396290563681286 0.26603668272671144 + outer loop + vertex -7.0000004768371582 5.8974294662475586 1.070225715637207 + vertex -7.0000004768371582 5.6115593910217285 2.106053352355957 + vertex 8 5.6115593910217285 2.106053352355957 + endloop + endfacet + facet normal 0 -0.47386859124399539 -0.88059557018669543 + outer loop + vertex -7.0000004768371582 -3.3019397258758545 -5.0022249221801758 + vertex -7.0000004768371582 -2.3556942939758301 -5.5114212036132812 + vertex 8 -2.3556942939758301 -5.5114212036132812 + endloop + endfacet + facet normal -0 0.90096871492997632 0.43388405676796565 + outer loop + vertex -7.0000004768371582 5.6115593910217285 2.106053352355957 + vertex -7.0000004768371582 5.1453285217285156 3.0741908550262451 + vertex 8 5.1453285217285156 3.0741908550262451 + endloop + endfacet + facet normal 0 -0.30901698225917551 -0.95105652023180642 + outer loop + vertex 8 -2.3556942939758301 -5.5114212036132812 + vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332 + vertex 8 -1.3337352275848389 -5.8434758186340332 + endloop + endfacet + facet normal 0 -0.13423310024304191 -0.99094978419652602 + outer loop + vertex 8 -1.3337352275848389 -5.8434758186340332 + vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332 + vertex 8 -0.26890864968299866 -5.9877161979675293 + endloop + endfacet + facet normal 0 -0.30901698225917551 -0.95105652023180642 + outer loop + vertex -7.0000004768371582 -2.3556942939758301 -5.5114212036132812 + vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332 + vertex 8 -2.3556942939758301 -5.5114212036132812 + endloop + endfacet + facet normal -0 0.80901707821253466 0.58778513689991641 + outer loop + vertex 8 5.1453285217285156 3.0741908550262451 + vertex -7.0000004768371582 4.5137233734130859 3.9435210227966309 + vertex 8 4.5137233734130859 3.9435210227966309 + endloop + endfacet + facet normal 0 0.80901707821253466 0.58778513689991641 + outer loop + vertex -7.0000004768371582 5.1453285217285156 3.0741908550262451 + vertex -7.0000004768371582 4.5137233734130859 3.9435210227966309 + vertex 8 5.1453285217285156 3.0741908550262451 + endloop + endfacet + facet normal 0 0.044864920280647716 -0.99899306250254383 + outer loop + vertex 8 -0.26890864968299866 -5.9877161979675293 + vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293 + vertex 8 0.80456084012985229 -5.9395065307617188 + endloop + endfacet + facet normal 0 -0.13423310024304191 -0.99094978419652602 + outer loop + vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332 + vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293 + vertex 8 -0.26890864968299866 -5.9877161979675293 + endloop + endfacet + facet normal -0 0.69106276312575432 0.72279475469942178 + outer loop + vertex 8 4.5137233734130859 3.9435210227966309 + vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812 + vertex 8 3.7370429039001465 4.6861038208007812 + endloop + endfacet + facet normal 0 0.69106276312575432 0.72279475469942178 + outer loop + vertex -7.0000004768371582 4.5137233734130859 3.9435210227966309 + vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812 + vertex 8 4.5137233734130859 3.9435210227966309 + endloop + endfacet + facet normal 0 0.22252075334182159 -0.97492795340588534 + outer loop + vertex 8 0.80456084012985229 -5.9395065307617188 + vertex -7.0000004768371582 0.80456084012985229 -5.9395065307617188 + vertex 8 1.8521710634231567 -5.7003965377807617 + endloop + endfacet + facet normal 0 0.044864920280647716 -0.99899306250254383 + outer loop + vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293 + vertex -7.0000004768371582 0.80456084012985229 -5.9395065307617188 + vertex 8 0.80456084012985229 -5.9395065307617188 + endloop + endfacet + facet normal -0 0.55089693770547221 0.83457328259819885 + outer loop + vertex 8 3.7370429039001465 4.6861038208007812 + vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598 + vertex 8 2.8402509689331055 5.2780709266662598 + endloop + endfacet + facet normal 0 0.39302502509892845 -0.91952777535319008 + outer loop + vertex 8 1.8521710634231567 -5.7003965377807617 + vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617 + vertex 8 2.8402509689331055 -5.2780709266662598 + endloop + endfacet + facet normal 0 0.55089693770547221 0.83457328259819885 + outer loop + vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812 + vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598 + vertex 8 3.7370429039001465 4.6861038208007812 + endloop + endfacet + facet normal 0 0.22252075334182159 -0.97492795340588534 + outer loop + vertex -7.0000004768371582 0.80456084012985229 -5.9395065307617188 + vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617 + vertex 8 1.8521710634231567 -5.7003965377807617 + endloop + endfacet + facet normal 0 0.39302502509892845 0.91952777535319008 + outer loop + vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598 + vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617 + vertex 8 2.8402509689331055 5.2780709266662598 + endloop + endfacet + facet normal -0 0.39302502509892845 0.91952777535319008 + outer loop + vertex 8 2.8402509689331055 5.2780709266662598 + vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617 + vertex 8 1.8521710634231567 5.7003965377807617 + endloop + endfacet + facet normal 0 0.55089693770547221 -0.83457328259819885 + outer loop + vertex 8 2.8402509689331055 -5.2780709266662598 + vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598 + vertex 8 3.7370429039001465 -4.6861038208007812 + endloop + endfacet + facet normal -0 0.22252075334182159 0.97492795340588534 + outer loop + vertex 8 1.8521710634231567 5.7003965377807617 + vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617 + vertex 8 0.80456084012985229 5.9395065307617188 + endloop + endfacet + facet normal 0 0.39302502509892845 -0.91952777535319008 + outer loop + vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617 + vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598 + vertex 8 2.8402509689331055 -5.2780709266662598 + endloop + endfacet + facet normal -0 0.22252075334182159 0.97492795340588534 + outer loop + vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617 + vertex -7.0000004768371582 0.80456084012985229 5.9395065307617188 + vertex 8 0.80456084012985229 5.9395065307617188 + endloop + endfacet + facet normal 0 0.69106276312575432 -0.72279475469942178 + outer loop + vertex 8 3.7370429039001465 -4.6861038208007812 + vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812 + vertex 8 4.5137233734130859 -3.9435210227966309 + endloop + endfacet + facet normal 0 0.55089693770547221 -0.83457328259819885 + outer loop + vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598 + vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812 + vertex 8 3.7370429039001465 -4.6861038208007812 + endloop + endfacet + facet normal 0 0.044864920280647716 0.99899306250254383 + outer loop + vertex -7.0000004768371582 0.80456084012985229 5.9395065307617188 + vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293 + vertex 8 0.80456084012985229 5.9395065307617188 + endloop + endfacet + facet normal -0 0.044864920280647716 0.99899306250254383 + outer loop + vertex 8 0.80456084012985229 5.9395065307617188 + vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293 + vertex 8 -0.26890864968299866 5.9877161979675293 + endloop + endfacet + facet normal 0 0.80901707821253466 -0.58778513689991641 + outer loop + vertex 8 4.5137233734130859 -3.9435210227966309 + vertex -7.0000004768371582 4.5137233734130859 -3.9435210227966309 + vertex 8 5.1453285217285156 -3.0741908550262451 + endloop + endfacet + facet normal 0 -0.13423310024304191 0.99094978419652602 + outer loop + vertex 8 -0.26890864968299866 5.9877161979675293 + vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293 + vertex 8 -1.3337352275848389 5.8434758186340332 + endloop + endfacet + facet normal 0 0.69106276312575432 -0.72279475469942178 + outer loop + vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812 + vertex -7.0000004768371582 4.5137233734130859 -3.9435210227966309 + vertex 8 4.5137233734130859 -3.9435210227966309 + endloop + endfacet + facet normal 0 -0.13423310024304191 0.99094978419652602 + outer loop + vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293 + vertex -7.0000004768371582 -1.3337352275848389 5.8434758186340332 + vertex 8 -1.3337352275848389 5.8434758186340332 + endloop + endfacet + facet normal 0 0.80901707821253466 -0.58778513689991641 + outer loop + vertex -7.0000004768371582 4.5137233734130859 -3.9435210227966309 + vertex -7.0000004768371582 5.1453285217285156 -3.0741908550262451 + vertex 8 5.1453285217285156 -3.0741908550262451 + endloop + endfacet + facet normal 0 0.90096871492997632 -0.43388405676796565 + outer loop + vertex -7.0000004768371582 5.1453285217285156 -3.0741908550262451 + vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957 + vertex 8 5.1453285217285156 -3.0741908550262451 + endloop + endfacet + facet normal 0 -0.30901698225917551 0.95105652023180642 + outer loop + vertex -7.0000004768371582 -1.3337352275848389 5.8434758186340332 + vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812 + vertex 8 -1.3337352275848389 5.8434758186340332 + endloop + endfacet + facet normal 0 0.90096871492997632 -0.43388405676796565 + outer loop + vertex 8 5.1453285217285156 -3.0741908550262451 + vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957 + vertex 8 5.6115593910217285 -2.106053352355957 + endloop + endfacet + facet normal 0 -0.30901698225917551 0.95105652023180642 + outer loop + vertex 8 -1.3337352275848389 5.8434758186340332 + vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812 + vertex 8 -2.3556942939758301 5.5114212036132812 + endloop + endfacet + facet normal 0 0.96396290563681286 -0.26603668272671144 + outer loop + vertex 8 5.6115593910217285 -2.106053352355957 + vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957 + vertex 8 5.8974294662475586 -1.070225715637207 + endloop + endfacet + facet normal 0 -0.47386859124399539 0.88059557018669543 + outer loop + vertex 8 -2.3556942939758301 5.5114212036132812 + vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812 + vertex 8 -3.3019397258758545 5.0022249221801758 + endloop + endfacet + facet normal 0 0.96396290563681286 -0.26603668272671144 + outer loop + vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957 + vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207 + vertex 8 5.8974294662475586 -1.070225715637207 + endloop + endfacet + facet normal 0 -0.47386859124399539 0.88059557018669543 + outer loop + vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812 + vertex -7.0000004768371582 -3.3019397258758545 5.0022249221801758 + vertex 8 -3.3019397258758545 5.0022249221801758 + endloop + endfacet + facet normal 0 0.99597429384365654 -0.089639310587653981 + outer loop + vertex 8 5.8974294662475586 -1.070225715637207 + vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207 + vertex 8 5.9937515258789062 2.5014704053256086e-15 + endloop + endfacet + facet normal 3.4831868176803565e-17 0.99597429384365632 -0.089639310587654439 + outer loop + vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207 + vertex -7.0000004768371582 5.9937515258789062 -3.3272004739564633e-15 + vertex 8 5.9937515258789062 2.5014704053256086e-15 + endloop + endfacet + facet normal 0 -0.62348983541065761 0.78183145571126211 + outer loop + vertex -7.0000004768371582 -3.3019397258758545 5.0022249221801758 + vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645 + vertex 8 -3.3019397258758545 5.0022249221801758 + endloop + endfacet + facet normal 0 -0.62348983541065761 0.78183145571126211 + outer loop + vertex 8 -3.3019397258758545 5.0022249221801758 + vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645 + vertex 8 -4.1420578956604004 4.3322529792785645 + endloop + endfacet + facet normal 0 -0.75307168647452871 0.65793847359035706 + outer loop + vertex 8 -4.1420578956604004 4.3322529792785645 + vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645 + vertex 8 -4.8490467071533203 3.5230386257171631 + endloop + endfacet + facet normal 0 -0.75307168647452871 0.65793847359035706 + outer loop + vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645 + vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631 + vertex 8 -4.8490467071533203 3.5230386257171631 + endloop + endfacet + facet normal 0 -0.85844862044487247 0.51289956722178598 + outer loop + vertex 8 -4.8490467071533203 3.5230386257171631 + vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631 + vertex 8 -5.4001836776733398 2.6005914211273193 + endloop + endfacet + facet normal 0 -0.85844862044487247 0.51289956722178598 + outer loop + vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631 + vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193 + vertex 8 -5.4001836776733398 2.6005914211273193 + endloop + endfacet + facet normal 0 -0.93623494328775736 0.35137463051132423 + outer loop + vertex 8 -5.4001836776733398 2.6005914211273193 + vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193 + vertex 8 -5.7777538299560547 1.5945587158203125 + endloop + endfacet + facet normal 0 -0.93623494328775736 0.35137463051132423 + outer loop + vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193 + vertex -7.0000004768371582 -5.7777538299560547 1.5945587158203125 + vertex 8 -5.7777538299560547 1.5945587158203125 + endloop + endfacet + facet normal 0 -0.98392955450267261 0.17855708268274328 + outer loop + vertex -7.0000004768371582 -5.7777538299560547 1.5945587158203125 + vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812 + vertex 8 -5.7777538299560547 1.5945587158203125 + endloop + endfacet + facet normal 0 -0.98392955450267261 0.17855708268274328 + outer loop + vertex 8 -5.7777538299560547 1.5945587158203125 + vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812 + vertex 8 -5.9696226119995117 0.53727573156356812 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 8 -5.9696226119995117 0.53727573156356812 + vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812 + vertex 8 -5.9696226119995117 -0.53727573156356812 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812 + vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812 + vertex 8 -5.9696226119995117 -0.53727573156356812 + endloop + endfacet + facet normal 0 -0.98392955450267261 -0.17855708268274328 + outer loop + vertex 8 -5.9696226119995117 -0.53727573156356812 + vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812 + vertex 8 -5.7777538299560547 -1.5945587158203125 + endloop + endfacet + facet normal 0 -0.98392955450267261 -0.17855708268274328 + outer loop + vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812 + vertex -7.0000004768371582 -5.7777538299560547 -1.5945587158203125 + vertex 8 -5.7777538299560547 -1.5945587158203125 + endloop + endfacet + facet normal 0 -0.93623494328775736 -0.35137463051132423 + outer loop + vertex 8 -5.7777538299560547 -1.5945587158203125 + vertex -7.0000004768371582 -5.7777538299560547 -1.5945587158203125 + vertex 8 -5.4001836776733398 -2.6005914211273193 + endloop + endfacet + facet normal 0 -0.93623494328775736 -0.35137463051132423 + outer loop + vertex -7.0000004768371582 -5.7777538299560547 -1.5945587158203125 + vertex -7.0000004768371582 -5.4001836776733398 -2.6005914211273193 + vertex 8 -5.4001836776733398 -2.6005914211273193 + endloop + endfacet + facet normal -0 0.23931571466750717 0.97094180500850835 + outer loop + vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498 + vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301 + vertex 8 -0.89344334602355957 -2.3558163642883301 + endloop + endfacet + facet normal 0 0.23931571466750717 0.97094180500850835 + outer loop + vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498 + vertex 8 -0.89344334602355957 -2.3558163642883301 + vertex 8 -0.30369770526885986 -2.5011756420135498 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498 + vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498 + vertex 8 -0.30369770526885986 -2.5011756420135498 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498 + vertex 8 -0.30369770526885986 -2.5011756420135498 + vertex 8 0.30369770526885986 -2.5011756420135498 + endloop + endfacet + facet normal 4.6838001325319123e-17 -0.99270884511338364 -0.12053691896532001 + outer loop + vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298 + vertex -7.0000004768371582 2.5195460319519043 -1.398628955198418e-15 + vertex 8 2.5195460319519043 4.4300420299627722e-15 + endloop + endfacet + facet normal 0 -0.23931571466750717 0.97094180500850835 + outer loop + vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301 + vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498 + vertex 8 0.30369770526885986 -2.5011756420135498 + endloop + endfacet + facet normal 0 -0.99270884511338353 -0.12053691896532118 + outer loop + vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298 + vertex 8 2.5195460319519043 4.4300420299627722e-15 + vertex 8 2.4463324546813965 0.60296684503555298 + endloop + endfacet + facet normal 0 -0.23931571466750717 0.97094180500850835 + outer loop + vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301 + vertex 8 0.30369770526885986 -2.5011756420135498 + vertex 8 0.89344334602355957 -2.3558163642883301 + endloop + endfacet + facet normal 0 -0.93501633902348258 -0.35460463301982359 + outer loop + vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165 + vertex 8 2.4463324546813965 0.60296684503555298 + vertex 8 2.2309472560882568 1.1708914041519165 + endloop + endfacet + facet normal 0 -0.46472313027195961 0.88545604757674512 + outer loop + vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963 + vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301 + vertex 8 0.89344334602355957 -2.3558163642883301 + endloop + endfacet + facet normal 0 -0.93501633902348258 -0.35460463301982359 + outer loop + vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165 + vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298 + vertex 8 2.4463324546813965 0.60296684503555298 + endloop + endfacet + facet normal 0 -0.46472313027195961 0.88545604757674512 + outer loop + vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963 + vertex 8 0.89344334602355957 -2.3558163642883301 + vertex 8 1.4312652349472046 -2.0735456943511963 + endloop + endfacet + facet normal 0 -0.66312261734283129 0.74851078440353358 + outer loop + vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314 + vertex 8 1.4312652349472046 -2.0735456943511963 + vertex 8 1.8859072923660278 -1.6707680225372314 + endloop + endfacet + facet normal 0 -0.82298382978185469 -0.56806479904812901 + outer loop + vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314 + vertex 8 2.2309472560882568 1.1708914041519165 + vertex 8 1.8859072923660278 1.6707680225372314 + endloop + endfacet + facet normal 0 -0.66312261734283129 0.74851078440353358 + outer loop + vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314 + vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963 + vertex 8 1.4312652349472046 -2.0735456943511963 + endloop + endfacet + facet normal 0 -0.82298382978185469 -0.56806479904812901 + outer loop + vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314 + vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165 + vertex 8 2.2309472560882568 1.1708914041519165 + endloop + endfacet + facet normal 0 -0.82298382978185469 0.56806479904812901 + outer loop + vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165 + vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314 + vertex 8 1.8859072923660278 -1.6707680225372314 + endloop + endfacet + facet normal 0 -0.82298382978185469 0.56806479904812901 + outer loop + vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165 + vertex 8 1.8859072923660278 -1.6707680225372314 + vertex 8 2.2309472560882568 -1.1708914041519165 + endloop + endfacet + facet normal 0 -0.66312261734283129 -0.74851078440353358 + outer loop + vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963 + vertex 8 1.8859072923660278 1.6707680225372314 + vertex 8 1.4312652349472046 2.0735456943511963 + endloop + endfacet + facet normal 0 -0.66312261734283129 -0.74851078440353358 + outer loop + vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963 + vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314 + vertex 8 1.8859072923660278 1.6707680225372314 + endloop + endfacet + facet normal 0 -0.93501633902348258 0.35460463301982359 + outer loop + vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298 + vertex 8 2.2309472560882568 -1.1708914041519165 + vertex 8 2.4463324546813965 -0.60296684503555298 + endloop + endfacet + facet normal 0 -0.93501633902348258 0.35460463301982359 + outer loop + vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298 + vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165 + vertex 8 2.2309472560882568 -1.1708914041519165 + endloop + endfacet + facet normal 0 -0.46472313027195961 -0.88545604757674512 + outer loop + vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301 + vertex 8 1.4312652349472046 2.0735456943511963 + vertex 8 0.89344334602355957 2.3558163642883301 + endloop + endfacet + facet normal 0 -0.46472313027195961 -0.88545604757674512 + outer loop + vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301 + vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963 + vertex 8 1.4312652349472046 2.0735456943511963 + endloop + endfacet + facet normal -4.721925413423835e-17 -0.99270884511338364 0.1205369189653194 + outer loop + vertex -7.0000004768371582 2.5195460319519043 -1.398628955198418e-15 + vertex 8 2.4463324546813965 -0.60296684503555298 + vertex 8 2.5195460319519043 4.4300420299627722e-15 + endloop + endfacet + facet normal 0 -0.99270884511338364 0.12053691896532057 + outer loop + vertex -7.0000004768371582 2.5195460319519043 -1.398628955198418e-15 + vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298 + vertex 8 2.4463324546813965 -0.60296684503555298 + endloop + endfacet + facet normal 0 -0.23931571466750717 -0.97094180500850835 + outer loop + vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498 + vertex 8 0.89344334602355957 2.3558163642883301 + vertex 8 0.30369770526885986 2.5011756420135498 + endloop + endfacet + facet normal 0 -0.23931571466750717 -0.97094180500850835 + outer loop + vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498 + vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301 + vertex 8 0.89344334602355957 2.3558163642883301 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498 + vertex 8 0.30369770526885986 2.5011756420135498 + vertex 8 -0.30369770526885986 2.5011756420135498 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498 + vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498 + vertex 8 0.30369770526885986 2.5011756420135498 + endloop + endfacet + facet normal 0 0.23931571466750717 -0.97094180500850835 + outer loop + vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301 + vertex 8 -0.30369770526885986 2.5011756420135498 + vertex 8 -0.89344334602355957 2.3558163642883301 + endloop + endfacet + facet normal 0 0.23931571466750717 -0.97094180500850835 + outer loop + vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301 + vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498 + vertex 8 -0.30369770526885986 2.5011756420135498 + endloop + endfacet + facet normal 0 0.46472313027195961 -0.88545604757674512 + outer loop + vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963 + vertex 8 -0.89344334602355957 2.3558163642883301 + vertex 8 -1.4312652349472046 2.0735456943511963 + endloop + endfacet + facet normal 0 0.46472313027195961 -0.88545604757674512 + outer loop + vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963 + vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301 + vertex 8 -0.89344334602355957 2.3558163642883301 + endloop + endfacet + facet normal 0 0.66312261734283129 -0.74851078440353358 + outer loop + vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314 + vertex 8 -1.4312652349472046 2.0735456943511963 + vertex 8 -1.8859072923660278 1.6707680225372314 + endloop + endfacet + facet normal 0 0.66312261734283129 -0.74851078440353358 + outer loop + vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314 + vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963 + vertex 8 -1.4312652349472046 2.0735456943511963 + endloop + endfacet + facet normal 0 0.82298382978185469 -0.56806479904812901 + outer loop + vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165 + vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314 + vertex 8 -1.8859072923660278 1.6707680225372314 + endloop + endfacet + facet normal 0 0.82298382978185469 -0.56806479904812901 + outer loop + vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165 + vertex 8 -1.8859072923660278 1.6707680225372314 + vertex 8 -2.2309472560882568 1.1708914041519165 + endloop + endfacet + facet normal 0 0.93501633902348258 -0.35460463301982359 + outer loop + vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298 + vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165 + vertex 8 -2.2309472560882568 1.1708914041519165 + endloop + endfacet + facet normal 0 0.93501633902348258 -0.35460463301982359 + outer loop + vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298 + vertex 8 -2.2309472560882568 1.1708914041519165 + vertex 8 -2.4463324546813965 0.60296684503555298 + endloop + endfacet + facet normal 0 0.99270884511338353 -0.12053691896532118 + outer loop + vertex -7.0000004768371582 -2.5195460319519043 4.5044424394342746e-15 + vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298 + vertex 8 -2.4463324546813965 0.60296684503555298 + endloop + endfacet + facet normal -2.208642532085365e-17 0.99270884511338364 -0.12053691896532064 + outer loop + vertex -7.0000004768371582 -2.5195460319519043 4.5044424394342746e-15 + vertex 8 -2.4463324546813965 0.60296684503555298 + vertex 8 -2.5195460319519043 1.7763568394002505e-15 + endloop + endfacet + facet normal 2.192233482989147e-17 0.99270884511338364 0.1205369189653194 + outer loop + vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298 + vertex -7.0000004768371582 -2.5195460319519043 4.5044424394342746e-15 + vertex 8 -2.5195460319519043 1.7763568394002505e-15 + endloop + endfacet + facet normal 0 0.99270884511338364 0.12053691896531993 + outer loop + vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298 + vertex 8 -2.5195460319519043 1.7763568394002505e-15 + vertex 8 -2.4463324546813965 -0.60296684503555298 + endloop + endfacet + facet normal -0 0.93501633902348258 0.35460463301982359 + outer loop + vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165 + vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298 + vertex 8 -2.4463324546813965 -0.60296684503555298 + endloop + endfacet + facet normal 0 0.93501633902348258 0.35460463301982359 + outer loop + vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165 + vertex 8 -2.4463324546813965 -0.60296684503555298 + vertex 8 -2.2309472560882568 -1.1708914041519165 + endloop + endfacet + facet normal -0 0.82298382978185469 0.56806479904812901 + outer loop + vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314 + vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165 + vertex 8 -2.2309472560882568 -1.1708914041519165 + endloop + endfacet + facet normal 0 0.82298382978185469 0.56806479904812901 + outer loop + vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314 + vertex 8 -2.2309472560882568 -1.1708914041519165 + vertex 8 -1.8859072923660278 -1.6707680225372314 + endloop + endfacet + facet normal -0 0.66312261734283129 0.74851078440353358 + outer loop + vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963 + vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314 + vertex 8 -1.8859072923660278 -1.6707680225372314 + endloop + endfacet + facet normal 0 0.66312261734283129 0.74851078440353358 + outer loop + vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963 + vertex 8 -1.8859072923660278 -1.6707680225372314 + vertex 8 -1.4312652349472046 -2.0735456943511963 + endloop + endfacet + facet normal -0 0.46472313027195961 0.88545604757674512 + outer loop + vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301 + vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963 + vertex 8 -1.4312652349472046 -2.0735456943511963 + endloop + endfacet + facet normal 0 0.46472313027195961 0.88545604757674512 + outer loop + vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301 + vertex 8 -1.4312652349472046 -2.0735456943511963 + vertex 8 -0.89344334602355957 -2.3558163642883301 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963 + vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645 + vertex -7.0000004768371582 -3.3019397258758545 5.0022249221801758 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 -3.3019397258758545 -5.0022249221801758 + vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645 + vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645 + vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314 + vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314 + vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812 + vertex -7.0000004768371582 4.5137233734130859 3.9435210227966309 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963 + vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812 + vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645 + vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631 + vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314 + vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631 + vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963 + vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598 + vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301 + vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598 + vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631 + vertex -7.0000004768371582 -5.4001836776733398 -2.6005914211273193 + vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165 + vertex -7.0000004768371582 -5.4001836776733398 -2.6005914211273193 + vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812 + vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314 + vertex -7.0000004768371582 4.5137233734130859 -3.9435210227966309 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 4.5137233734130859 -3.9435210227966309 + vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314 + vertex -7.0000004768371582 5.1453285217285156 -3.0741908550262451 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598 + vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963 + vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812 + vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963 + vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 5.1453285217285156 -3.0741908550262451 + vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165 + vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314 + vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165 + vertex -7.0000004768371582 5.1453285217285156 -3.0741908550262451 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617 + vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301 + vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598 + vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301 + vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301 + vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617 + vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498 + vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617 + vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957 + vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298 + vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165 + vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298 + vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 -5.4001836776733398 -2.6005914211273193 + vertex -7.0000004768371582 -5.7777538299560547 -1.5945587158203125 + vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293 + vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498 + vertex -7.0000004768371582 0.80456084012985229 -5.9395065307617188 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 0.80456084012985229 -5.9395065307617188 + vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498 + vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498 + vertex -7.0000004768371582 0.80456084012985229 5.9395065307617188 + vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617 + vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498 + vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 5.9937515258789062 -4.6580806635390486e-15 + vertex -7.0000004768371582 2.5195460319519043 -1.9580805584536089e-15 + vertex -7.0000004768371582 5.8974294662475586 1.070225715637207 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207 + vertex -7.0000004768371582 2.5195460319519043 -1.9580805584536089e-15 + vertex -7.0000004768371582 5.9937515258789062 -4.6580806635390486e-15 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298 + vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812 + vertex -7.0000004768371582 -2.5195460319519043 5.0638941485685839e-15 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 -5.7777538299560547 -1.5945587158203125 + vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812 + vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298 + vertex -7.0000004768371582 2.5195460319519043 -1.9580805584536089e-15 + vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498 + vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293 + vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332 + vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498 + vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498 + vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293 + vertex -7.0000004768371582 0.80456084012985229 5.9395065307617188 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293 + vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498 + vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 -2.5195460319519043 5.0638941485685839e-15 + vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812 + vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 5.8974294662475586 1.070225715637207 + vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298 + vertex -7.0000004768371582 5.6115593910217285 2.106053352355957 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812 + vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812 + vertex -7.0000004768371582 -2.5195460319519043 5.0638941485685839e-15 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301 + vertex -7.0000004768371582 -1.3337352275848389 5.8434758186340332 + vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 2.5195460319519043 -1.9580805584536089e-15 + vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298 + vertex -7.0000004768371582 5.8974294662475586 1.070225715637207 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498 + vertex -7.0000004768371582 -1.3337352275848389 5.8434758186340332 + vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812 + vertex -7.0000004768371582 -5.7777538299560547 1.5945587158203125 + vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 -2.3556942939758301 -5.5114212036132812 + vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301 + vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963 + vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812 + vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332 + vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301 + vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 5.6115593910217285 2.106053352355957 + vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165 + vertex -7.0000004768371582 5.1453285217285156 3.0741908550262451 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298 + vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165 + vertex -7.0000004768371582 5.6115593910217285 2.106053352355957 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301 + vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812 + vertex -7.0000004768371582 -1.3337352275848389 5.8434758186340332 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298 + vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193 + vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -7.0000004768371582 -5.7777538299560547 1.5945587158203125 + vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193 + vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -7.0000004768371582 -2.3556942939758301 -5.5114212036132812 + vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963 + vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 -3.3019397258758545 -5.0022249221801758 + vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963 + vertex -7.0000004768371582 -2.3556942939758301 -5.5114212036132812 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963 + vertex -7.0000004768371582 -3.3019397258758545 5.0022249221801758 + vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193 + vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631 + vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165 + vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631 + vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 5.1453285217285156 3.0741908550262451 + vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314 + vertex -7.0000004768371582 4.5137233734130859 3.9435210227966309 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314 + vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645 + vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631 + vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645 + vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165 + vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314 + vertex -7.0000004768371582 5.1453285217285156 3.0741908550262451 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 -4.1420578956604004 -4.3322529792785645 + vertex 8 -3.3019397258758545 -5.0022249221801758 + vertex 8 -1.4312652349472046 -2.0735456943511963 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 -1.8859072923660278 -1.6707680225372314 + vertex 8 -4.1420578956604004 -4.3322529792785645 + vertex 8 -1.4312652349472046 -2.0735456943511963 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 3.7370429039001465 4.6861038208007812 + vertex 8 1.8859072923660278 1.6707680225372314 + vertex 8 4.5137233734130859 3.9435210227966309 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 8 3.7370429039001465 4.6861038208007812 + vertex 8 1.4312652349472046 2.0735456943511963 + vertex 8 1.8859072923660278 1.6707680225372314 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 -4.8490467071533203 -3.5230386257171631 + vertex 8 -4.1420578956604004 -4.3322529792785645 + vertex 8 -1.8859072923660278 -1.6707680225372314 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 -4.8490467071533203 -3.5230386257171631 + vertex 8 -1.8859072923660278 -1.6707680225372314 + vertex 8 -2.2309472560882568 -1.1708914041519165 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 2.8402509689331055 5.2780709266662598 + vertex 8 1.4312652349472046 2.0735456943511963 + vertex 8 3.7370429039001465 4.6861038208007812 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 8 2.8402509689331055 5.2780709266662598 + vertex 8 0.89344334602355957 2.3558163642883301 + vertex 8 1.4312652349472046 2.0735456943511963 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 -5.4001836776733398 -2.6005914211273193 + vertex 8 -4.8490467071533203 -3.5230386257171631 + vertex 8 -2.2309472560882568 -1.1708914041519165 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 -5.4001836776733398 -2.6005914211273193 + vertex 8 -2.2309472560882568 -1.1708914041519165 + vertex 8 -2.4463324546813965 -0.60296684503555298 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 1.8859072923660278 -1.6707680225372314 + vertex 8 3.7370429039001465 -4.6861038208007812 + vertex 8 4.5137233734130859 -3.9435210227966309 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 1.8859072923660278 -1.6707680225372314 + vertex 8 4.5137233734130859 -3.9435210227966309 + vertex 8 5.1453285217285156 -3.0741908550262451 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 1.4312652349472046 -2.0735456943511963 + vertex 8 2.8402509689331055 -5.2780709266662598 + vertex 8 3.7370429039001465 -4.6861038208007812 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 1.4312652349472046 -2.0735456943511963 + vertex 8 3.7370429039001465 -4.6861038208007812 + vertex 8 1.8859072923660278 -1.6707680225372314 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 2.2309472560882568 -1.1708914041519165 + vertex 8 5.1453285217285156 -3.0741908550262451 + vertex 8 5.6115593910217285 -2.106053352355957 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 8 2.2309472560882568 -1.1708914041519165 + vertex 8 1.8859072923660278 -1.6707680225372314 + vertex 8 5.1453285217285156 -3.0741908550262451 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 0.89344334602355957 -2.3558163642883301 + vertex 8 1.8521710634231567 -5.7003965377807617 + vertex 8 2.8402509689331055 -5.2780709266662598 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 8 1.8521710634231567 5.7003965377807617 + vertex 8 0.30369770526885986 2.5011756420135498 + vertex 8 0.89344334602355957 2.3558163642883301 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 0.89344334602355957 -2.3558163642883301 + vertex 8 2.8402509689331055 -5.2780709266662598 + vertex 8 1.4312652349472046 -2.0735456943511963 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 1.8521710634231567 5.7003965377807617 + vertex 8 0.89344334602355957 2.3558163642883301 + vertex 8 2.8402509689331055 5.2780709266662598 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 2.4463324546813965 -0.60296684503555298 + vertex 8 5.6115593910217285 -2.106053352355957 + vertex 8 5.8974294662475586 -1.070225715637207 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 -5.7777538299560547 -1.5945587158203125 + vertex 8 -5.4001836776733398 -2.6005914211273193 + vertex 8 -2.4463324546813965 -0.60296684503555298 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 8 2.4463324546813965 -0.60296684503555298 + vertex 8 2.2309472560882568 -1.1708914041519165 + vertex 8 5.6115593910217285 -2.106053352355957 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 0.80456084012985229 5.9395065307617188 + vertex 8 0.30369770526885986 2.5011756420135498 + vertex 8 1.8521710634231567 5.7003965377807617 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 0.30369770526885986 -2.5011756420135498 + vertex 8 -0.26890864968299866 -5.9877161979675293 + vertex 8 0.80456084012985229 -5.9395065307617188 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 0.30369770526885986 -2.5011756420135498 + vertex 8 0.80456084012985229 -5.9395065307617188 + vertex 8 1.8521710634231567 -5.7003965377807617 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 0.30369770526885986 -2.5011756420135498 + vertex 8 1.8521710634231567 -5.7003965377807617 + vertex 8 0.89344334602355957 -2.3558163642883301 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 -5.9696226119995117 -0.53727573156356812 + vertex 8 -2.4463324546813965 -0.60296684503555298 + vertex 8 -2.5195460319519043 -8.8817841970012523e-15 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 2.5195460319519043 -5.3290705182007514e-15 + vertex 8 5.9937515258789062 -8.8817841970012523e-15 + vertex 8 5.8974294662475586 1.070225715637207 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 -5.9696226119995117 -0.53727573156356812 + vertex 8 -5.7777538299560547 -1.5945587158203125 + vertex 8 -2.4463324546813965 -0.60296684503555298 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 -0.26890864968299866 5.9877161979675293 + vertex 8 -0.30369770526885986 2.5011756420135498 + vertex 8 0.30369770526885986 2.5011756420135498 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 2.5195460319519043 -5.3290705182007514e-15 + vertex 8 5.8974294662475586 -1.070225715637207 + vertex 8 5.9937515258789062 -8.8817841970012523e-15 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 8 2.5195460319519043 -5.3290705182007514e-15 + vertex 8 2.4463324546813965 -0.60296684503555298 + vertex 8 5.8974294662475586 -1.070225715637207 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 8 -0.30369770526885986 -2.5011756420135498 + vertex 8 -1.3337352275848389 -5.8434758186340332 + vertex 8 -0.26890864968299866 -5.9877161979675293 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 -0.30369770526885986 -2.5011756420135498 + vertex 8 -0.26890864968299866 -5.9877161979675293 + vertex 8 0.30369770526885986 -2.5011756420135498 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 -0.26890864968299866 5.9877161979675293 + vertex 8 0.30369770526885986 2.5011756420135498 + vertex 8 0.80456084012985229 5.9395065307617188 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 -5.9696226119995117 0.53727573156356812 + vertex 8 -2.5195460319519043 -8.8817841970012523e-15 + vertex 8 -2.4463324546813965 0.60296684503555298 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 -5.9696226119995117 0.53727573156356812 + vertex 8 -5.9696226119995117 -0.53727573156356812 + vertex 8 -2.5195460319519043 -8.8817841970012523e-15 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 2.4463324546813965 0.60296684503555298 + vertex 8 5.8974294662475586 1.070225715637207 + vertex 8 5.6115593910217285 2.106053352355957 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 -1.3337352275848389 5.8434758186340332 + vertex 8 -0.89344334602355957 2.3558163642883301 + vertex 8 -0.30369770526885986 2.5011756420135498 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 -1.3337352275848389 5.8434758186340332 + vertex 8 -0.30369770526885986 2.5011756420135498 + vertex 8 -0.26890864968299866 5.9877161979675293 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 2.4463324546813965 0.60296684503555298 + vertex 8 2.5195460319519043 -5.3290705182007514e-15 + vertex 8 5.8974294662475586 1.070225715637207 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 -5.7777538299560547 1.5945587158203125 + vertex 8 -5.9696226119995117 0.53727573156356812 + vertex 8 -2.4463324546813965 0.60296684503555298 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 -0.89344334602355957 -2.3558163642883301 + vertex 8 -1.3337352275848389 -5.8434758186340332 + vertex 8 -0.30369770526885986 -2.5011756420135498 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 -2.3556942939758301 5.5114212036132812 + vertex 8 -1.4312652349472046 2.0735456943511963 + vertex 8 -0.89344334602355957 2.3558163642883301 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 8 -0.89344334602355957 -2.3558163642883301 + vertex 8 -2.3556942939758301 -5.5114212036132812 + vertex 8 -1.3337352275848389 -5.8434758186340332 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 -2.3556942939758301 5.5114212036132812 + vertex 8 -0.89344334602355957 2.3558163642883301 + vertex 8 -1.3337352275848389 5.8434758186340332 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 2.2309472560882568 1.1708914041519165 + vertex 8 5.6115593910217285 2.106053352355957 + vertex 8 5.1453285217285156 3.0741908550262451 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 -5.4001836776733398 2.6005914211273193 + vertex 8 -2.4463324546813965 0.60296684503555298 + vertex 8 -2.2309472560882568 1.1708914041519165 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 8 -5.4001836776733398 2.6005914211273193 + vertex 8 -5.7777538299560547 1.5945587158203125 + vertex 8 -2.4463324546813965 0.60296684503555298 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 2.2309472560882568 1.1708914041519165 + vertex 8 2.4463324546813965 0.60296684503555298 + vertex 8 5.6115593910217285 2.106053352355957 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 -1.4312652349472046 -2.0735456943511963 + vertex 8 -2.3556942939758301 -5.5114212036132812 + vertex 8 -0.89344334602355957 -2.3558163642883301 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 -3.3019397258758545 5.0022249221801758 + vertex 8 -1.4312652349472046 2.0735456943511963 + vertex 8 -2.3556942939758301 5.5114212036132812 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 8 -1.4312652349472046 -2.0735456943511963 + vertex 8 -3.3019397258758545 -5.0022249221801758 + vertex 8 -2.3556942939758301 -5.5114212036132812 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 -4.8490467071533203 3.5230386257171631 + vertex 8 -2.2309472560882568 1.1708914041519165 + vertex 8 -1.8859072923660278 1.6707680225372314 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 8 -4.8490467071533203 3.5230386257171631 + vertex 8 -5.4001836776733398 2.6005914211273193 + vertex 8 -2.2309472560882568 1.1708914041519165 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 -4.1420578956604004 4.3322529792785645 + vertex 8 -1.8859072923660278 1.6707680225372314 + vertex 8 -1.4312652349472046 2.0735456943511963 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 8 -4.1420578956604004 4.3322529792785645 + vertex 8 -4.8490467071533203 3.5230386257171631 + vertex 8 -1.8859072923660278 1.6707680225372314 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 -4.1420578956604004 4.3322529792785645 + vertex 8 -1.4312652349472046 2.0735456943511963 + vertex 8 -3.3019397258758545 5.0022249221801758 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 8 1.8859072923660278 1.6707680225372314 + vertex 8 5.1453285217285156 3.0741908550262451 + vertex 8 4.5137233734130859 3.9435210227966309 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 8 1.8859072923660278 1.6707680225372314 + vertex 8 2.2309472560882568 1.1708914041519165 + vertex 8 5.1453285217285156 3.0741908550262451 + endloop + endfacet +endsolid diff --git a/apps/cpu/Multiphase/backup/tubeTransformed.stl b/apps/cpu/Multiphase/backup/tubeTransformed.stl new file mode 100644 index 0000000000000000000000000000000000000000..f918dac8b84944d8e46c93df2e0cadec0738b647 Binary files /dev/null and b/apps/cpu/Multiphase/backup/tubeTransformed.stl differ diff --git a/apps/cpu/ViskomatXL/viskomat.cfg b/apps/cpu/ViskomatXL/viskomat.cfg index e178a8b27bfd353835f3f5728b8d1256a4bd81cb..71228231e36810fca21ebe752be2488b5c56264d 100644 --- a/apps/cpu/ViskomatXL/viskomat.cfg +++ b/apps/cpu/ViskomatXL/viskomat.cfg @@ -7,13 +7,14 @@ availMem = 8e9 logToFile = false blocknx = 16 16 16 -boundingBox = -4 171 -9.5 155.5 -76.5 82.5 +#boundingBox = -4 171 -9.5 155.5 -76.5 82.5 +boundingBox = -4 166 -9.5 155.5 -76.5 82.5 deltax = 1 refineLevel = 0 -nuLB = 1.5e-3 -OmegaLB = 4e-5 +#nuLB = 1.5e-4 +OmegaLB = 1e-5 tau0 = 20e-7 resolution = 32 @@ -25,5 +26,5 @@ restartStep = 100000 cpStart = 10000 cpStep = 10000 -outTime = 100 +outTime = 10000 endTime = 100000 \ No newline at end of file diff --git a/apps/cpu/ViskomatXL/viskomat.cpp b/apps/cpu/ViskomatXL/viskomat.cpp index 7c73fe35fbd929b9684378618b42ccd0054baa9e..113d9c6da16bff21267bb723d48adb2a3c9d5619 100644 --- a/apps/cpu/ViskomatXL/viskomat.cpp +++ b/apps/cpu/ViskomatXL/viskomat.cpp @@ -19,7 +19,7 @@ void bflow(string configname) int numOfThreads = config.getValue<int>("numOfThreads"); vector<int> blocknx = config.getVector<int>("blocknx"); vector<double> boundingBox = config.getVector<double>("boundingBox"); - double nuLB = config.getValue<double>("nuLB"); + //double nuLB = config.getValue<double>("nuLB"); double endTime = config.getValue<double>("endTime"); double outTime = config.getValue<double>("outTime"); double availMem = config.getValue<double>("availMem"); @@ -65,12 +65,12 @@ void bflow(string configname) LBMReal rhoLB = 0.0; //akoustic - OmegaLB /= scaleFactor; - nuLB *=scaleFactor; - endTime *= scaleFactor; - //outTime = endTime; - cpStart = endTime; - cpStep = endTime; + //OmegaLB /= scaleFactor; + //nuLB *=scaleFactor; + //endTime *= scaleFactor; + ////outTime = endTime; + //cpStart = endTime; + //cpStep = endTime; //diffusive //OmegaLB /= scaleFactor * scaleFactor; @@ -80,6 +80,16 @@ void bflow(string configname) //cpStart = endTime; //cpStep = endTime; + //double Re = 1.38230076758; + double N = 80; + double Omega = 2 * UbMath::PI / 60.0 * N; + double mu = 1; + double R = 0.165 / 2.0; + double rho = 970; + double Re = Omega * R * R * rho / mu; + + double nuLB = OmegaLB * R * 1e3 * R * 1e3 / Re; + SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter()); // double uWorld = (N * PI) / 30.0; //0.0037699111843 // double rhoWorld = 2350.0; //kg/m^3 @@ -134,9 +144,9 @@ void bflow(string configname) //thix->setOmegaMin(omegaMin); SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter()); - //noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm())); + noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm())); //noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new RheologyHerschelBulkleyModelNoSlipBCAlgorithm())); - noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new RheologyBinghamModelNoSlipBCAlgorithm())); + //noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new RheologyBinghamModelNoSlipBCAlgorithm())); SPtr<BCAdapter> slipBCAdapter(new SlipBCAdapter()); slipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new SimpleSlipBCAlgorithm())); @@ -158,10 +168,10 @@ void bflow(string configname) fctVz.SetExpr("0.0"); SPtr<BCAdapter> velocityBCAdapter(new VelocityBCAdapter(true, true, true, fctVx, fctVy, fctVz, 0, BCFunction::INFCONST)); - //velocityBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithm())); + velocityBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithm())); //velocityBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new SimpleVelocityBCAlgorithm())); //velocityBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityWithDensityBCAlgorithm())); - velocityBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new RheologyBinghamModelVelocityBCAlgorithm())); + //velocityBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new RheologyBinghamModelVelocityBCAlgorithm())); //SPtr<BCAdapter> densityBCAdapter(new DensityBCAdapter()); //densityBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonEqDensityBCAlgorithm())); @@ -179,8 +189,8 @@ void bflow(string configname) bcProc = SPtr<BCProcessor>(new BCProcessor()); //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CumulantLBMKernel()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel()); - SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyBinghamModelLBMKernel()); + SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel()); + //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyBinghamModelLBMKernel()); //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new HerschelBulkleyModelLBMKernel()); //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new BinghamModelLBMKernel()); kernel->setBCProcessor(bcProc); @@ -228,6 +238,9 @@ void bflow(string configname) { UBLOG(logINFO, "Parameters:"); //UBLOG(logINFO, "forcing = " << forcing); + UBLOG(logINFO, "N = " << N << " rpm"); + UBLOG(logINFO, "Omega = " << Omega << " rad/s"); + UBLOG(logINFO, "Re = " << Re); UBLOG(logINFO, "rho = " << rhoLB); UBLOG(logINFO, "uLB = " << OmegaLB); UBLOG(logINFO, "nuLB = " << nuLB); @@ -384,18 +397,18 @@ void bflow(string configname) SPtr<UbScheduler> forceSch(new UbScheduler(100)); SPtr<CalculateTorqueCoProcessor> fp = make_shared<CalculateTorqueCoProcessor>(grid, forceSch, outputPath + "/torque/TorqueRotor.txt", comm); fp->addInteractor(rotorInt); - SPtr<CalculateTorqueCoProcessor> fp2 = make_shared<CalculateTorqueCoProcessor>(grid, forceSch, outputPath + "/torque/TorqueStator.txt", comm); - fp2->addInteractor(statorInt); + //SPtr<CalculateTorqueCoProcessor> fp2 = make_shared<CalculateTorqueCoProcessor>(grid, forceSch, outputPath + "/torque/TorqueStator.txt", comm); + //fp2->addInteractor(statorInt); - SPtr<WriteThixotropyQuantitiesCoProcessor> writeThixotropicMQCoProcessor(new WriteThixotropyQuantitiesCoProcessor(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm)); + //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(fp2); + //calculator->addCoProcessor(fp2); calculator->addCoProcessor(writeMQCoProcessor); - calculator->addCoProcessor(writeThixotropicMQCoProcessor); + //calculator->addCoProcessor(writeThixotropicMQCoProcessor); calculator->addCoProcessor(restartCoProcessor); if (myid == 0) UBLOG(logINFO, "Simulation-start"); diff --git a/src/basics/geometry3d/GbTriFaceMesh3D.cpp b/src/basics/geometry3d/GbTriFaceMesh3D.cpp index 0c13ce378b3a3459aaa21949d5b1b778a43a59a3..92442dd542840595d1ddf07f86e9add0a083c965 100644 --- a/src/basics/geometry3d/GbTriFaceMesh3D.cpp +++ b/src/basics/geometry3d/GbTriFaceMesh3D.cpp @@ -1054,6 +1054,51 @@ void GbTriFaceMesh3D::readMeshFromSTLFileASCII(string filename, bool removeRedun } else { this->calculateValues(); } + //UBLOG(logDEBUG1, "GbTriFaceMesh3DCreator::readMeshFromSTLFile !!! Dieses Format hat leider redundante Knoten ..."); + + //string dummy; + + //double x, y, z; + //int nr = 0; + + //UbFileInputASCII in(filename); + //in.readLine(); + //while (dummy != "endsolid") { + // in.readLine(); + // in.readLine(); + // dummy = in.readString(); + // if (dummy != "vertex") + // throw UbException(UB_EXARGS, "no vertex format"); + // x = in.readDouble(); + // y = in.readDouble(); + // z = in.readDouble(); + // nodes->push_back(GbTriFaceMesh3D::Vertex((float)x, (float)y, (float)z)); + // in.readLine(); + // in.readString(); + // x = in.readDouble(); + // y = in.readDouble(); + // z = in.readDouble(); + // nodes->push_back(GbTriFaceMesh3D::Vertex((float)x, (float)y, (float)z)); + // in.readLine(); + // in.readString(); + // x = in.readDouble(); + // y = in.readDouble(); + // z = in.readDouble(); + // nodes->push_back(GbTriFaceMesh3D::Vertex((float)x, (float)y, (float)z)); + // triangles->push_back(GbTriFaceMesh3D::TriFace(nr, nr + 1, nr + 2)); + // in.readLine(); + // in.readLine(); + // in.readLine(); + // dummy = in.readString(); + // nr += 3; + // // std::cout<<"read mesh "<< nr <<" \n"; + //} + + //if (removeRedundantNodes) { + // this->deleteRedundantNodes(); // dort wird autoamtisch calculateValues() aufgerufen + //} else { + // this->calculateValues(); + //} } /*======================================================================*/ void GbTriFaceMesh3D::readMeshFromSTLFileBinary(string filename, bool removeRedundantNodes) diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseVelocityBCAlgorithm.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseVelocityBCAlgorithm.cpp index 80fe197007a35120c624730d84da071021ea67b6..58c359887fe8b4263d8140038dc03754aeab74bb 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseVelocityBCAlgorithm.cpp +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseVelocityBCAlgorithm.cpp @@ -104,15 +104,15 @@ void MultiphaseVelocityBCAlgorithm::applyBC() phiBC = bcPtr->getBoundaryPhaseField(); - //D3Q27System::calcMultiphaseHeq(htemp, phiBC, vx1, vx2, vx3); - D3Q27System::calcMultiphaseHeq(htemp, phiBC, 0.0, 0.0, 0.0);//16.03.2021 dirty hack! + D3Q27System::calcMultiphaseHeq(htemp, phiBC, vx1, vx2, vx3); + //D3Q27System::calcMultiphaseHeq(htemp, phiBC, bcPtr->getBoundaryVelocityX1(), bcPtr->getBoundaryVelocityX2(), bcPtr->getBoundaryVelocityX2());//30.03.2021 EQ phase field BC! for (int fdir = D3Q27System::STARTF; fdir<=D3Q27System::ENDF; fdir++) { if (bcPtr->hasVelocityBoundaryFlag(fdir)) { - // LBMReal hReturn = htemp[fdir]+h[fdir]-heq[fdir]; + LBMReal hReturn = htemp[fdir]+h[fdir]-heq[fdir]; //17.03.2021 Let us just set the plain eq - LBMReal hReturn = htemp[fdir]; + //LBMReal hReturn = htemp[fdir]; distributionsH->setDistributionForDirection(hReturn, nx1, nx2, nx3, fdir); if (distributionsH2) distributionsH2->setDistributionForDirection(hReturn, nx1, nx2, nx3, fdir); diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOCoProcessor.cpp b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOCoProcessor.cpp index 8de4b7becb9d73ca8b0cba0c060d37afa505fd97..028cb68ca562771b263b801c48c5f3b3791c723f 100644 --- a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOCoProcessor.cpp +++ b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOCoProcessor.cpp @@ -70,7 +70,7 @@ MPIIOCoProcessor::MPIIOCoProcessor(SPtr<Grid3D> grid, SPtr<UbScheduler> s, const //--------------------------------------- - MPI_Type_contiguous(6, MPI_CHAR, &arrayPresenceType); + MPI_Type_contiguous(7, MPI_CHAR, &arrayPresenceType); MPI_Type_commit(&arrayPresenceType); } @@ -441,6 +441,14 @@ void MPIIOCoProcessor::clearAllFiles(int step) MPI_File_set_size(file_handler, new_size); MPI_File_close(&file_handler); + std::string filename10 = path + "/mpi_io_cp/mpi_io_cp_" + UbSystem::toString(step) + "/cpPhaseField.bin"; + int rc10 = MPI_File_open(MPI_COMM_WORLD, filename10.c_str(), MPI_MODE_CREATE | MPI_MODE_WRONLY, info, &file_handler); + if (rc10 != MPI_SUCCESS) + throw UbException(UB_EXARGS, "couldn't open file " + filename10); + MPI_File_set_size(file_handler, new_size); + MPI_File_close(&file_handler); + + /*std::string filename10 = path + "/mpi_io_cp/mpi_io_cp_" + UbSystem::toString(step) + "/cpBC1.bin"; int rc10 = MPI_File_open(MPI_COMM_WORLD, filename10.c_str(), MPI_MODE_CREATE | MPI_MODE_WRONLY, info, &file_handler); if (rc10 != MPI_SUCCESS) throw UbException(UB_EXARGS, "couldn't open file " + filename10); diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationBECoProcessor.cpp b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationBECoProcessor.cpp index 315608fc32549d2dd03524d0bd709df4fb18cd9d..39b32b6aac7110eb873a52351d46560f8843820e 100644 --- a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationBECoProcessor.cpp +++ b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationBECoProcessor.cpp @@ -126,41 +126,47 @@ void MPIIOMigrationBECoProcessor::writeDataSet(int step) bool firstBlock = true; int doubleCountInBlock = 0; int ic = 0; - SPtr<D3Q27EsoTwist3DSplittedVector> D3Q27EsoTwist3DSplittedVectorPtr; - CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr localDistributions; - CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions; - CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr zeroDistributions; - + SPtr<D3Q27EsoTwist3DSplittedVector> D3Q27EsoTwist3DSplittedVectorPtrF, D3Q27EsoTwist3DSplittedVectorPtrH; + CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF, localDistributionsH; + CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF, nonLocalDistributionsH; + CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF, zeroDistributionsH; + for (int level = minInitLevel; level <= maxInitLevel; level++) { for (SPtr<Block3D> block : blocksVector[level]) // blocks of the current level { - D3Q27EsoTwist3DSplittedVectorPtr = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>( + D3Q27EsoTwist3DSplittedVectorPtrF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>( block->getKernel()->getDataSet()->getFdistributions()); - localDistributions = D3Q27EsoTwist3DSplittedVectorPtr->getLocalDistributions(); - nonLocalDistributions = D3Q27EsoTwist3DSplittedVectorPtr->getNonLocalDistributions(); - zeroDistributions = D3Q27EsoTwist3DSplittedVectorPtr->getZeroDistributions(); + localDistributionsF = D3Q27EsoTwist3DSplittedVectorPtrF->getLocalDistributions(); + nonLocalDistributionsF = D3Q27EsoTwist3DSplittedVectorPtrF->getNonLocalDistributions(); + zeroDistributionsF = D3Q27EsoTwist3DSplittedVectorPtrF->getZeroDistributions(); + + D3Q27EsoTwist3DSplittedVectorPtrH = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>( + block->getKernel()->getDataSet()->getHdistributions()); + localDistributionsH = D3Q27EsoTwist3DSplittedVectorPtrH->getLocalDistributions(); + nonLocalDistributionsH = D3Q27EsoTwist3DSplittedVectorPtrH->getNonLocalDistributions(); + zeroDistributionsH = D3Q27EsoTwist3DSplittedVectorPtrH->getZeroDistributions(); if (firstBlock) // && block->getKernel()) // when first (any) valid block... { firstGlobalID = block->getGlobalID(); // id of the block needed to find it while regenerating the grid - if (localDistributions) { - dataSetParamStr1.nx[0] = static_cast<int>(localDistributions->getNX1()); - dataSetParamStr1.nx[1] = static_cast<int>(localDistributions->getNX2()); - dataSetParamStr1.nx[2] = static_cast<int>(localDistributions->getNX3()); - dataSetParamStr1.nx[3] = static_cast<int>(localDistributions->getNX4()); + if (localDistributionsF) { + dataSetParamStr1.nx[0] = static_cast<int>(localDistributionsF->getNX1()); + dataSetParamStr1.nx[1] = static_cast<int>(localDistributionsF->getNX2()); + dataSetParamStr1.nx[2] = static_cast<int>(localDistributionsF->getNX3()); + dataSetParamStr1.nx[3] = static_cast<int>(localDistributionsF->getNX4()); } - if (nonLocalDistributions) { - dataSetParamStr2.nx[0] = static_cast<int>(nonLocalDistributions->getNX1()); - dataSetParamStr2.nx[1] = static_cast<int>(nonLocalDistributions->getNX2()); - dataSetParamStr2.nx[2] = static_cast<int>(nonLocalDistributions->getNX3()); - dataSetParamStr2.nx[3] = static_cast<int>(nonLocalDistributions->getNX4()); + if (nonLocalDistributionsF) { + dataSetParamStr2.nx[0] = static_cast<int>(nonLocalDistributionsF->getNX1()); + dataSetParamStr2.nx[1] = static_cast<int>(nonLocalDistributionsF->getNX2()); + dataSetParamStr2.nx[2] = static_cast<int>(nonLocalDistributionsF->getNX3()); + dataSetParamStr2.nx[3] = static_cast<int>(nonLocalDistributionsF->getNX4()); } - if (zeroDistributions) { - dataSetParamStr3.nx[0] = static_cast<int>(zeroDistributions->getNX1()); - dataSetParamStr3.nx[1] = static_cast<int>(zeroDistributions->getNX2()); - dataSetParamStr3.nx[2] = static_cast<int>(zeroDistributions->getNX3()); + if (zeroDistributionsF) { + dataSetParamStr3.nx[0] = static_cast<int>(zeroDistributionsF->getNX1()); + dataSetParamStr3.nx[1] = static_cast<int>(zeroDistributionsF->getNX2()); + dataSetParamStr3.nx[2] = static_cast<int>(zeroDistributionsF->getNX3()); dataSetParamStr3.nx[3] = 1; } @@ -172,10 +178,11 @@ void MPIIOMigrationBECoProcessor::writeDataSet(int step) dataSetParamStr1.nx3 = dataSetParamStr2.nx3 = dataSetParamStr3.nx3 = static_cast<int>(block->getKernel()->getDataSet()->getFdistributions()->getNX3()); + // Fdistributions + Hdistributions doubleCountInBlock = - dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] + + (dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] + dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3] + - dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3]; + dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3]) * 2; SPtr<CbArray4D<LBMReal, IndexerX4X3X2X1>> averageDensityArray = block->getKernel()->getDataSet()->getAverageDensity(); @@ -219,27 +226,45 @@ void MPIIOMigrationBECoProcessor::writeDataSet(int step) else arrPresence.isRelaxationFactorPresent = false; + SPtr<CbArray3D<LBMReal, IndexerX3X2X1>> phaseField3DPtr = + block->getKernel()->getDataSet()->getPhaseField(); + if (phaseField3DPtr) + arrPresence.isPhaseFieldPresent = true; + else + arrPresence.isPhaseFieldPresent = false; + firstBlock = false; } - if (localDistributions && (dataSetParamStr1.nx[0] > 0) && (dataSetParamStr1.nx[1] > 0) && + if (localDistributionsF && (dataSetParamStr1.nx[0] > 0) && (dataSetParamStr1.nx[1] > 0) && (dataSetParamStr1.nx[2] > 0) && (dataSetParamStr1.nx[3] > 0)) - doubleValuesArray.insert(doubleValuesArray.end(), localDistributions->getDataVector().begin(), - localDistributions->getDataVector().end()); - if (nonLocalDistributions && (dataSetParamStr2.nx[0] > 0) && (dataSetParamStr2.nx[1] > 0) && + doubleValuesArray.insert(doubleValuesArray.end(), localDistributionsF->getDataVector().begin(), + localDistributionsF->getDataVector().end()); + if (nonLocalDistributionsF && (dataSetParamStr2.nx[0] > 0) && (dataSetParamStr2.nx[1] > 0) && (dataSetParamStr2.nx[2] > 0) && (dataSetParamStr2.nx[3] > 0)) - doubleValuesArray.insert(doubleValuesArray.end(), nonLocalDistributions->getDataVector().begin(), - nonLocalDistributions->getDataVector().end()); - if (zeroDistributions && (dataSetParamStr3.nx[0] > 0) && (dataSetParamStr3.nx[1] > 0) && - (dataSetParamStr3.nx[2] > 0)) - doubleValuesArray.insert(doubleValuesArray.end(), zeroDistributions->getDataVector().begin(), - zeroDistributions->getDataVector().end()); + doubleValuesArray.insert(doubleValuesArray.end(), nonLocalDistributionsF->getDataVector().begin(), + nonLocalDistributionsF->getDataVector().end()); + if (zeroDistributionsF && (dataSetParamStr3.nx[0] > 0) && (dataSetParamStr3.nx[1] > 0) && (dataSetParamStr3.nx[2] > 0)) + doubleValuesArray.insert(doubleValuesArray.end(), zeroDistributionsF->getDataVector().begin(), + zeroDistributionsF->getDataVector().end()); + + if (localDistributionsH && (dataSetParamStr1.nx[0] > 0) && (dataSetParamStr1.nx[1] > 0) && + (dataSetParamStr1.nx[2] > 0) && (dataSetParamStr1.nx[3] > 0)) + doubleValuesArray.insert(doubleValuesArray.end(), localDistributionsH->getDataVector().begin(), + localDistributionsH->getDataVector().end()); + if (nonLocalDistributionsH && (dataSetParamStr2.nx[0] > 0) && (dataSetParamStr2.nx[1] > 0) && + (dataSetParamStr2.nx[2] > 0) && (dataSetParamStr2.nx[3] > 0)) + doubleValuesArray.insert(doubleValuesArray.end(), nonLocalDistributionsH->getDataVector().begin(), + nonLocalDistributionsH->getDataVector().end()); + if (zeroDistributionsH && (dataSetParamStr3.nx[0] > 0) && (dataSetParamStr3.nx[1] > 0) && (dataSetParamStr3.nx[2] > 0)) + doubleValuesArray.insert(doubleValuesArray.end(), zeroDistributionsH->getDataVector().begin(), + zeroDistributionsH->getDataVector().end()); ic++; } } - MPI_Type_contiguous(doubleCountInBlock, MPI_DOUBLE, &dataSetDoubleType); + MPI_Type_contiguous(doubleCountInBlock , MPI_DOUBLE, &dataSetDoubleType); MPI_Type_commit(&dataSetDoubleType); if (comm->isRoot()) { @@ -320,6 +345,9 @@ void MPIIOMigrationBECoProcessor::writeDataSet(int step) if (arrPresence.isRelaxationFactorPresent) write3DArray(step, RelaxationFactor, std::string("/cpRelaxationFactor.bin")); // writeRelaxationFactor(step); + + if (arrPresence.isPhaseFieldPresent) + write3DArray(step, PhaseField, std::string("/cpPhaseField.bin")); } void MPIIOMigrationBECoProcessor::write4DArray(int step, Arrays arrayType, std::string fname) @@ -479,6 +507,9 @@ void MPIIOMigrationBECoProcessor::write3DArray(int step, Arrays arrayType, std:: case RelaxationFactor: ___Array = block->getKernel()->getDataSet()->getRelaxationFactor(); break; + case PhaseField: + ___Array = block->getKernel()->getDataSet()->getPhaseField(); + break; default: UB_THROW(UbException(UB_EXARGS, "MPIIOMigrationBECoProcessor::write3DArray : 3D array type does not exist!")); @@ -490,12 +521,11 @@ void MPIIOMigrationBECoProcessor::write3DArray(int step, Arrays arrayType, std:: firstGlobalID = block->getGlobalID(); dataSetParamStr.nx1 = dataSetParamStr.nx2 = dataSetParamStr.nx3 = 0; - dataSetParamStr.nx[0] = static_cast<int>(___Array->getNX1()); - dataSetParamStr.nx[1] = static_cast<int>(___Array->getNX2()); - dataSetParamStr.nx[2] = static_cast<int>(___Array->getNX3()); - dataSetParamStr.nx[3] = 1; - doubleCountInBlock = - dataSetParamStr.nx[0] * dataSetParamStr.nx[1] * dataSetParamStr.nx[2] * dataSetParamStr.nx[3]; + dataSetParamStr.nx[0] = static_cast<int>(___Array->getNX1()); + dataSetParamStr.nx[1] = static_cast<int>(___Array->getNX2()); + dataSetParamStr.nx[2] = static_cast<int>(___Array->getNX3()); + dataSetParamStr.nx[3] = 1; + doubleCountInBlock = dataSetParamStr.nx[0] * dataSetParamStr.nx[1] * dataSetParamStr.nx[2] * dataSetParamStr.nx[3]; firstBlock = false; } @@ -950,9 +980,9 @@ void MPIIOMigrationBECoProcessor::readDataSet(int step) MPI_STATUS_IGNORE); size_t doubleCountInBlock = - dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] + + (dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] + dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3] + - dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3]; + dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3]) * 2; std::vector<double> doubleValuesArray(myBlocksCount * doubleCountInBlock); // double-values in all blocks MPI_Type_contiguous(int(doubleCountInBlock), MPI_DOUBLE, &dataSetDoubleType); @@ -990,7 +1020,8 @@ void MPIIOMigrationBECoProcessor::readDataSet(int step) //-------------------------------------- restore blocks --------------------------------- int blockID; - std::vector<double> vectorsOfValues1, vectorsOfValues2, vectorsOfValues3; + std::vector<double> vectorsOfValuesF1, vectorsOfValuesF2, vectorsOfValuesF3; + std::vector<double> vectorsOfValuesH1, vectorsOfValuesH2, vectorsOfValuesH3; size_t vectorSize1 = dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3]; @@ -1006,35 +1037,62 @@ void MPIIOMigrationBECoProcessor::readDataSet(int step) blockID = (int)(rawDataReceive[r][index]); index += 1; - vectorsOfValues1.assign(rawDataReceive[r].data() + index, rawDataReceive[r].data() + index + vectorSize1); + vectorsOfValuesF1.assign(rawDataReceive[r].data() + index, rawDataReceive[r].data() + index + vectorSize1); + index += vectorSize1; + + vectorsOfValuesF2.assign(rawDataReceive[r].data() + index, rawDataReceive[r].data() + index + vectorSize2); + index += vectorSize2; + + vectorsOfValuesF3.assign(rawDataReceive[r].data() + index, rawDataReceive[r].data() + index + vectorSize3); + index += vectorSize3; + + vectorsOfValuesH1.assign(rawDataReceive[r].data() + index, rawDataReceive[r].data() + index + vectorSize1); index += vectorSize1; - vectorsOfValues2.assign(rawDataReceive[r].data() + index, rawDataReceive[r].data() + index + vectorSize2); + vectorsOfValuesH2.assign(rawDataReceive[r].data() + index, rawDataReceive[r].data() + index + vectorSize2); index += vectorSize2; - vectorsOfValues3.assign(rawDataReceive[r].data() + index, rawDataReceive[r].data() + index + vectorSize3); + vectorsOfValuesH3.assign(rawDataReceive[r].data() + index, rawDataReceive[r].data() + index + vectorSize3); index += vectorSize3; SPtr<DistributionArray3D> mFdistributions(new D3Q27EsoTwist3DSplittedVector()); dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions) ->setLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr( - new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValues1, dataSetParamStr1.nx[0], + new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesF1, dataSetParamStr1.nx[0], dataSetParamStr1.nx[1], dataSetParamStr1.nx[2], dataSetParamStr1.nx[3]))); dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions) ->setNonLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr( - new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValues2, dataSetParamStr2.nx[0], + new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesF2, dataSetParamStr2.nx[0], dataSetParamStr2.nx[1], dataSetParamStr2.nx[2], dataSetParamStr2.nx[3]))); dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions) - ->setZeroDistributions( - CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>( - vectorsOfValues3, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2]))); + ->setZeroDistributions(CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>( + vectorsOfValuesF3, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2]))); dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX1(dataSetParamStr1.nx1); dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX2(dataSetParamStr1.nx2); dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX3(dataSetParamStr1.nx3); + SPtr<DistributionArray3D> mHdistributions(new D3Q27EsoTwist3DSplittedVector()); + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions) + ->setLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr( + new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesH1, dataSetParamStr1.nx[0], + dataSetParamStr1.nx[1], dataSetParamStr1.nx[2], + dataSetParamStr1.nx[3]))); + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions) + ->setNonLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr( + new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesH2, dataSetParamStr2.nx[0], + dataSetParamStr2.nx[1], dataSetParamStr2.nx[2], + dataSetParamStr2.nx[3]))); + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions) + ->setZeroDistributions( CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>( + vectorsOfValuesH3, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2]))); + + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)->setNX1(dataSetParamStr1.nx1); + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)->setNX2(dataSetParamStr1.nx2); + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)->setNX3(dataSetParamStr1.nx3); + // find the nesessary block and fill it SPtr<Block3D> block = grid->getBlock(blockID); this->lbmKernel->setBlock(block); @@ -1045,6 +1103,7 @@ void MPIIOMigrationBECoProcessor::readDataSet(int step) kernel->setDeltaT(LBMSystem::getDeltaT(block->getLevel())); SPtr<DataSet3D> dataSetPtr = SPtr<DataSet3D>(new DataSet3D()); dataSetPtr->setFdistributions(mFdistributions); + dataSetPtr->setHdistributions(mHdistributions); kernel->setDataSet(dataSetPtr); block->setKernel(kernel); } @@ -1091,6 +1150,9 @@ void MPIIOMigrationBECoProcessor::readDataSet(int step) readArray(step, RelaxationFactor, std::string("/cpRelaxationFactor.bin")); // readRelaxationFactor(step); + if (arrPresence.isPhaseFieldPresent) + readArray(step, PhaseField, std::string("/cpPhaseField.bin")); + delete[] rawDataReceive; } @@ -1233,11 +1295,16 @@ void MPIIOMigrationBECoProcessor::readArray(int step, Arrays arrType, std::strin vectorsOfValues, dataSetParamStr.nx[0], dataSetParamStr.nx[1], dataSetParamStr.nx[2])); block->getKernel()->getDataSet()->setRelaxationFactor(___3DArray); break; + case PhaseField: + ___3DArray = CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>( + vectorsOfValues, dataSetParamStr.nx[0], dataSetParamStr.nx[1], dataSetParamStr.nx[2])); + block->getKernel()->getDataSet()->setPhaseField(___3DArray); + break; default: UB_THROW( UbException(UB_EXARGS, "MPIIOMigrationBECoProcessor::readArray : array type does not exist!")); break; - } + } } } diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationBECoProcessor.h b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationBECoProcessor.h index 5eb83b27aa49960501f5fd302a450f2b21f937d8..4d825fde3956dcbe711f49b18b57cd929ba986d9 100644 --- a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationBECoProcessor.h +++ b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationBECoProcessor.h @@ -24,7 +24,8 @@ class MPIIOMigrationBECoProcessor : public MPIIOCoProcessor AverageFluktuations = 3, AverageTriple = 4, ShearStressVal = 5, - RelaxationFactor = 6 + RelaxationFactor = 6, + PhaseField = 7 }; public: diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationCoProcessor.cpp b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationCoProcessor.cpp index dc894e9a5056633fdc1e4fb29f391b2f11be7f7f..b4314e0162a21f8cb5af48399f9efb04abb2ecfa 100644 --- a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationCoProcessor.cpp +++ b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationCoProcessor.cpp @@ -144,10 +144,10 @@ void MPIIOMigrationCoProcessor::writeDataSet(int step) bool firstBlock = true; size_t doubleCountInBlock = 0; int ic = 0; - SPtr<D3Q27EsoTwist3DSplittedVector> D3Q27EsoTwist3DSplittedVectorPtr; - CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr localDistributions; - CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions; - CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr zeroDistributions; + SPtr<D3Q27EsoTwist3DSplittedVector> D3Q27EsoTwist3DSplittedVectorPtrF, D3Q27EsoTwist3DSplittedVectorPtrH; + CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF, localDistributionsH; + CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF, nonLocalDistributionsH; + CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF, zeroDistributionsH; for (int level = minInitLevel; level <= maxInitLevel; level++) { for (SPtr<Block3D> block : blocksVector[level]) // blocks of the current level @@ -160,31 +160,37 @@ void MPIIOMigrationCoProcessor::writeDataSet(int step) dataSetArray[ic].compressible = block->getKernel()->getCompressible(); dataSetArray[ic].withForcing = block->getKernel()->getWithForcing(); - D3Q27EsoTwist3DSplittedVectorPtr = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>( + D3Q27EsoTwist3DSplittedVectorPtrF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>( block->getKernel()->getDataSet()->getFdistributions()); - localDistributions = D3Q27EsoTwist3DSplittedVectorPtr->getLocalDistributions(); - nonLocalDistributions = D3Q27EsoTwist3DSplittedVectorPtr->getNonLocalDistributions(); - zeroDistributions = D3Q27EsoTwist3DSplittedVectorPtr->getZeroDistributions(); + localDistributionsF = D3Q27EsoTwist3DSplittedVectorPtrF->getLocalDistributions(); + nonLocalDistributionsF = D3Q27EsoTwist3DSplittedVectorPtrF->getNonLocalDistributions(); + zeroDistributionsF = D3Q27EsoTwist3DSplittedVectorPtrF->getZeroDistributions(); + + D3Q27EsoTwist3DSplittedVectorPtrH = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>( + block->getKernel()->getDataSet()->getHdistributions()); + localDistributionsH = D3Q27EsoTwist3DSplittedVectorPtrH->getLocalDistributions(); + nonLocalDistributionsH = D3Q27EsoTwist3DSplittedVectorPtrH->getNonLocalDistributions(); + zeroDistributionsH = D3Q27EsoTwist3DSplittedVectorPtrH->getZeroDistributions(); if (firstBlock) // && block->getKernel()) // when first (any) valid block... { - if (localDistributions) { - dataSetParamStr1.nx[0] = static_cast<int>(localDistributions->getNX1()); - dataSetParamStr1.nx[1] = static_cast<int>(localDistributions->getNX2()); - dataSetParamStr1.nx[2] = static_cast<int>(localDistributions->getNX3()); - dataSetParamStr1.nx[3] = static_cast<int>(localDistributions->getNX4()); + if (localDistributionsF) { + dataSetParamStr1.nx[0] = static_cast<int>(localDistributionsF->getNX1()); + dataSetParamStr1.nx[1] = static_cast<int>(localDistributionsF->getNX2()); + dataSetParamStr1.nx[2] = static_cast<int>(localDistributionsF->getNX3()); + dataSetParamStr1.nx[3] = static_cast<int>(localDistributionsF->getNX4()); } - if (nonLocalDistributions) { - dataSetParamStr2.nx[0] = static_cast<int>(nonLocalDistributions->getNX1()); - dataSetParamStr2.nx[1] = static_cast<int>(nonLocalDistributions->getNX2()); - dataSetParamStr2.nx[2] = static_cast<int>(nonLocalDistributions->getNX3()); - dataSetParamStr2.nx[3] = static_cast<int>(nonLocalDistributions->getNX4()); + if (nonLocalDistributionsF) { + dataSetParamStr2.nx[0] = static_cast<int>(nonLocalDistributionsF->getNX1()); + dataSetParamStr2.nx[1] = static_cast<int>(nonLocalDistributionsF->getNX2()); + dataSetParamStr2.nx[2] = static_cast<int>(nonLocalDistributionsF->getNX3()); + dataSetParamStr2.nx[3] = static_cast<int>(nonLocalDistributionsF->getNX4()); } - if (zeroDistributions) { - dataSetParamStr3.nx[0] = static_cast<int>(zeroDistributions->getNX1()); - dataSetParamStr3.nx[1] = static_cast<int>(zeroDistributions->getNX2()); - dataSetParamStr3.nx[2] = static_cast<int>(zeroDistributions->getNX3()); + if (zeroDistributionsF) { + dataSetParamStr3.nx[0] = static_cast<int>(zeroDistributionsF->getNX1()); + dataSetParamStr3.nx[1] = static_cast<int>(zeroDistributionsF->getNX2()); + dataSetParamStr3.nx[2] = static_cast<int>(zeroDistributionsF->getNX3()); dataSetParamStr3.nx[3] = 1; } @@ -196,10 +202,11 @@ void MPIIOMigrationCoProcessor::writeDataSet(int step) dataSetParamStr1.nx3 = dataSetParamStr2.nx3 = dataSetParamStr3.nx3 = static_cast<int>(block->getKernel()->getDataSet()->getFdistributions()->getNX3()); + // Fdistributions + Hdistributions doubleCountInBlock = - dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] + - dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3] + - dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3]; + (dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] + + dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3] + + dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3]) * 2; SPtr<CbArray4D<LBMReal, IndexerX4X3X2X1>> averageDensityArray = block->getKernel()->getDataSet()->getAverageDensity(); @@ -243,21 +250,39 @@ void MPIIOMigrationCoProcessor::writeDataSet(int step) else arrPresence.isRelaxationFactorPresent = false; + SPtr<CbArray3D<LBMReal, IndexerX3X2X1>> phaseField3DPtr = + block->getKernel()->getDataSet()->getPhaseField(); + if (phaseField3DPtr) + arrPresence.isPhaseFieldPresent = true; + else + arrPresence.isPhaseFieldPresent = false; + firstBlock = false; } - if (localDistributions && (dataSetParamStr1.nx[0] > 0) && (dataSetParamStr1.nx[1] > 0) && + if (localDistributionsF && (dataSetParamStr1.nx[0] > 0) && (dataSetParamStr1.nx[1] > 0) && + (dataSetParamStr1.nx[2] > 0) && (dataSetParamStr1.nx[3] > 0)) + doubleValuesArray.insert(doubleValuesArray.end(), localDistributionsF->getDataVector().begin(), + localDistributionsF->getDataVector().end()); + if (nonLocalDistributionsF && (dataSetParamStr2.nx[0] > 0) && (dataSetParamStr2.nx[1] > 0) && + (dataSetParamStr2.nx[2] > 0) && (dataSetParamStr2.nx[3] > 0)) + doubleValuesArray.insert(doubleValuesArray.end(), nonLocalDistributionsF->getDataVector().begin(), + nonLocalDistributionsF->getDataVector().end()); + if (zeroDistributionsF && (dataSetParamStr3.nx[0] > 0) && (dataSetParamStr3.nx[1] > 0) && (dataSetParamStr3.nx[2] > 0)) + doubleValuesArray.insert(doubleValuesArray.end(), zeroDistributionsF->getDataVector().begin(), + zeroDistributionsF->getDataVector().end()); + + if (localDistributionsH && (dataSetParamStr1.nx[0] > 0) && (dataSetParamStr1.nx[1] > 0) && (dataSetParamStr1.nx[2] > 0) && (dataSetParamStr1.nx[3] > 0)) - doubleValuesArray.insert(doubleValuesArray.end(), localDistributions->getDataVector().begin(), - localDistributions->getDataVector().end()); - if (nonLocalDistributions && (dataSetParamStr2.nx[0] > 0) && (dataSetParamStr2.nx[1] > 0) && + doubleValuesArray.insert(doubleValuesArray.end(), localDistributionsH->getDataVector().begin(), + localDistributionsH->getDataVector().end()); + if (nonLocalDistributionsH && (dataSetParamStr2.nx[0] > 0) && (dataSetParamStr2.nx[1] > 0) && (dataSetParamStr2.nx[2] > 0) && (dataSetParamStr2.nx[3] > 0)) - doubleValuesArray.insert(doubleValuesArray.end(), nonLocalDistributions->getDataVector().begin(), - nonLocalDistributions->getDataVector().end()); - if (zeroDistributions && (dataSetParamStr3.nx[0] > 0) && (dataSetParamStr3.nx[1] > 0) && - (dataSetParamStr3.nx[2] > 0)) - doubleValuesArray.insert(doubleValuesArray.end(), zeroDistributions->getDataVector().begin(), - zeroDistributions->getDataVector().end()); + doubleValuesArray.insert(doubleValuesArray.end(), nonLocalDistributionsH->getDataVector().begin(), + nonLocalDistributionsH->getDataVector().end()); + if (zeroDistributionsH && (dataSetParamStr3.nx[0] > 0) && (dataSetParamStr3.nx[1] > 0) && (dataSetParamStr3.nx[2] > 0)) + doubleValuesArray.insert(doubleValuesArray.end(), zeroDistributionsH->getDataVector().begin(), + zeroDistributionsH->getDataVector().end()); ic++; } @@ -349,6 +374,10 @@ void MPIIOMigrationCoProcessor::writeDataSet(int step) if (arrPresence.isRelaxationFactorPresent) write3DArray(step, RelaxationFactor, std::string("/cpRelaxationFactor.bin")); + + if (arrPresence.isPhaseFieldPresent) + write3DArray(step, PhaseField, std::string("/cpPhaseField.bin")); + } void MPIIOMigrationCoProcessor::write4DArray(int step, Arrays arrayType, std::string fname) @@ -520,6 +549,9 @@ void MPIIOMigrationCoProcessor::write3DArray(int step, Arrays arrayType, std::st case RelaxationFactor: ___Array = block->getKernel()->getDataSet()->getRelaxationFactor(); break; + case PhaseField: + ___Array = block->getKernel()->getDataSet()->getPhaseField(); + break; default: UB_THROW(UbException(UB_EXARGS, "MPIIOMigrationCoProcessor::write3DArray : 3D array type does not exist!")); @@ -1572,9 +1604,9 @@ void MPIIOMigrationCoProcessor::readDataSet(int step) MPI_STATUS_IGNORE); size_t doubleCountInBlock = - dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] + + (dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] + dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3] + - dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3]; + dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3] * 2); std::vector<double> doubleValuesArray(blocksCount * doubleCountInBlock); // double-values in all blocks // define MPI_types depending on the block-specific information @@ -1608,42 +1640,73 @@ void MPIIOMigrationCoProcessor::readDataSet(int step) } size_t index = 0, vectorSize = 0; - std::vector<double> vectorsOfValues1, vectorsOfValues2, vectorsOfValues3; + std::vector<double> vectorsOfValuesF1, vectorsOfValuesF2, vectorsOfValuesF3; + std::vector<double> vectorsOfValuesH1, vectorsOfValuesH2, vectorsOfValuesH3; + + size_t vectorSize1 = + dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3]; + size_t vectorSize2 = + dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3]; + size_t vectorSize3 = + dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3]; for (std::size_t n = 0; n < blocksCount; n++) { - vectorSize = dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3]; - vectorsOfValues1.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize); - index += vectorSize; + vectorsOfValuesF1.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize1); + index += vectorSize1; - vectorSize = dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3]; - vectorsOfValues2.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize); - index += vectorSize; + vectorsOfValuesF2.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize2); + index += vectorSize2; - vectorSize = dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3]; - vectorsOfValues3.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize); - index += vectorSize; + vectorsOfValuesF3.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize3); + index += vectorSize3; - SPtr<DistributionArray3D> mFdistributions(new D3Q27EsoTwist3DSplittedVector()); + vectorsOfValuesH1.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize1); + index += vectorSize1; + + vectorsOfValuesH2.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize2); + index += vectorSize2; + + vectorsOfValuesH3.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize3); + index += vectorSize3; + SPtr<DistributionArray3D> mFdistributions(new D3Q27EsoTwist3DSplittedVector()); dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions) ->setLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr( - new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValues1, dataSetParamStr1.nx[0], + new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesF1, dataSetParamStr1.nx[0], dataSetParamStr1.nx[1], dataSetParamStr1.nx[2], dataSetParamStr1.nx[3]))); dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions) ->setNonLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr( - new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValues2, dataSetParamStr2.nx[0], + new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesF2, dataSetParamStr2.nx[0], dataSetParamStr2.nx[1], dataSetParamStr2.nx[2], dataSetParamStr2.nx[3]))); dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions) - ->setZeroDistributions( - CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>( - vectorsOfValues3, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2]))); + ->setZeroDistributions(CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>( + vectorsOfValuesF3, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2]))); dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX1(dataSetParamStr1.nx1); dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX2(dataSetParamStr1.nx2); dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX3(dataSetParamStr1.nx3); + SPtr<DistributionArray3D> mHdistributions(new D3Q27EsoTwist3DSplittedVector()); + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions) + ->setLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr( + new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesH1, dataSetParamStr1.nx[0], + dataSetParamStr1.nx[1], dataSetParamStr1.nx[2], + dataSetParamStr1.nx[3]))); + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions) + ->setNonLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr( + new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesH2, dataSetParamStr2.nx[0], + dataSetParamStr2.nx[1], dataSetParamStr2.nx[2], + dataSetParamStr2.nx[3]))); + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions) + ->setZeroDistributions(CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>( + vectorsOfValuesH3, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2]))); + + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)->setNX1(dataSetParamStr1.nx1); + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)->setNX2(dataSetParamStr1.nx2); + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)->setNX3(dataSetParamStr1.nx3); + // find the nesessary block and fill it SPtr<Block3D> block = grid->getBlock(dataSetArray[n].globalID); this->lbmKernel->setBlock(block); @@ -1655,6 +1718,7 @@ void MPIIOMigrationCoProcessor::readDataSet(int step) kernel->setWithForcing(dataSetArray[n].withForcing); SPtr<DataSet3D> dataSetPtr = SPtr<DataSet3D>(new DataSet3D()); dataSetPtr->setFdistributions(mFdistributions); + dataSetPtr->setHdistributions(mHdistributions); kernel->setDataSet(dataSetPtr); block->setKernel(kernel); } @@ -1701,6 +1765,9 @@ void MPIIOMigrationCoProcessor::readDataSet(int step) if (arrPresence.isRelaxationFactorPresent) readArray(step, RelaxationFactor, std::string("/cpRelaxationFactor.bin")); // readRelaxationFactor(step); + + if (arrPresence.isPhaseFieldPresent) + readArray(step, PhaseField, std::string("/cpPhaseField.bin")); } void MPIIOMigrationCoProcessor::readArray(int step, Arrays arrType, std::string fname) @@ -1825,6 +1892,11 @@ void MPIIOMigrationCoProcessor::readArray(int step, Arrays arrType, std::string vectorsOfValues, dataSetParamStr.nx[0], dataSetParamStr.nx[1], dataSetParamStr.nx[2])); block->getKernel()->getDataSet()->setRelaxationFactor(___3DArray); break; + case PhaseField: + ___3DArray = CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>( + vectorsOfValues, dataSetParamStr.nx[0], dataSetParamStr.nx[1], dataSetParamStr.nx[2])); + block->getKernel()->getDataSet()->setPhaseField(___3DArray); + break; default: UB_THROW(UbException(UB_EXARGS, "MPIIOMigrationCoProcessor::readArray : array type does not exist!")); break; diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationCoProcessor.h b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationCoProcessor.h index 428407d37268043837d029fce6ae0ba2f365960b..ad7a93086afa379822fc7909a68fd39748dd607f 100644 --- a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationCoProcessor.h +++ b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationCoProcessor.h @@ -24,7 +24,8 @@ public: AverageFluktuations = 3, AverageTriple = 4, ShearStressVal = 5, - RelaxationFactor = 6 + RelaxationFactor = 6, + PhaseField = 7 }; MPIIOMigrationCoProcessor(SPtr<Grid3D> grid, SPtr<UbScheduler> s, const std::string &path, SPtr<Communicator> comm); diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIORestartCoProcessor.cpp b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIORestartCoProcessor.cpp index 28253ed99af66d1fad0aa409b11bcba5c904ec04..ed5d3b275c006700d29c43f16928d2ddc08827f0 100644 --- a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIORestartCoProcessor.cpp +++ b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIORestartCoProcessor.cpp @@ -149,11 +149,12 @@ void MPIIORestartCoProcessor::writeDataSet(int step) bool firstBlock = true; int doubleCountInBlock = 0; int ic = 0; - SPtr<D3Q27EsoTwist3DSplittedVector> D3Q27EsoTwist3DSplittedVectorPtr; - CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr localDistributions; - CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions; - CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr zeroDistributions; + SPtr<D3Q27EsoTwist3DSplittedVector> D3Q27EsoTwist3DSplittedVectorPtrF, D3Q27EsoTwist3DSplittedVectorPtrH; + CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF, localDistributionsH; + CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF, nonLocalDistributionsH; + CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF, zeroDistributionsH; + for (int level = minInitLevel; level <= maxInitLevel; level++) { for (SPtr<Block3D> block : blocksVector[level]) // blocks of the current level { @@ -168,30 +169,37 @@ void MPIIORestartCoProcessor::writeDataSet(int step) dataSetArray[ic].compressible = block->getKernel()->getCompressible(); dataSetArray[ic].withForcing = block->getKernel()->getWithForcing(); - D3Q27EsoTwist3DSplittedVectorPtr = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>( + D3Q27EsoTwist3DSplittedVectorPtrF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>( block->getKernel()->getDataSet()->getFdistributions()); - localDistributions = D3Q27EsoTwist3DSplittedVectorPtr->getLocalDistributions(); - nonLocalDistributions = D3Q27EsoTwist3DSplittedVectorPtr->getNonLocalDistributions(); - zeroDistributions = D3Q27EsoTwist3DSplittedVectorPtr->getZeroDistributions(); + localDistributionsF = D3Q27EsoTwist3DSplittedVectorPtrF->getLocalDistributions(); + nonLocalDistributionsF = D3Q27EsoTwist3DSplittedVectorPtrF->getNonLocalDistributions(); + zeroDistributionsF = D3Q27EsoTwist3DSplittedVectorPtrF->getZeroDistributions(); + + D3Q27EsoTwist3DSplittedVectorPtrH = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>( + block->getKernel()->getDataSet()->getHdistributions()); + localDistributionsH = D3Q27EsoTwist3DSplittedVectorPtrH->getLocalDistributions(); + nonLocalDistributionsH = D3Q27EsoTwist3DSplittedVectorPtrH->getNonLocalDistributions(); + zeroDistributionsH = D3Q27EsoTwist3DSplittedVectorPtrH->getZeroDistributions(); if (firstBlock) // when first (any) valid block... { - if (localDistributions) { - dataSetParamStr1.nx[0] = static_cast<int>(localDistributions->getNX1()); - dataSetParamStr1.nx[1] = static_cast<int>(localDistributions->getNX2()); - dataSetParamStr1.nx[2] = static_cast<int>(localDistributions->getNX3()); - dataSetParamStr1.nx[3] = static_cast<int>(localDistributions->getNX4()); + if (localDistributionsF) { + dataSetParamStr1.nx[0] = static_cast<int>(localDistributionsF->getNX1()); + dataSetParamStr1.nx[1] = static_cast<int>(localDistributionsF->getNX2()); + dataSetParamStr1.nx[2] = static_cast<int>(localDistributionsF->getNX3()); + dataSetParamStr1.nx[3] = static_cast<int>(localDistributionsF->getNX4()); } - if (nonLocalDistributions) { - dataSetParamStr2.nx[0] = static_cast<int>(nonLocalDistributions->getNX1()); - dataSetParamStr2.nx[1] = static_cast<int>(nonLocalDistributions->getNX2()); - dataSetParamStr2.nx[2] = static_cast<int>(nonLocalDistributions->getNX3()); - dataSetParamStr2.nx[3] = static_cast<int>(nonLocalDistributions->getNX4()); + + if (nonLocalDistributionsF) { + dataSetParamStr2.nx[0] = static_cast<int>(nonLocalDistributionsF->getNX1()); + dataSetParamStr2.nx[1] = static_cast<int>(nonLocalDistributionsF->getNX2()); + dataSetParamStr2.nx[2] = static_cast<int>(nonLocalDistributionsF->getNX3()); + dataSetParamStr2.nx[3] = static_cast<int>(nonLocalDistributionsF->getNX4()); } - if (zeroDistributions) { - dataSetParamStr3.nx[0] = static_cast<int>(zeroDistributions->getNX1()); - dataSetParamStr3.nx[1] = static_cast<int>(zeroDistributions->getNX2()); - dataSetParamStr3.nx[2] = static_cast<int>(zeroDistributions->getNX3()); + if (zeroDistributionsF) { + dataSetParamStr3.nx[0] = static_cast<int>(zeroDistributionsF->getNX1()); + dataSetParamStr3.nx[1] = static_cast<int>(zeroDistributionsF->getNX2()); + dataSetParamStr3.nx[2] = static_cast<int>(zeroDistributionsF->getNX3()); dataSetParamStr3.nx[3] = 1; } @@ -203,10 +211,11 @@ void MPIIORestartCoProcessor::writeDataSet(int step) dataSetParamStr1.nx3 = dataSetParamStr2.nx3 = dataSetParamStr3.nx3 = static_cast<int>(block->getKernel()->getDataSet()->getFdistributions()->getNX3()); + // Fdistributions + Hdistributions doubleCountInBlock = - dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] + - dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3] + - dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3]; + (dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] + + dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3] + + dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3]) * 2; SPtr<CbArray4D<LBMReal, IndexerX4X3X2X1>> averageDensityArray = block->getKernel()->getDataSet()->getAverageDensity(); @@ -250,21 +259,41 @@ void MPIIORestartCoProcessor::writeDataSet(int step) else arrPresence.isRelaxationFactorPresent = false; + SPtr<CbArray3D<LBMReal, IndexerX3X2X1>> phaseField3DPtr = + block->getKernel()->getDataSet()->getPhaseField(); + if (phaseField3DPtr) + arrPresence.isPhaseFieldPresent = true; + else + arrPresence.isPhaseFieldPresent = false; + firstBlock = false; } - if (localDistributions && (dataSetParamStr1.nx[0] > 0) && (dataSetParamStr1.nx[1] > 0) && + if (localDistributionsF && (dataSetParamStr1.nx[0] > 0) && (dataSetParamStr1.nx[1] > 0) && + (dataSetParamStr1.nx[2] > 0) && (dataSetParamStr1.nx[3] > 0)) + doubleValuesArray.insert(doubleValuesArray.end(), localDistributionsF->getDataVector().begin(), + localDistributionsF->getDataVector().end()); + if (nonLocalDistributionsF && (dataSetParamStr2.nx[0] > 0) && (dataSetParamStr2.nx[1] > 0) && + (dataSetParamStr2.nx[2] > 0) && (dataSetParamStr2.nx[3] > 0)) + doubleValuesArray.insert(doubleValuesArray.end(), nonLocalDistributionsF->getDataVector().begin(), + nonLocalDistributionsF->getDataVector().end()); + if (zeroDistributionsF && (dataSetParamStr3.nx[0] > 0) && (dataSetParamStr3.nx[1] > 0) && + (dataSetParamStr3.nx[2] > 0)) + doubleValuesArray.insert(doubleValuesArray.end(), zeroDistributionsF->getDataVector().begin(), + zeroDistributionsF->getDataVector().end()); + + if (localDistributionsH && (dataSetParamStr1.nx[0] > 0) && (dataSetParamStr1.nx[1] > 0) && (dataSetParamStr1.nx[2] > 0) && (dataSetParamStr1.nx[3] > 0)) - doubleValuesArray.insert(doubleValuesArray.end(), localDistributions->getDataVector().begin(), - localDistributions->getDataVector().end()); - if (nonLocalDistributions && (dataSetParamStr2.nx[0] > 0) && (dataSetParamStr2.nx[1] > 0) && + doubleValuesArray.insert(doubleValuesArray.end(), localDistributionsH->getDataVector().begin(), + localDistributionsH->getDataVector().end()); + if (nonLocalDistributionsH && (dataSetParamStr2.nx[0] > 0) && (dataSetParamStr2.nx[1] > 0) && (dataSetParamStr2.nx[2] > 0) && (dataSetParamStr2.nx[3] > 0)) - doubleValuesArray.insert(doubleValuesArray.end(), nonLocalDistributions->getDataVector().begin(), - nonLocalDistributions->getDataVector().end()); - if (zeroDistributions && (dataSetParamStr3.nx[0] > 0) && (dataSetParamStr3.nx[1] > 0) && + doubleValuesArray.insert(doubleValuesArray.end(), nonLocalDistributionsH->getDataVector().begin(), + nonLocalDistributionsH->getDataVector().end()); + if (zeroDistributionsH && (dataSetParamStr3.nx[0] > 0) && (dataSetParamStr3.nx[1] > 0) && (dataSetParamStr3.nx[2] > 0)) - doubleValuesArray.insert(doubleValuesArray.end(), zeroDistributions->getDataVector().begin(), - zeroDistributions->getDataVector().end()); + doubleValuesArray.insert(doubleValuesArray.end(), zeroDistributionsH->getDataVector().begin(), + zeroDistributionsH->getDataVector().end()); ic++; } @@ -373,6 +402,9 @@ void MPIIORestartCoProcessor::writeDataSet(int step) if (arrPresence.isRelaxationFactorPresent) writeRelaxationFactor(step); + + if (arrPresence.isPhaseFieldPresent) + writePhaseField(step); } void MPIIORestartCoProcessor::writeAverageDensityArray(int step) @@ -1197,6 +1229,141 @@ void MPIIORestartCoProcessor::writeRelaxationFactor(int step) delete[] dataSetSmallArray; } +void MPIIORestartCoProcessor::writePhaseField(int step) +{ + int rank, size; + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); + + int blocksCount = 0; // quantity of blocks in the grid, max 2147483648 blocks! + + std::vector<SPtr<Block3D>> blocksVector[25]; + int minInitLevel = this->grid->getCoarsestInitializedLevel(); + int maxInitLevel = this->grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) { + grid->getBlocks(level, rank, blocksVector[level]); + blocksCount += static_cast<int>(blocksVector[level].size()); + } + + DataSetSmallRestart *dataSetSmallArray = new DataSetSmallRestart[blocksCount]; + std::vector<double> doubleValuesArray; // double-values (arrays of f's) in all blocks + dataSetParam dataSetParamStr; + + if (comm->isRoot()) { + UBLOG(logINFO, "MPIIORestartCoProcessor::writePhaseField start collect data rank = " << rank); + UBLOG(logINFO, "Physical Memory currently used by current process: " + << Utilities::getPhysMemUsedByMe() / 1073741824.0 << " GB"); + } + + bool firstBlock = true; + int doubleCountInBlock = 0; + int ic = 0; + SPtr<CbArray3D<LBMReal, IndexerX3X2X1>> PhaseField3DPtr; + + for (int level = minInitLevel; level <= maxInitLevel; level++) { + for (SPtr<Block3D> block : blocksVector[level]) // blocks of the current level + { + dataSetSmallArray[ic].x1 = block->getX1(); // coordinates of the block needed to find it while regenerating the grid + dataSetSmallArray[ic].x2 = block->getX2(); + dataSetSmallArray[ic].x3 = block->getX3(); + dataSetSmallArray[ic].level = block->getLevel(); + + PhaseField3DPtr = block->getKernel()->getDataSet()->getPhaseField(); + + if (firstBlock) // when first (any) valid block... + { + dataSetParamStr.nx1 = dataSetParamStr.nx2 = dataSetParamStr.nx3 = 0; + dataSetParamStr.nx[0] = static_cast<int>(PhaseField3DPtr->getNX1()); + dataSetParamStr.nx[1] = static_cast<int>(PhaseField3DPtr->getNX2()); + dataSetParamStr.nx[2] = static_cast<int>(PhaseField3DPtr->getNX3()); + dataSetParamStr.nx[3] = 1; + doubleCountInBlock = + dataSetParamStr.nx[0] * dataSetParamStr.nx[1] * dataSetParamStr.nx[2] * dataSetParamStr.nx[3]; + + firstBlock = false; + } + + if ((dataSetParamStr.nx[0] > 0) && (dataSetParamStr.nx[1] > 0) && (dataSetParamStr.nx[2] > 0)) + doubleValuesArray.insert(doubleValuesArray.end(), PhaseField3DPtr->getDataVector().begin(), + PhaseField3DPtr->getDataVector().end()); + + ic++; + } + } + + // register new MPI-types depending on the block-specific information + MPI_Type_contiguous(doubleCountInBlock, MPI_DOUBLE, &dataSetDoubleType); + MPI_Type_commit(&dataSetDoubleType); + + if (comm->isRoot()) { + UBLOG(logINFO, "MPIIORestartCoProcessor::writePhaseField start MPI IO rank = " << rank); + UBLOG(logINFO, "Physical Memory currently used by current process: " + << Utilities::getPhysMemUsedByMe() / 1073741824.0 << " GB"); + } + + // write to the file + // all processes calculate their offsets (quantity of bytes that the process is going to write) + // and notify the next process (with the rank = rank + 1) + MPI_Offset write_offset = (MPI_Offset)(size * sizeof(int)); + size_t next_write_offset = 0; + + if (size > 1) { + if (rank == 0) { + next_write_offset = write_offset + sizeof(dataSetParam) + + blocksCount * (sizeof(DataSetSmallRestart) + doubleCountInBlock * sizeof(double)); + MPI_Send(&next_write_offset, 1, MPI_LONG_LONG_INT, 1, 5, MPI_COMM_WORLD); + } else { + MPI_Recv(&write_offset, 1, MPI_LONG_LONG_INT, rank - 1, 5, MPI_COMM_WORLD, MPI_STATUS_IGNORE); + next_write_offset = write_offset + sizeof(dataSetParam) + + blocksCount * (sizeof(DataSetSmallRestart) + doubleCountInBlock * sizeof(double)); + if (rank < size - 1) + MPI_Send(&next_write_offset, 1, MPI_LONG_LONG_INT, rank + 1, 5, MPI_COMM_WORLD); + } + } + + double start, finish; + if (comm->isRoot()) + start = MPI_Wtime(); + + MPI_Info info = MPI_INFO_NULL; + +#ifdef HLRN_LUSTRE + MPI_Info_create(&info); + MPI_Info_set(info, "striping_factor", "40"); + MPI_Info_set(info, "striping_unit", "4M"); +#endif + + MPI_File file_handler; + std::string filename = path + "/mpi_io_cp/mpi_io_cp_" + UbSystem::toString(step) + "/cpPhaseField.bin"; + int rc = MPI_File_open(MPI_COMM_WORLD, filename.c_str(), MPI_MODE_CREATE | MPI_MODE_WRONLY, info, &file_handler); + if (rc != MPI_SUCCESS) + throw UbException(UB_EXARGS, "couldn't open file " + filename); + + // each process writes the quantity of it's blocks + MPI_File_write_at(file_handler, (MPI_Offset)(rank * sizeof(int)), &blocksCount, 1, MPI_INT, MPI_STATUS_IGNORE); + // each process writes common parameters of a dataSet + MPI_File_write_at(file_handler, write_offset, &dataSetParamStr, 1, dataSetParamType, MPI_STATUS_IGNORE); + // each process writes data identifying blocks + MPI_File_write_at(file_handler, (MPI_Offset)(write_offset + sizeof(dataSetParam)), dataSetSmallArray, blocksCount, + dataSetSmallType, MPI_STATUS_IGNORE); + // each process writes the dataSet arrays + if (doubleValuesArray.size() > 0) + MPI_File_write_at(file_handler, + (MPI_Offset)(write_offset + sizeof(dataSetParam) + blocksCount * sizeof(DataSetSmallRestart)), + &doubleValuesArray[0], blocksCount, dataSetDoubleType, MPI_STATUS_IGNORE); + + MPI_File_sync(file_handler); + MPI_File_close(&file_handler); + MPI_Type_free(&dataSetDoubleType); + + if (comm->isRoot()) { + finish = MPI_Wtime(); + UBLOG(logINFO, "MPIIORestartCoProcessor::writePhaseField time: " << finish - start << " s"); + } + + delete[] dataSetSmallArray; +} + void MPIIORestartCoProcessor::writeBoundaryConds(int step) { int rank, size; @@ -1458,9 +1625,9 @@ void MPIIORestartCoProcessor::readDataSet(int step) DataSetRestart *dataSetArray = new DataSetRestart[blocksCount]; double doubleCountInBlock = - dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] + + (dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] + dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3] + - dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3]; + dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3]) * 2; std::vector<double> doubleValuesArray(size_t(blocksCount * doubleCountInBlock)); // double-values in all blocks // define MPI_types depending on the block-specific information @@ -1497,43 +1664,73 @@ void MPIIORestartCoProcessor::readDataSet(int step) << Utilities::getPhysMemUsedByMe() / 1073741824.0 << " GB"); } - size_t index = 0, vectorSize = 0; - std::vector<double> vectorsOfValues1, vectorsOfValues2, vectorsOfValues3; + size_t index = 0; + std::vector<double> vectorsOfValuesF1, vectorsOfValuesF2, vectorsOfValuesF3; + std::vector<double> vectorsOfValuesH1, vectorsOfValuesH2, vectorsOfValuesH3; + size_t vectorSize1 = + dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3]; + size_t vectorSize2 = + dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3]; + size_t vectorSize3 = + dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3]; for (int n = 0; n < blocksCount; n++) { - vectorSize = dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3]; - vectorsOfValues1.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize); - index += vectorSize; + vectorsOfValuesF1.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize1); + index += vectorSize1; - vectorSize = dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3]; - vectorsOfValues2.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize); - index += vectorSize; + vectorsOfValuesF2.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize2); + index += vectorSize2; - vectorSize = dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3]; - vectorsOfValues3.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize); - index += vectorSize; + vectorsOfValuesF3.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize3); + index += vectorSize3; - SPtr<DistributionArray3D> mFdistributions(new D3Q27EsoTwist3DSplittedVector()); + vectorsOfValuesH1.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize1); + index += vectorSize1; + vectorsOfValuesH2.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize2); + index += vectorSize2; + + vectorsOfValuesH3.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize3); + index += vectorSize3; + + SPtr<DistributionArray3D> mFdistributions(new D3Q27EsoTwist3DSplittedVector()); dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions) ->setLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr( - new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValues1, dataSetParamStr1.nx[0], + new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesF1, dataSetParamStr1.nx[0], dataSetParamStr1.nx[1], dataSetParamStr1.nx[2], dataSetParamStr1.nx[3]))); dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions) ->setNonLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr( - new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValues2, dataSetParamStr2.nx[0], + new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesF2, dataSetParamStr2.nx[0], dataSetParamStr2.nx[1], dataSetParamStr2.nx[2], dataSetParamStr2.nx[3]))); dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions) - ->setZeroDistributions( - CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>( - vectorsOfValues3, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2]))); + ->setZeroDistributions(CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>( + vectorsOfValuesF3, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2]))); dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX1(dataSetParamStr1.nx1); dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX2(dataSetParamStr1.nx2); dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX3(dataSetParamStr1.nx3); + SPtr<DistributionArray3D> mHdistributions(new D3Q27EsoTwist3DSplittedVector()); + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions) + ->setLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr( + new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesH1, dataSetParamStr1.nx[0], + dataSetParamStr1.nx[1], dataSetParamStr1.nx[2], + dataSetParamStr1.nx[3]))); + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions) + ->setNonLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr( + new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesH2, dataSetParamStr2.nx[0], + dataSetParamStr2.nx[1], dataSetParamStr2.nx[2], + dataSetParamStr2.nx[3]))); + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions) + ->setZeroDistributions(CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>( + vectorsOfValuesH3, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2]))); + + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)->setNX1(dataSetParamStr1.nx1); + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)->setNX2(dataSetParamStr1.nx2); + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)->setNX3(dataSetParamStr1.nx3); + // find the nesessary block and fill it SPtr<Block3D> block = grid->getBlock(dataSetArray[n].x1, dataSetArray[n].x2, dataSetArray[n].x3, dataSetArray[n].level); @@ -1546,6 +1743,7 @@ void MPIIORestartCoProcessor::readDataSet(int step) kernel->setWithForcing(dataSetArray[n].withForcing); SPtr<DataSet3D> dataSetPtr = SPtr<DataSet3D>(new DataSet3D()); dataSetPtr->setFdistributions(mFdistributions); + dataSetPtr->setHdistributions(mHdistributions); kernel->setDataSet(dataSetPtr); block->setKernel(kernel); } @@ -1586,6 +1784,9 @@ void MPIIORestartCoProcessor::readDataSet(int step) if (arrPresence.isRelaxationFactorPresent) readRelaxationFactor(step); + + if (arrPresence.isPhaseFieldPresent) + readPhaseField(step); } void MPIIORestartCoProcessor::readAverageDensityArray(int step) @@ -2197,6 +2398,106 @@ void MPIIORestartCoProcessor::readRelaxationFactor(int step) delete[] dataSetSmallArray; } +void MPIIORestartCoProcessor::readPhaseField(int step) +{ + int rank, size; + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); + + if (comm->isRoot()) { + UBLOG(logINFO, "MPIIORestartCoProcessor::readPhaseField start MPI IO rank = " << rank); + UBLOG(logINFO, "Physical Memory currently used by current process: " + << Utilities::getPhysMemUsedByMe() / 1073741824.0 << " GB"); + } + double start, finish; + if (comm->isRoot()) + start = MPI_Wtime(); + + MPI_File file_handler; + std::string filename = path + "/mpi_io_cp/mpi_io_cp_" + UbSystem::toString(step) + "/cpPhaseField.bin"; + int rc = MPI_File_open(MPI_COMM_WORLD, filename.c_str(), MPI_MODE_RDONLY, MPI_INFO_NULL, &file_handler); + if (rc != MPI_SUCCESS) + throw UbException(UB_EXARGS, "couldn't open file " + filename); + + // read count of blocks + int blocksCount = 0; + dataSetParam dataSetParamStr; + MPI_File_read_at(file_handler, (MPI_Offset)(rank * sizeof(int)), &blocksCount, 1, MPI_INT, MPI_STATUS_IGNORE); + MPI_File_read_at(file_handler, (MPI_Offset)(size * sizeof(int)), &dataSetParamStr, 1, dataSetParamType, + MPI_STATUS_IGNORE); + + DataSetSmallRestart *dataSetSmallArray = new DataSetSmallRestart[blocksCount]; + int doubleCountInBlock = + dataSetParamStr.nx[0] * dataSetParamStr.nx[1] * dataSetParamStr.nx[2] * dataSetParamStr.nx[3]; + std::vector<double> doubleValuesArray(blocksCount * doubleCountInBlock); // double-values in all blocks + + // define MPI_types depending on the block-specific information + MPI_Type_contiguous(doubleCountInBlock, MPI_DOUBLE, &dataSetDoubleType); + MPI_Type_commit(&dataSetDoubleType); + + // calculate the read offset + MPI_Offset read_offset = (MPI_Offset)(size * sizeof(int)); + size_t next_read_offset = 0; + + if (size > 1) { + if (rank == 0) { + next_read_offset = read_offset + sizeof(dataSetParam) + + blocksCount * (sizeof(DataSetSmallRestart) + doubleCountInBlock * sizeof(double)); + MPI_Send(&next_read_offset, 1, MPI_LONG_LONG_INT, 1, 5, MPI_COMM_WORLD); + } else { + MPI_Recv(&read_offset, 1, MPI_LONG_LONG_INT, rank - 1, 5, MPI_COMM_WORLD, MPI_STATUS_IGNORE); + next_read_offset = read_offset + sizeof(dataSetParam) + + blocksCount * (sizeof(DataSetSmallRestart) + doubleCountInBlock * sizeof(double)); + if (rank < size - 1) + MPI_Send(&next_read_offset, 1, MPI_LONG_LONG_INT, rank + 1, 5, MPI_COMM_WORLD); + } + } + + MPI_File_read_at(file_handler, (MPI_Offset)(read_offset + sizeof(dataSetParam)), dataSetSmallArray, blocksCount, + dataSetSmallType, MPI_STATUS_IGNORE); + if (doubleCountInBlock > 0) + MPI_File_read_at(file_handler, + (MPI_Offset)(read_offset + sizeof(dataSetParam) + blocksCount * sizeof(DataSetSmallRestart)), + &doubleValuesArray[0], blocksCount, dataSetDoubleType, MPI_STATUS_IGNORE); + MPI_File_close(&file_handler); + MPI_Type_free(&dataSetDoubleType); + + if (comm->isRoot()) { + finish = MPI_Wtime(); + UBLOG(logINFO, "MPIIORestartCoProcessor::readPhaseField time: " << finish - start << " s"); + UBLOG(logINFO, "MPIIORestartCoProcessor::readPhaseField start of restore of data, rank = " << rank); + UBLOG(logINFO, "Physical Memory currently used by current process: " + << Utilities::getPhysMemUsedByMe() / 1073741824.0 << " GB"); + } + + size_t index = 0; + size_t nextVectorSize = + dataSetParamStr.nx[0] * dataSetParamStr.nx[1] * dataSetParamStr.nx[2] * dataSetParamStr.nx[3]; + std::vector<double> vectorsOfValues; + for (int n = 0; n < blocksCount; n++) { + vectorsOfValues.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + nextVectorSize); + index += nextVectorSize; + + // fill PhaseField array + SPtr<PhaseFieldArray3D> mPhaseField; + mPhaseField = CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>( + vectorsOfValues, dataSetParamStr.nx[0], dataSetParamStr.nx[1], dataSetParamStr.nx[2])); + + // find the nesessary block and fill it + SPtr<Block3D> block = grid->getBlock(dataSetSmallArray[n].x1, dataSetSmallArray[n].x2, dataSetSmallArray[n].x3, + dataSetSmallArray[n].level); + block->getKernel()->getDataSet()->setPhaseField(mPhaseField); + } + + if (comm->isRoot()) { + UBLOG(logINFO, "MPIIORestartCoProcessor::readPhaseField end of restore of data, rank = " << rank); + UBLOG(logINFO, "Physical Memory currently used by current process: " + << Utilities::getPhysMemUsedByMe() / 1073741824.0 << " GB"); + } + + delete[] dataSetSmallArray; +} + void MPIIORestartCoProcessor::readBoundaryConds(int step) { int rank, size; diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIORestartCoProcessor.h b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIORestartCoProcessor.h index a5d65c206cef7f6be00ae955ded6b90247983cc7..cbcf8c553943aa325f415cd123ae1fbe0bf4dcf3 100644 --- a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIORestartCoProcessor.h +++ b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIORestartCoProcessor.h @@ -35,7 +35,8 @@ public: void writeAverageTripleArray(int step); void writeShearStressValArray(int step); void writeRelaxationFactor(int step); - //! Writes the boundary conditions of the blocks into the file cpBC.bin + void writePhaseField(int step); + //! Writes the boundary conditions of the blocks into the file cpBC.bin void writeBoundaryConds(int step); //! Reads the blocks of the grid from the file cpBlocks.bin @@ -48,6 +49,7 @@ public: void readAverageTripleArray(int step); void readShearStressValArray(int step); void readRelaxationFactor(int step); + void readPhaseField(int step); //! Reads the boundary conditions of the blocks from the file cpBC.bin void readBoundaryConds(int step); //! The function sets LBMKernel diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/WriteMultiphaseQuantitiesCoProcessor.cpp b/src/cpu/VirtualFluidsCore/CoProcessors/WriteMultiphaseQuantitiesCoProcessor.cpp index 312ed01adf39ff6eb4aaf0965d8df6763ad3e8d1..73034d88996a3c22d8a3aa9e86517c5cbe92ffc3 100644 --- a/src/cpu/VirtualFluidsCore/CoProcessors/WriteMultiphaseQuantitiesCoProcessor.cpp +++ b/src/cpu/VirtualFluidsCore/CoProcessors/WriteMultiphaseQuantitiesCoProcessor.cpp @@ -200,7 +200,7 @@ void WriteMultiphaseQuantitiesCoProcessor::addDataMQ(SPtr<Block3D> block) // nummern vergeben und node vector erstellen + daten sammeln CbArray3D<int> nodeNumbers((int)maxX1, (int)maxX2, (int)maxX3, -1); - CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr phaseField1( + CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr phaseField( new CbArray3D<LBMReal, IndexerX3X2X1>(maxX1, maxX2, maxX3, -999.0)); for (int ix3 = minX3; ix3 < maxX3; ix3++) { @@ -208,7 +208,7 @@ void WriteMultiphaseQuantitiesCoProcessor::addDataMQ(SPtr<Block3D> block) for (int ix1 = minX1; ix1 < maxX1; ix1++) { if (!bcArray->isUndefined(ix1, ix2, ix3) && !bcArray->isSolid(ix1, ix2, ix3)) { distributionsH->getDistribution(f, ix1, ix2, ix3); - (*phaseField1)(ix1, ix2, ix3) = + (*phaseField)(ix1, ix2, ix3) = ((f[TNE] + f[BSW]) + (f[TSE] + f[BNW])) + ((f[BSE] + f[TNW]) + (f[TSW] + f[BNE])) + (((f[NE] + f[SW]) + (f[SE] + f[NW])) + ((f[TE] + f[BW]) + (f[BE] + f[TW])) + ((f[BN] + f[TS]) + (f[TN] + f[BS]))) + @@ -243,7 +243,7 @@ void WriteMultiphaseQuantitiesCoProcessor::addDataMQ(SPtr<Block3D> block) nodes.push_back(UbTupleFloat3(float(worldCoordinates[0]), float(worldCoordinates[1]), float(worldCoordinates[2]))); - phi[REST] = (*phaseField1)(ix1, ix2, ix3); + phi[REST] = (*phaseField)(ix1, ix2, ix3); if ((ix1 == 0) || (ix2 == 0) || (ix3 == 0)) { dX1_phi = 0.0; @@ -254,32 +254,32 @@ void WriteMultiphaseQuantitiesCoProcessor::addDataMQ(SPtr<Block3D> block) // vx2 = 0.0; // vx3 = 0.0; } else { - phi[E] = (*phaseField1)(ix1 + DX1[E], ix2 + DX2[E], ix3 + DX3[E]); - phi[N] = (*phaseField1)(ix1 + DX1[N], ix2 + DX2[N], ix3 + DX3[N]); - phi[T] = (*phaseField1)(ix1 + DX1[T], ix2 + DX2[T], ix3 + DX3[T]); - phi[W] = (*phaseField1)(ix1 + DX1[W], ix2 + DX2[W], ix3 + DX3[W]); - phi[S] = (*phaseField1)(ix1 + DX1[S], ix2 + DX2[S], ix3 + DX3[S]); - phi[B] = (*phaseField1)(ix1 + DX1[B], ix2 + DX2[B], ix3 + DX3[B]); - phi[NE] = (*phaseField1)(ix1 + DX1[NE], ix2 + DX2[NE], ix3 + DX3[NE]); - phi[NW] = (*phaseField1)(ix1 + DX1[NW], ix2 + DX2[NW], ix3 + DX3[NW]); - phi[TE] = (*phaseField1)(ix1 + DX1[TE], ix2 + DX2[TE], ix3 + DX3[TE]); - phi[TW] = (*phaseField1)(ix1 + DX1[TW], ix2 + DX2[TW], ix3 + DX3[TW]); - phi[TN] = (*phaseField1)(ix1 + DX1[TN], ix2 + DX2[TN], ix3 + DX3[TN]); - phi[TS] = (*phaseField1)(ix1 + DX1[TS], ix2 + DX2[TS], ix3 + DX3[TS]); - phi[SW] = (*phaseField1)(ix1 + DX1[SW], ix2 + DX2[SW], ix3 + DX3[SW]); - phi[SE] = (*phaseField1)(ix1 + DX1[SE], ix2 + DX2[SE], ix3 + DX3[SE]); - phi[BW] = (*phaseField1)(ix1 + DX1[BW], ix2 + DX2[BW], ix3 + DX3[BW]); - phi[BE] = (*phaseField1)(ix1 + DX1[BE], ix2 + DX2[BE], ix3 + DX3[BE]); - phi[BS] = (*phaseField1)(ix1 + DX1[BS], ix2 + DX2[BS], ix3 + DX3[BS]); - phi[BN] = (*phaseField1)(ix1 + DX1[BN], ix2 + DX2[BN], ix3 + DX3[BN]); - phi[BSW] = (*phaseField1)(ix1 + DX1[BSW], ix2 + DX2[BSW], ix3 + DX3[BSW]); - phi[BSE] = (*phaseField1)(ix1 + DX1[BSE], ix2 + DX2[BSE], ix3 + DX3[BSE]); - phi[BNW] = (*phaseField1)(ix1 + DX1[BNW], ix2 + DX2[BNW], ix3 + DX3[BNW]); - phi[BNE] = (*phaseField1)(ix1 + DX1[BNE], ix2 + DX2[BNE], ix3 + DX3[BNE]); - phi[TNE] = (*phaseField1)(ix1 + DX1[TNE], ix2 + DX2[TNE], ix3 + DX3[TNE]); - phi[TNW] = (*phaseField1)(ix1 + DX1[TNW], ix2 + DX2[TNW], ix3 + DX3[TNW]); - phi[TSE] = (*phaseField1)(ix1 + DX1[TSE], ix2 + DX2[TSE], ix3 + DX3[TSE]); - phi[TSW] = (*phaseField1)(ix1 + DX1[TSW], ix2 + DX2[TSW], ix3 + DX3[TSW]); + phi[E] = (*phaseField)(ix1 + DX1[E], ix2 + DX2[E], ix3 + DX3[E]); + phi[N] = (*phaseField)(ix1 + DX1[N], ix2 + DX2[N], ix3 + DX3[N]); + phi[T] = (*phaseField)(ix1 + DX1[T], ix2 + DX2[T], ix3 + DX3[T]); + phi[W] = (*phaseField)(ix1 + DX1[W], ix2 + DX2[W], ix3 + DX3[W]); + phi[S] = (*phaseField)(ix1 + DX1[S], ix2 + DX2[S], ix3 + DX3[S]); + phi[B] = (*phaseField)(ix1 + DX1[B], ix2 + DX2[B], ix3 + DX3[B]); + phi[NE] = (*phaseField)(ix1 + DX1[NE], ix2 + DX2[NE], ix3 + DX3[NE]); + phi[NW] = (*phaseField)(ix1 + DX1[NW], ix2 + DX2[NW], ix3 + DX3[NW]); + phi[TE] = (*phaseField)(ix1 + DX1[TE], ix2 + DX2[TE], ix3 + DX3[TE]); + phi[TW] = (*phaseField)(ix1 + DX1[TW], ix2 + DX2[TW], ix3 + DX3[TW]); + phi[TN] = (*phaseField)(ix1 + DX1[TN], ix2 + DX2[TN], ix3 + DX3[TN]); + phi[TS] = (*phaseField)(ix1 + DX1[TS], ix2 + DX2[TS], ix3 + DX3[TS]); + phi[SW] = (*phaseField)(ix1 + DX1[SW], ix2 + DX2[SW], ix3 + DX3[SW]); + phi[SE] = (*phaseField)(ix1 + DX1[SE], ix2 + DX2[SE], ix3 + DX3[SE]); + phi[BW] = (*phaseField)(ix1 + DX1[BW], ix2 + DX2[BW], ix3 + DX3[BW]); + phi[BE] = (*phaseField)(ix1 + DX1[BE], ix2 + DX2[BE], ix3 + DX3[BE]); + phi[BS] = (*phaseField)(ix1 + DX1[BS], ix2 + DX2[BS], ix3 + DX3[BS]); + phi[BN] = (*phaseField)(ix1 + DX1[BN], ix2 + DX2[BN], ix3 + DX3[BN]); + phi[BSW] = (*phaseField)(ix1 + DX1[BSW], ix2 + DX2[BSW], ix3 + DX3[BSW]); + phi[BSE] = (*phaseField)(ix1 + DX1[BSE], ix2 + DX2[BSE], ix3 + DX3[BSE]); + phi[BNW] = (*phaseField)(ix1 + DX1[BNW], ix2 + DX2[BNW], ix3 + DX3[BNW]); + phi[BNE] = (*phaseField)(ix1 + DX1[BNE], ix2 + DX2[BNE], ix3 + DX3[BNE]); + phi[TNE] = (*phaseField)(ix1 + DX1[TNE], ix2 + DX2[TNE], ix3 + DX3[TNE]); + phi[TNW] = (*phaseField)(ix1 + DX1[TNW], ix2 + DX2[TNW], ix3 + DX3[TNW]); + phi[TSE] = (*phaseField)(ix1 + DX1[TSE], ix2 + DX2[TSE], ix3 + DX3[TSE]); + phi[TSW] = (*phaseField)(ix1 + DX1[TSW], ix2 + DX2[TSW], ix3 + DX3[TSW]); dX1_phi = 0.0 * gradX1_phi(phi); dX2_phi = 0.0 * gradX2_phi(phi); dX3_phi = 0.0 * gradX3_phi(phi); diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/WriteThixotropyQuantitiesCoProcessor.cpp b/src/cpu/VirtualFluidsCore/CoProcessors/WriteThixotropyQuantitiesCoProcessor.cpp index 8c4462066705154bad61846f5e9c147c303a3ba3..f2edcd551b8a08ff00792a7daea4ee70d0fa17af 100644 --- a/src/cpu/VirtualFluidsCore/CoProcessors/WriteThixotropyQuantitiesCoProcessor.cpp +++ b/src/cpu/VirtualFluidsCore/CoProcessors/WriteThixotropyQuantitiesCoProcessor.cpp @@ -1,3 +1,35 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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 WriteMultiphaseQuantitiesCoProcessor.h +//! \ingroup CoProcessors +//! \author Konstantin Kutscher +//======================================================================================= #include "WriteThixotropyQuantitiesCoProcessor.h" #include "LBMKernel.h" #include "BCProcessor.h" diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/WriteThixotropyQuantitiesCoProcessor.h b/src/cpu/VirtualFluidsCore/CoProcessors/WriteThixotropyQuantitiesCoProcessor.h index 269bb4a3b9be8072f33793e6ce105481ebd3b243..b14e7f9f54c0e8e444a5f00804fee5cbc1ff6e21 100644 --- a/src/cpu/VirtualFluidsCore/CoProcessors/WriteThixotropyQuantitiesCoProcessor.h +++ b/src/cpu/VirtualFluidsCore/CoProcessors/WriteThixotropyQuantitiesCoProcessor.h @@ -1,3 +1,36 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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 WriteMultiphaseQuantitiesCoProcessor.h +//! \ingroup CoProcessors +//! \author Konstantin Kutscher +//======================================================================================= + #ifndef WriteThixotropyQuantitiesCoProcessor_H #define WriteThixotropyQuantitiesCoProcessor_H diff --git a/src/cpu/VirtualFluidsCore/Connectors/FullDirectConnector.h b/src/cpu/VirtualFluidsCore/Connectors/FullDirectConnector.h index e7bfaa2c325301177826dac671c37f9cf59ad63e..6d8877ee909183dcb4088ccb77f6726e83447ba8 100644 --- a/src/cpu/VirtualFluidsCore/Connectors/FullDirectConnector.h +++ b/src/cpu/VirtualFluidsCore/Connectors/FullDirectConnector.h @@ -49,7 +49,7 @@ public: protected: virtual inline void updatePointers() = 0; - virtual void exchangeData(); + void exchangeData(); virtual inline void exchangeData(int x1From, int x2From, int x3From, int x1To, int x2To, int x3To) = 0; int maxX1; diff --git a/src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullVectorConnector.cpp b/src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullVectorConnector.cpp index adda86a09e81075af093211561d7f0ee023e94f5..739efcddb9ceea5c0951df83833d64ad90bb02c5 100644 --- a/src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullVectorConnector.cpp +++ b/src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullVectorConnector.cpp @@ -12,6 +12,8 @@ OneDistributionFullVectorConnector::OneDistributionFullVectorConnector(SPtr<Bloc ////////////////////////////////////////////////////////////////////////// void OneDistributionFullVectorConnector::init() { + FullVectorConnector::init(); + fDis = dynamicPointerCast<EsoTwist3D>(block.lock()->getKernel()->getDataSet()->getFdistributions()); int anz = 27; diff --git a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullVectorConnector.cpp b/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullVectorConnector.cpp index af6c20d3229a77b00b4d79df9197f8ad9f11f84d..2e726fc7b88c9ef229e503924eadcf53a9b06dfd 100644 --- a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullVectorConnector.cpp +++ b/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullVectorConnector.cpp @@ -50,6 +50,8 @@ ThreeDistributionsFullVectorConnector::ThreeDistributionsFullVectorConnector(SPt ////////////////////////////////////////////////////////////////////////// void ThreeDistributionsFullVectorConnector::init() { + FullVectorConnector::init(); + fDis = dynamicPointerCast<EsoTwist3D>(block.lock()->getKernel()->getDataSet()->getFdistributions()); hDis = dynamicPointerCast<EsoTwist3D>(block.lock()->getKernel()->getDataSet()->getHdistributions()); h2Dis = dynamicPointerCast<EsoTwist3D>(block.lock()->getKernel()->getDataSet()->getH2distributions()); diff --git a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullVectorConnector.cpp b/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullVectorConnector.cpp index a37bff3fc3b34667555ce02200fd2296b7514032..7fe8bc3643c337323ef25ee35c260597744e6191 100644 --- a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullVectorConnector.cpp +++ b/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullVectorConnector.cpp @@ -50,6 +50,8 @@ TwoDistributionsFullVectorConnector::TwoDistributionsFullVectorConnector(SPtr<Bl ////////////////////////////////////////////////////////////////////////// void TwoDistributionsFullVectorConnector::init() { + FullVectorConnector::init(); + fDis = dynamicPointerCast<EsoTwist3D>(block.lock()->getKernel()->getDataSet()->getFdistributions()); hDis = dynamicPointerCast<EsoTwist3D>(block.lock()->getKernel()->getDataSet()->getHdistributions()); diff --git a/src/cpu/VirtualFluidsCore/Data/DataSet3D.h b/src/cpu/VirtualFluidsCore/Data/DataSet3D.h index 1563f415a5c4043fdd7249362bbc2b053acb6137..b8b541546f3c2cccb49ff09c859b8c97c2e22f63 100644 --- a/src/cpu/VirtualFluidsCore/Data/DataSet3D.h +++ b/src/cpu/VirtualFluidsCore/Data/DataSet3D.h @@ -55,8 +55,8 @@ public: SPtr<DistributionArray3D> getHdistributions() const; void setHdistributions(SPtr<DistributionArray3D> distributions); - SPtr<DistributionArray3D> getH1distributions() const; - void setH1distributions(SPtr<DistributionArray3D> distributions); + //SPtr<DistributionArray3D> getH1distributions() const; + //void setH1distributions(SPtr<DistributionArray3D> distributions); SPtr<DistributionArray3D> getH2distributions() const; void setH2distributions(SPtr<DistributionArray3D> distributions); @@ -94,7 +94,7 @@ private: SPtr<DistributionArray3D> hdistributions; - SPtr<DistributionArray3D> h1distributions; + //SPtr<DistributionArray3D> h1distributions; SPtr<DistributionArray3D> h2distributions; SPtr<AverageValuesArray3D> averageValues; @@ -120,9 +120,9 @@ inline SPtr<DistributionArray3D> DataSet3D::getHdistributions() const { return h inline void DataSet3D::setHdistributions(SPtr<DistributionArray3D> distributions) { hdistributions = distributions; } -inline SPtr<DistributionArray3D> DataSet3D::getH1distributions() const { return h1distributions; } - -inline void DataSet3D::setH1distributions(SPtr<DistributionArray3D> distributions) { h1distributions = distributions; } +//inline SPtr<DistributionArray3D> DataSet3D::getH1distributions() const { return h1distributions; } +// +//inline void DataSet3D::setH1distributions(SPtr<DistributionArray3D> distributions) { h1distributions = distributions; } inline SPtr<DistributionArray3D> DataSet3D::getH2distributions() const { return h2distributions; } diff --git a/src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.cpp index a62fef298fc0c18eb053c1138949ab1fb8e58ead..ce8b66cb5ad2873fbf04fe1ed5a2499259903acb 100644 --- a/src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.cpp +++ b/src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.cpp @@ -284,13 +284,28 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step) LBMReal dX2_phi = gradX2_phi(); LBMReal dX3_phi = gradX3_phi(); + LBMReal denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1e-9; LBMReal normX1 = dX1_phi/denom; LBMReal normX2 = dX2_phi/denom; - LBMReal normX3 = dX3_phi/denom; + LBMReal normX3 = dX3_phi/denom; - collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[REST] - phiH) / (phiH - phiL); + ///test for magnitude of gradient from phase indicator directly + //if (fabs((1.0 - phi[REST]) * (phi[REST]) */* c4*/ - (denom- 1e-9)) / denom > 1e-3 &&phi[REST]>0.4 &&phi[REST]<0.6) { + // std::cout << (1.0 - phi[REST]) * (phi[REST]) // *c4 + // << " " << denom <<" "<< ((1.0 - phi[REST]) * (phi[REST]) * c4 ) / denom << std::endl; + //} + //dX1_phi = (1.0 - phi[REST]) * (phi[REST]) /* c4 */* normX1; + //dX2_phi = (1.0 - phi[REST]) * (phi[REST]) /* c4 */* normX2; + //dX3_phi = (1.0 - phi[REST]) * (phi[REST]) /* c4 */* normX3; + + //denom = 1.0; + + ///!test + + collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[REST] - phiH) / (phiH - phiL); + //collFactorM = phi[REST] - phiL < (phiH - phiL) * 0.05 ? collFactorG : collFactorL; LBMReal mu = 2 * beta * phi[REST] * (phi[REST] - 1) * (2 * phi[REST] - 1) - kappa * nabla2_phi(); @@ -313,35 +328,35 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step) ////Incompressible Kernal - mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3)/rho; - mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) / rho; - mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) / rho; - mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) / rho; - mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) / rho; - mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) / rho; - mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) / rho; - mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) / rho; - mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) / rho; - mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) / rho; - mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) / rho; - mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) / rho; - mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) / rho; + mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3)/rho*c3; + mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) / rho * c3; + mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) / rho * c3; + mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) / rho * c3; + mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) / rho * c3; + mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) / rho * c3; + mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) / rho * c3; + mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) / rho * c3; + mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) / rho * c3; + mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) / rho * c3; + mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) / rho * c3; + mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) / rho * c3; + mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) / rho * c3; - mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) / rho; - mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) / rho; - mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) / rho; - mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) / rho; - mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) / rho; - mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) / rho; - mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) / rho; - mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) / rho; - mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) / rho; - mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) / rho; - mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) / rho; - mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) / rho; - mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) / rho; + mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) / rho * c3; + mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) / rho * c3; + mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) / rho * c3; + mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) / rho * c3; + mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) / rho * c3; + mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) / rho * c3; + mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) / rho * c3; + mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) / rho * c3; + mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) / rho * c3; + mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) / rho * c3; + mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) / rho * c3; + mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) / rho * c3; + mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) / rho * c3; - mfbbb = (*this->zeroDistributionsF)(x1, x2, x3) / rho; + mfbbb = (*this->zeroDistributionsF)(x1, x2, x3) / rho * c3; @@ -369,6 +384,70 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step) vvx += mu * dX1_phi*c1o2; vvy += mu * dX2_phi * c1o2; vvz += mu * dX3_phi * c1o2; + + + ///----Classic source term 8.4.2021 + + LBMReal ux2; + LBMReal uy2; + LBMReal uz2; + ux2 = vvx * vvx; + uy2 = vvy * vvy; + uz2 = vvz * vvz; + LBMReal forcingTerm[D3Q27System::ENDF + 1]; + for (int dir = STARTF; dir <= (FENDDIR); dir++) { + LBMReal velProd = DX1[dir] * vvx + DX2[dir] * vvy + DX3[dir] * vvz; + LBMReal velSq1 = velProd * velProd; + LBMReal gamma = WEIGTH[dir] * (1.0 + 3 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)); + + LBMReal fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi; + + forcingTerm[dir] = + (-vvx) * (fac1 * dX1_phi ) + + (-vvy) * (fac1 * dX2_phi ) + + (-vvz) * (fac1 * dX3_phi ) + + (DX1[dir]) * (fac1 * dX1_phi ) + + (DX2[dir]) * (fac1 * dX2_phi ) + + (DX3[dir]) * (fac1 * dX3_phi ); + } + + LBMReal gamma = WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); + LBMReal fac1 = (gamma - WEIGTH[REST]) * c1o3 * rhoToPhi; + forcingTerm[REST] = (-vvx) * (fac1 * dX1_phi ) + + (-vvy) * (fac1 * dX2_phi ) + + (-vvz) * (fac1 * dX3_phi ); + + mfcbb += 3.0 * ( 0.5 * forcingTerm[E]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; + mfbcb += 3.0 * ( 0.5 * forcingTerm[N]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; + mfbbc += 3.0 * ( 0.5 * forcingTerm[T]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; + mfccb += 3.0 * ( 0.5 * forcingTerm[NE]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; + mfacb += 3.0 * ( 0.5 * forcingTerm[NW]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; + mfcbc += 3.0 * ( 0.5 * forcingTerm[TE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; + mfabc += 3.0 * ( 0.5 * forcingTerm[TW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; + mfbcc += 3.0 * ( 0.5 * forcingTerm[TN]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; + mfbac += 3.0 * ( 0.5 * forcingTerm[TS]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; + mfccc += 3.0 * ( 0.5 * forcingTerm[TNE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; + mfacc += 3.0 * ( 0.5 * forcingTerm[TNW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; + mfcac += 3.0 * ( 0.5 * forcingTerm[TSE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; + mfaac += 3.0 * ( 0.5 * forcingTerm[TSW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; + mfabb += 3.0 * ( 0.5 * forcingTerm[W]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; + mfbab += 3.0 * ( 0.5 * forcingTerm[S]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; + mfbba += 3.0 * ( 0.5 * forcingTerm[B]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; + mfaab += 3.0 * ( 0.5 * forcingTerm[SW]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; + mfcab += 3.0 * ( 0.5 * forcingTerm[SE]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; + mfaba += 3.0 * ( 0.5 * forcingTerm[BW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; + mfcba += 3.0 * ( 0.5 * forcingTerm[BE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; + mfbaa += 3.0 * ( 0.5 * forcingTerm[BS]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; + mfbca += 3.0 * ( 0.5 * forcingTerm[BN]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; + mfaaa += 3.0 * ( 0.5 * forcingTerm[BSW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; + mfcaa += 3.0 * ( 0.5 * forcingTerm[BSE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; + mfaca += 3.0 * ( 0.5 * forcingTerm[BNW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; + mfcca += 3.0 * ( 0.5 * forcingTerm[BNE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; + mfbbb += 3.0 * ( 0.5 * forcingTerm[REST]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST] + + //-------------------------------------------------------- + + //forcing /////////////////////////////////////////////////////////////////////////////////////////// @@ -663,12 +742,23 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step) // Cumulants //////////////////////////////////////////////////////////////////////////////////// LBMReal OxxPyyPzz = 1.; //omega2 or bulk viscosity - LBMReal OxyyPxzz = 1.;//-s9;//2+s9;// - LBMReal OxyyMxzz = 1.;//2+s9;// - LBMReal O4 = 1.; + //LBMReal OxyyPxzz = 2.0 - collFactorM;// 1.;//-s9;//2+s9;// + //LBMReal OxyyMxzz = 2.0 - collFactorM;// 1.;//2+s9;// + LBMReal O4 = 1.0;//collFactorM;// 1.; LBMReal O5 = 1.; LBMReal O6 = 1.; + + /////fourth order parameters; here only for test. Move out of loop! + + LBMReal OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0))); + LBMReal OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM); + LBMReal Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); + LBMReal A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); + //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::B' ) + LBMReal BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); + + //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 @@ -711,19 +801,23 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step) // mxxPyyPzz += c2o3 * rhoToPhi * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz); //17.03.2021 attempt for statililization by assymptotically vanishing bias - LBMReal correctionScaling = rhoToPhi /rho;// +0.5;// (vx2 + vy2 + vz2) * 100;// +0.5;//(vx2 + vy2 + vz2)*1000; - mxxPyyPzz += (1.0/6.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz)* correctionScaling; // As in Hesam's code + LBMReal correctionScaling =0.0* rhoToPhi /rho;// +0.5;// (vx2 + vy2 + vz2) * 100;// +0.5;//(vx2 + vy2 + vz2)*1000; + mxxPyyPzz += (1.0/3.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz)* correctionScaling; // As in Hesam's code mxxMyy += c1o3 * (dX1_phi * vvx - dX2_phi * vvy)* correctionScaling; mxxMzz += c1o3 * (dX1_phi * vvx - dX3_phi * vvz) * correctionScaling; mfabb += c1o6 * (dX2_phi * vvz + dX3_phi * vvy) * correctionScaling; mfbab += c1o6 * (dX1_phi * vvz + dX3_phi * vvx) * correctionScaling; mfbba += c1o6 * (dX1_phi * vvy + dX2_phi * vvx) * correctionScaling; - LBMReal dxux = 0.0;// -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz); - LBMReal dyuy = 0.0;// dxux + collFactorM * c3o2 * mxxMyy; - LBMReal dzuz = 0.0;// dxux + collFactorM * c3o2 * mxxMzz; + LBMReal dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz); + LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy; + LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz; - //relax + LBMReal Dxy = -three * collFactorM * mfbba; + LBMReal Dxz = -three * collFactorM * mfbab; + LBMReal Dyz = -three * collFactorM * mfabb; + + ////relax unfiltered mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy); mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz); @@ -732,9 +826,28 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step) mfbab += collFactorM * (-mfbab); mfbba += collFactorM * (-mfbba); + + //relax filtered + //LBMReal interfaceFilter=0.001; + //LBMReal interfaceFactor = c1;// (dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi); + + //mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); + // + //wadjust = collFactorM + (1. - collFactorM) * fabs(mxxMyy) / (fabs(mxxMyy) * interfaceFactor + interfaceFilter)* interfaceFactor; + //mxxMyy += wadjust * (-mxxMyy);// -3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy); + //wadjust = collFactorM + (1. - collFactorM) * fabs(mxxMzz) / (fabs(mxxMzz) * interfaceFactor + interfaceFilter) * interfaceFactor; + //mxxMzz += wadjust * (-mxxMzz);// -3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz); + + //wadjust = collFactorM + (1. - collFactorM) * fabs(mfabb) / (fabs(mfabb) * interfaceFactor + interfaceFilter) * interfaceFactor; + //mfabb += wadjust * (-mfabb); + //wadjust = collFactorM + (1. - collFactorM) * fabs(mfbab) / (fabs(mfbab) * interfaceFactor + interfaceFilter) * interfaceFactor; + //mfbab += wadjust * (-mfbab); + //wadjust = collFactorM + (1. - collFactorM) * fabs(mfbba) / (fabs(mfbba) * interfaceFactor + interfaceFilter) * interfaceFactor; + //mfbba += wadjust * (-mfbba); + //applying phase field gradients second part: //mxxPyyPzz += c2o3 * rhoToPhi * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz); - mxxPyyPzz += (1.0 / 6.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling; // As in Hesam's code + mxxPyyPzz += (1.0 / 3.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling; // As in Hesam's code mxxMyy += c1o3 * (dX1_phi * vvx - dX2_phi * vvy) * correctionScaling; mxxMzz += c1o3 * (dX1_phi * vvx - dX3_phi * vvz) * correctionScaling; mfabb += c1o6 * (dX2_phi * vvz + dX3_phi * vvy) * correctionScaling; @@ -763,7 +876,7 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step) LBMReal mxyyMxzz = mfbca - mfbac; //relax - wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit); + wadjust = Oxyz + (1. - Oxyz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit); mfbbb += wadjust * (-mfbbb); wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit); mxxyPyzz += wadjust * (-mxxyPyzz); @@ -787,19 +900,71 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step) mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; //4. - CUMacc += O4 * (-CUMacc); - CUMcac += O4 * (-CUMcac); - CUMcca += O4 * (-CUMcca); + //CUMacc += O4 * (-CUMacc); + //CUMcac += O4 * (-CUMcac); + //CUMcca += O4 * (-CUMcca); + + //CUMbbc += O4 * (-CUMbbc); + //CUMbcb += O4 * (-CUMbcb); + //CUMcbb += O4 * (-CUMcbb); + + + CUMacc = -O4 * (one / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (one - O4) * (CUMacc); + CUMcac = -O4 * (one / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (one - O4) * (CUMcac); + CUMcca = -O4 * (one / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (one - O4) * (CUMcca); + CUMbbc = -O4 * (one / collFactorM - c1o2) * Dxy * c1o3 * BB + (one - O4) * (CUMbbc); + CUMbcb = -O4 * (one / collFactorM - c1o2) * Dxz * c1o3 * BB + (one - O4) * (CUMbcb); + CUMcbb = -O4 * (one / collFactorM - c1o2) * Dyz * c1o3 * BB + (one - O4) * (CUMcbb); - CUMbbc += O4 * (-CUMbbc); - CUMbcb += O4 * (-CUMbcb); - CUMcbb += O4 * (-CUMcbb); + + + + //CUMacc -= (one / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A ; + //CUMcac -= (one / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A ; + //CUMcca -= (one / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A ; + //CUMbbc -= (one / collFactorM - c1o2) * Dxy * c1o3 * B ; + //CUMbcb -= (one / collFactorM - c1o2) * Dxz * c1o3 * B ; + //CUMcbb -= (one / collFactorM - c1o2) * Dyz * c1o3 * B ; + + //wadjust = O4 + (1. - O4) * fabs(CUMacc) / (fabs(CUMacc) + qudricLimit); + //CUMacc += wadjust * (-CUMacc); + //wadjust = O4 + (1. - O4) * fabs(CUMcac) / (fabs(CUMcac) + qudricLimit); + //CUMcac += wadjust * (-CUMcac); + //wadjust = O4 + (1. - O4) * fabs(CUMcca) / (fabs(CUMcca) + qudricLimit); + //CUMcca += wadjust * (-CUMcca); + //wadjust = O4 + (1. - O4) * fabs(CUMbbc) / (fabs(CUMbbc) + qudricLimit); + //CUMbbc += wadjust * (-CUMbbc); + //wadjust = O4 + (1. - O4) * fabs(CUMbcb) / (fabs(CUMbcb) + qudricLimit); + //CUMbcb += wadjust * (-CUMbcb); + //wadjust = O4 + (1. - O4) * fabs(CUMcbb) / (fabs(CUMcbb) + qudricLimit); + //CUMcbb += wadjust * (-CUMcbb); + + + + + + + //CUMacc += (one / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A; + //CUMcac += (one / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A; + //CUMcca += (one / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A; + //CUMbbc += (one / collFactorM - c1o2) * Dxy * c1o3 * B; + //CUMbcb += (one / collFactorM - c1o2) * Dxz * c1o3 * B; + //CUMcbb += (one / collFactorM - c1o2) * Dyz * c1o3 * B; //5. CUMbcc += O5 * (-CUMbcc); CUMcbc += O5 * (-CUMcbc); CUMccb += O5 * (-CUMccb); + + //wadjust = O5 + (1. - O5) * fabs(CUMbcc) / (fabs(CUMbcc) + qudricLimit); + //CUMbcc += wadjust * (-CUMbcc); + //wadjust = O5 + (1. - O5) * fabs(CUMcbc) / (fabs(CUMcbc) + qudricLimit); + //CUMbcc += wadjust * (-CUMcbc); + //wadjust = O5 + (1. - O5) * fabs(CUMccb) / (fabs(CUMccb) + qudricLimit); + //CUMbcc += wadjust * (-CUMccb); + + //6. CUMccc += O6 * (-CUMccc); @@ -1058,57 +1223,93 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step) ////////////////////////////////////////////////////////////////////////// //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(drho - rho_post); - LBMReal dif = drho+ (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) *correctionScaling - 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, "drho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(rho_post) - + " dif=" + UbSystem::toString(dif) - + " drho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3))); - //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): drho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)); - //exit(EXIT_FAILURE); - } -#endif +//#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(drho - rho_post); +// LBMReal dif = drho+ (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) *correctionScaling - 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, "drho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(rho_post) +// + " dif=" + UbSystem::toString(dif) +// + " drho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3))); +// //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): drho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)); +// //exit(EXIT_FAILURE); +// } +//#endif ////////////////////////////////////////////////////////////////////////// //write distribution ////////////////////////////////////////////////////////////////////////// - (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb * rho; - (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab * rho; - (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba * rho; - (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab * rho; - (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab * rho; - (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba * rho; - (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba * rho; - (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa * rho; - (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca * rho; - (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa * rho; - (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa * rho; - (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca * rho; - (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca * rho; - - (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb * rho; - (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb * rho; - (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc * rho; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb * rho; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb * rho; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc * rho; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc * rho; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc * rho; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac * rho; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc * rho; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc * rho; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac * rho; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac * rho; - - (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb * rho; + + /////classical source term 8.4.2021 + + mfcbb += 3.0 * (0.5 * forcingTerm[E]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; + mfbcb += 3.0 * (0.5 * forcingTerm[N]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; + mfbbc += 3.0 * (0.5 * forcingTerm[T]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; + mfccb += 3.0 * (0.5 * forcingTerm[NE]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; + mfacb += 3.0 * (0.5 * forcingTerm[NW]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; + mfcbc += 3.0 * (0.5 * forcingTerm[TE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; + mfabc += 3.0 * (0.5 * forcingTerm[TW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; + mfbcc += 3.0 * (0.5 * forcingTerm[TN]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; + mfbac += 3.0 * (0.5 * forcingTerm[TS]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; + mfccc += 3.0 * (0.5 * forcingTerm[TNE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; + mfacc += 3.0 * (0.5 * forcingTerm[TNW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; + mfcac += 3.0 * (0.5 * forcingTerm[TSE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; + mfaac += 3.0 * (0.5 * forcingTerm[TSW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; + mfabb += 3.0 * (0.5 * forcingTerm[W]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; + mfbab += 3.0 * (0.5 * forcingTerm[S]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; + mfbba += 3.0 * (0.5 * forcingTerm[B]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; + mfaab += 3.0 * (0.5 * forcingTerm[SW]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; + mfcab += 3.0 * (0.5 * forcingTerm[SE]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; + mfaba += 3.0 * (0.5 * forcingTerm[BW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; + mfcba += 3.0 * (0.5 * forcingTerm[BE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; + mfbaa += 3.0 * (0.5 * forcingTerm[BS]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; + mfbca += 3.0 * (0.5 * forcingTerm[BN]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; + mfaaa += 3.0 * (0.5 * forcingTerm[BSW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; + mfcaa += 3.0 * (0.5 * forcingTerm[BSE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; + mfaca += 3.0 * (0.5 * forcingTerm[BNW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; + mfcca += 3.0 * (0.5 * forcingTerm[BNE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; + mfbbb += 3.0 * (0.5 * forcingTerm[REST]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST] + + + + //////////////////// + + + (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb * rho*c1o3; + (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab * rho * c1o3; + (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba * rho * c1o3; + (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab * rho * c1o3; + (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab * rho * c1o3; + (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba * rho * c1o3; + (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba * rho * c1o3; + (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa * rho * c1o3; + (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca * rho * c1o3; + (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa * rho * c1o3; + (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa * rho * c1o3; + (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca * rho * c1o3; + (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca * rho * c1o3; + + (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb * rho * c1o3; + (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb * rho * c1o3; + (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc * rho * c1o3; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb * rho * c1o3; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb * rho * c1o3; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc * rho * c1o3; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc * rho * c1o3; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc * rho * c1o3; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac * rho * c1o3; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc * rho * c1o3; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc * rho * c1o3; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac * rho * c1o3; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac * rho * c1o3; + + (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb * rho * c1o3; ////////////////////////////////////////////////////////////////////////// ////!Incompressible Kernal @@ -2248,88 +2449,95 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step) - ///////////////////// PHASE-FIELD BGK SOLVER /////////////////////////////// - - //h[E] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); - //h[N] = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); - //h[T] = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); - //h[NE] = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); - //h[NW] = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); - //h[TE] = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); - //h[TW] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); - //h[TN] = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); - //h[TS] = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); - //h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); - //h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); - //h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); - //h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); - - //h[W] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); - //h[S] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); - //h[B] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); - //h[SW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); - //h[SE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); - //h[BW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); - //h[BE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); - //h[BS] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); - //h[BN] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); - //h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); - //h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); - //h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); - //h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); - - //h[REST] = (*this->zeroDistributionsH)(x1, x2, x3); - - //for (int dir = STARTF; dir < (ENDF + 1); dir++) { - // LBMReal velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz; - // LBMReal velSq1 = velProd * velProd; - // LBMReal hEq; //, gEq; - - // if (dir != REST) { - // LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]]) / 2.0; - // LBMReal hSource = (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST]) * (dirGrad_phi) / denom; - // hEq = phi[REST] * WEIGTH[dir] * (1.0 + 3.0 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)) + hSource * WEIGTH[dir]; - - // // This corresponds with the collision factor of 1.0 which equals (tauH + 0.5). - // h[dir] = h[dir] - (h[dir] - hEq) / (tauH); - - // } else { - // hEq = phi[REST] * WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); - // h[REST] = h[REST] - (h[REST] - hEq) / (tauH); - // } - //} - - //(*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3) = h[D3Q27System::INV_E]; - //(*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3) = h[D3Q27System::INV_N]; - //(*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3) = h[D3Q27System::INV_T]; - //(*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3) = h[D3Q27System::INV_NE]; - //(*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3) = h[D3Q27System::INV_NW]; - //(*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3) = h[D3Q27System::INV_TE]; - //(*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3) = h[D3Q27System::INV_TW]; - //(*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3) = h[D3Q27System::INV_TN]; - //(*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3) = h[D3Q27System::INV_TS]; - //(*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3) = h[D3Q27System::INV_TNE]; - //(*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3) = h[D3Q27System::INV_TNW]; - //(*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3) = h[D3Q27System::INV_TSE]; - //(*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[D3Q27System::INV_TSW]; - - //(*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3) = h[D3Q27System::INV_W]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3) = h[D3Q27System::INV_S]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p) = h[D3Q27System::INV_B]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3) = h[D3Q27System::INV_SW]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3) = h[D3Q27System::INV_SE]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p) = h[D3Q27System::INV_BW]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p) = h[D3Q27System::INV_BE]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p) = h[D3Q27System::INV_BS]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p) = h[D3Q27System::INV_BN]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[D3Q27System::INV_BSW]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p) = h[D3Q27System::INV_BSE]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p) = h[D3Q27System::INV_BNW]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p) = h[D3Q27System::INV_BNE]; - - //(*this->zeroDistributionsH)(x1, x2, x3) = h[D3Q27System::REST]; - - ///////////////////// END OF OLD BGK SOLVER /////////////////////////////// + /////////////////// PHASE-FIELD BGK SOLVER /////////////////////////////// +//using namespace D3Q27System; + + // h[E] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); + // h[N] = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); + // h[T] = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); + // h[NE] = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); + // h[NW] = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); + // h[TE] = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); + // h[TW] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); + // h[TN] = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); + // h[TS] = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); + // h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); + // h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); + // h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); + // h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); + + // h[W] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); + // h[S] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); + // h[B] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); + // h[SW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); + // h[SE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); + // h[BW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); + // h[BE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); + // h[BS] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); + // h[BN] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); + // h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); + // h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); + // h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); + // h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); + + // h[REST] = (*this->zeroDistributionsH)(x1, x2, x3); + ////vvx *= 3; + ////vvy *= 3; + ////vvz *= 3; + ////vx2 = vvx * vvx; + ////vy2 = vvy * vvy; + ////vz2 = vvz * vvz; + + // for (int dir = STARTF; dir < (ENDF + 1); dir++) { + // LBMReal velProd = DX1[dir] * vvx + DX2[dir] * vvy + DX3[dir] * vvz; + // LBMReal velSq1 = velProd * velProd; + // LBMReal hEq; //, gEq; + + // if (dir != REST) { + // LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]]) / 2.0; + // LBMReal hSource = (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST]) * (dirGrad_phi) / denom; + // hEq = phi[REST] * WEIGTH[dir] * (1.0 + 3.0 * velProd + 4.5 * velSq1 - 1.5 * (vx2 + vy2 + vz2)) + hSource * WEIGTH[dir]; + + // // This corresponds with the collision factor of 1.0 which equals (tauH + 0.5). + // h[dir] = h[dir] - (h[dir] - hEq) / (tauH); + + // } else { + // hEq = phi[REST] * WEIGTH[REST] * (1.0 - 1.5 * (vx2 + vy2 + vz2)); + // h[REST] = h[REST] - (h[REST] - hEq) / (tauH); + // } + // } + + // (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3) = h[D3Q27System::INV_E]; + // (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3) = h[D3Q27System::INV_N]; + // (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3) = h[D3Q27System::INV_T]; + // (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3) = h[D3Q27System::INV_NE]; + // (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3) = h[D3Q27System::INV_NW]; + // (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3) = h[D3Q27System::INV_TE]; + // (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3) = h[D3Q27System::INV_TW]; + // (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3) = h[D3Q27System::INV_TN]; + // (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3) = h[D3Q27System::INV_TS]; + // (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3) = h[D3Q27System::INV_TNE]; + // (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3) = h[D3Q27System::INV_TNW]; + // (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3) = h[D3Q27System::INV_TSE]; + // (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[D3Q27System::INV_TSW]; + + // (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3) = h[D3Q27System::INV_W]; + // (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3) = h[D3Q27System::INV_S]; + // (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p) = h[D3Q27System::INV_B]; + // (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3) = h[D3Q27System::INV_SW]; + // (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3) = h[D3Q27System::INV_SE]; + // (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p) = h[D3Q27System::INV_BW]; + // (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p) = h[D3Q27System::INV_BE]; + // (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p) = h[D3Q27System::INV_BS]; + // (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p) = h[D3Q27System::INV_BN]; + // (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[D3Q27System::INV_BSW]; + // (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p) = h[D3Q27System::INV_BSE]; + // (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p) = h[D3Q27System::INV_BNW]; + // (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p) = h[D3Q27System::INV_BNE]; + + // (*this->zeroDistributionsH)(x1, x2, x3) = h[D3Q27System::REST]; + + /////////////////// END OF OLD BGK SOLVER /////////////////////////////// } } } diff --git a/src/cpu/VirtualFluidsCore/Parallel/MPIIODataStructures.h b/src/cpu/VirtualFluidsCore/Parallel/MPIIODataStructures.h index 2d79817cc0d85a65e3d20d9736f8bf8e55c1a6c6..8b284fc2f768472a4115c61cd567ce0b37b7f4e9 100644 --- a/src/cpu/VirtualFluidsCore/Parallel/MPIIODataStructures.h +++ b/src/cpu/VirtualFluidsCore/Parallel/MPIIODataStructures.h @@ -164,6 +164,7 @@ struct DSArraysPresence { bool isAverageTripleArrayPresent; bool isShearStressValArrayPresent; bool isRelaxationFactorPresent; + bool isPhaseFieldPresent; }; } // namespace MPIIODataStructures #endif \ No newline at end of file